首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Slick中显式指定AutoInc列的值

在Slick中,可以使用returning方法来显式指定AutoInc列的值。returning方法允许我们在插入数据后获取生成的自增值,并将其作为结果返回。

下面是一个示例代码,展示了如何在Slick中显式指定AutoInc列的值:

代码语言:txt
复制
import slick.jdbc.MySQLProfile.api._

// 定义一个表示表结构的case class
case class User(id: Option[Int], name: String)

// 定义一个表示表的对象
class Users(tag: Tag) extends Table[User](tag, "users") {
  def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
  def name = column[String]("name")
  
  def * = (id.?, name) <> (User.tupled, User.unapply)
}

// 创建表对象的实例
val users = TableQuery[Users]

// 创建数据库连接
val db = Database.forConfig("mydb")

// 定义一个插入操作,并使用returning方法获取自增值
val insertAction = users returning users.map(_.id) into ((user, id) => user.copy(id = Some(id))) += User(None, "John")

// 执行插入操作并获取结果
val result = db.run(insertAction)

// 处理结果
result.onComplete {
  case Success(insertedUser) => println("Inserted user with id: " + insertedUser.id)
  case Failure(ex) => println("Failed to insert user: " + ex.getMessage)
}

在上述示例中,我们首先定义了一个表示表结构的User类和一个表示表的Users类。id列被标记为PrimaryKeyAutoInc,表示它是主键且自增。然后,我们创建了一个users对象来表示该表。

接下来,我们创建了一个数据库连接,并定义了一个插入操作insertAction。在这个操作中,我们使用returning方法来获取自增值,并将其作为结果返回。通过into方法,我们将自增值与插入的数据进行组合,最后使用+=操作符执行插入操作。

最后,我们使用db.run方法来执行插入操作,并通过onComplete方法处理结果。如果插入成功,我们将打印出生成的自增值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在 WPF 中获取所有已经显式赋过值的依赖项属性

获取 WPF 的依赖项属性的值时,会依照优先级去各个级别获取。这样,无论你什么时候去获取依赖项属性,都至少是有一个有效值的。有什么方法可以获取哪些属性被显式赋值过呢?...如果是 CLR 属性,我们可以自己写判断条件,然而依赖项属性没有自己写判断条件的地方。 本文介绍如何获取以及显式赋值过的依赖项属性。...---- 需要用到 DependencyObject.GetLocalValueEnumerator() 方法来获得一个可以遍历所有依赖项属性本地值。...} } 这里的 value 可能是 MarkupExtension 可能是 BindingExpression 还可能是其他一些可能延迟计算值的提供者。...因此,你不能在这里获取到常规方法获取到的依赖项属性的真实类型的值。 但是,此枚举拿到的所有依赖项属性的值都是此依赖对象已经赋值过的依赖项属性的本地值。如果没有赋值过,将不会在这里的遍历中出现。

21040
  • 细谈Slick(6)- Projection:ProvenShape,强类型的Query结果类型

    在Slick官方文档中描述:连接后台数据库后,需要通过定义Projection,即def * 来进行具体库表列column的选择和排序。...通过Projection我们可以选择库表中部分列、也可以增加一些自定义列computed column。具体来说Projection提供了数据库表列与Scala值的对应。...实际上Slick本身提供了Tuple、Case Class、HList等类型的默认Shape隐式实例,所以我们可以把Projection直接写成 def * = (...)...造成的后果是返回的结果行不含字段名,只有字段位置。使用这样的行数据很容易错误对应,或者重复确认正确的列值会影响工作效率。...如果返回的结果类型是Seq[Person]这样的话:Person是个带属性的对象如case class,那么我们就可以通过IDE提示的字段名称来选择字段了。

    1.6K50

    浅谈Slick(1)- 基本功能描述

    Slick (Scala language-integrated connection kit)是scala的一个FRM(Functional Relational Mapper),即函数式的关系数据库编程工具库...Slick的主要目的是使关系数据库能更容易、更自然的融入函数式编程模式,它可以使使用者像对待scala集合一样来处理关系数据库表。也就是说可以用scala集合的那些丰富的操作函数来处理库表数据。...Slick把数据库编程融入到scala编程中,编程人员可以不需要编写SQL代码。我把Slick官方网站上Slick3.1.1文档的Slick介绍章节中的一些描述和例子拿过来帮助介绍Slick的功能。...[worksheets.slickIntro.Coffees] = Rep(TableExpansion) 21 } 我们把数据库中的COFFEES表与Coffees类做了对应,包括字段、索引、默认值、...具体实现方式是利用freemonad(DBIOAction类型就是个freemonad)的延迟运算模式,将DBIOAction的编程和实际运算分离,在DBIOAction编程过程中不会产生副作用(side-effect

    81470

    转换程序的一些问题:设置为 OFF 时,不能为表 Test 中的标识列插入显式值。8cad0260

    可这次我是想在此基础上,能变成能转换任何论坛的,因此不想借助他自带的存储过程。...先前有一点很难做,因为一般的主键都是自动递增的,在自动递增的时候是不允许插入值的,这点让我一只很烦,今天有时间,特地建立了一个表来进行测试 字段名 备注 ID 设为主键 自动递增 Name 字符型...建立以后,我先随便输入了一些数据(当中输入的时候,ID是不允许输入的,但会自动递增) 随后我运行一条Sql语句: insert into [Test] (id,name) values (4,'asdf...'); 很明显,抛出一个Sql错误: 消息 544,级别 16,状态 1,第 1 行 当  设置为 OFF 时,不能为表 'Test' 中的标识列插入显式值。    ...PS1:今天公司上午网站出现问题,造成了很严重的后果,我很坚信我的同事不会犯connection.close()的错误,错误原因还没有查到,星期一准备接受全体惩罚 PS2:年会要到了,要我表演节目,晕死

    2.3K50

    浅谈Slick(2)- Slick101:第一个动手尝试的项目

    看完Slick官方网站上关于Slick3.1.1技术文档后决定开始动手建一个项目来尝试一下Slick功能的具体使用方法。我把这个过程中的一些了解和想法记录下来和大家一起分享。...Slick是集成jdbc的更高层的Query编程语言,可以通过jdbc的url、DataSource等来指定目标数据库类型及相关的参数。...对应Slick中的具体函数有: val db = Database.forConfig("mydb") val db = Database.forURL("jdbc:h2:mem:test1;DB_CLOSE_DELAY...) 在Slick的Database配置方面forConfig("confItem")是比较灵活、方便实用的。...这样一是可以规范代码,再就是如果遇到一个宽表有很多列的话可以节省许多重复铺垫及避免无谓错误。

    1.6K90

    Akka(35): Http:Server side streaming

    但是,现实中的数据交换远远不止针对request和response操作能够满足的。系统之间数据交换经常涉及文件或者数据库表类型的数据上传下载。...虽然在Http标准中描述了如何通过MultiPart消息类型进行批量数据的传输,但是这个标准涉及的实现细节包括数据内容描述、数据分段方式、消息数据长度计算等等简直可以立即令人却步。...首先需要在implicit-scope内提供Marshaller[ByteString,MessageEntity]类型的隐式实例: trait JsonCodec extends Json4sSupport...._ val dbConfig: slick.basic.DatabaseConfig[slick.jdbc.H2Profile] = slick.basic.DatabaseConfig.forConfig...._ val dbConfig: slick.basic.DatabaseConfig[slick.jdbc.H2Profile] = slick.basic.DatabaseConfig.forConfig

    82750

    geotrellis使用(三十)使用geotrellis读取PostGIS空间数据

    一、geotrellis.slick 简介 geotrellis.slick是geotrellis的一个模块,它是对slick的封装。...首先是对geotrllis.slick的引用,在build.sbt中的libraryDependencies添加如下项: "org.locationtech.geotrellis" %% "geotrellis-slick...ScalaFutures主要是获取查询等的Future操作的结果值。 引入上面driver中定义的api,并重写patienceConfig加大超时时间,防止下面的future执行超时。...当然如果在实体映射中某个字段按照上述方式设置可空,那么在insert以及下面的update操作的时候此字段的类型都要为Option,即有值的地方使用Some包裹,无值的地方设置为None。...可以看出此处q的值在获取的时候稍有变化,加了一个c.geom @&& bbox的条件,@&&是geotrellis写好的空间支持函数,该函数表示前面的空间是否在缓冲区(Polygon)中。

    1.7K70

    深入浅出表锁(Table Lock)

    意向锁在保证并发性的前提下,实现了 行锁和表锁共存且满足事务隔离性 的要求  自增锁(AUTO-INC锁) 在使用MySQL过程中,我们可以为表的某个列添加 AUTO_INCREMENT 属性。...INSERT INTO `teacher` (name) VALUES ('zhangsan'), ('lisi'); 上边的插入语句并没有为id列显式赋值,所以系统会自动为它赋上递增的值,结果如下所示...InnoDB在每处理一行,为AUTO_INCREMENT列 分配一个新值。...例如 INSERT INTO teacher (id,name) VALUES (1,'a'), (NULL,'b'), (5,'c'), (NULL,'d'); 只是指定了部分id的值。...MDL 的作用是,保证读写的正确性。比 如,如果一个查询正在遍历一个表中的数据,而执行期间另一个线程对这个 表结构做变更 ,增加了一 列,那么查询线程拿到的结果跟表结构对不上,肯定是不行的。

    1K40

    Scala 的数据库访问框架:Slick 3.0 移除了 session 相关的 API

    Scala 的数据库访问框架:Slick 3.0 移除了 session 相关的 API Slick 3 对于 Slick 2 的改变相当于 Python 3 至于 Python 2 的改变。...Slick 3 的新特性集中在 :大量使用组合的设计模式,不需要显式声明session,非阻塞,stream支持的 reactive 等 。 不过我最喜欢这个方法: setFetchSize 。...具体来说: 在Scala slick 2.x 中: db.withSession{    implicit session =>      query.run } 在Scala slick 3.x 中需要替换为...,可以参考这里: https://github.com/slick/slick/blob/master/slick-testkit/src/main/scala/com/typesafe/slick/testkit.../tests/CountTest.scala 从Slick 2.X 迁移到 Slick 3.X http://stackoverflow.com/questions/30718671/how-to-port-slick

    769100

    FunDA(13)- 示范:用户自定义操作函数 - user defined tasks

    FunDA是一种函数式的编程工具,它所产生的程序是由许多功能单一的细小函数组合而成,这些函数就是用户自定义操作函数了。我们在前面曾经提过FunDA的运作原理模拟了数据流管道。...FDAROW)之后最为适合 2、动作行(action-row):case class包嵌slick.DBIOAction的数据类型,如:FDAActionRow(slickQueryAction) 3...乍看好像直接用函数式编程中的map,flatMap函数都能达到同样的目标,如: fdaStream.map(row => transformData(row)).map(action => runQueryAction...FunDA规范了一套标准的自定义函数操作流程,由一下几个步骤组成: 1、确定当前流元素类型 2、在该类型的框架内使用和变动流元素字段值 3、流动控制:控制元素向下游的流动 我们将在这篇讨论里示范各种形式和功能的自定义函数...我们的示范就是把这个表里的字段属性转换成匹配的类型后生成一个新表AQMRPT,并把AIRQM里数据的字段值经过转换后并入新表。

    1.3K80

    mysql的几种锁_初中常见七种沉淀

    一旦为自动增量列生成了值,无论是否完成“类似INSERT”语句以及包含事务是否回滚,都不能回滚。 这种丢失的值不被重用。 因此,存储在表的AUTO_INCREMENT列中的值可能存在间隙。 3....为AUTO_INCREMENT列分配一个负值 在所有锁定模式(0,1和2)中,如果您为AUTO_INCREMENT列分配了一个负值,则InnoDB会将该行为视为未指定值,并为其生成新值。 5....如果AUTO_INCREMENT值大于指定整数类型的最大整数 在所有锁定模式(0,1和2)中,如果值大于可以存储在指定整数类型中的最大整数,则InnoDB会将该值设置为指定类型所允许的最大值。 6....在自动递增计数器初始化之后,如果您未明确指定AUTO_INCREMENT列的值,InnoDB会递增计数器并将新值分配给该列。...如果插入显式指定列值的行,并且该值大于当前计数器值,则将计数器设置为指定的列值。 只要服务器运行,InnoDB就使用内存中自动递增计数器。

    82420

    Percona XtraDB Cluster Strict Mode(PXC 5.7)

    MASTER:等同于ENFORCING,除了不执行显式表锁定的验证外 。此模式可以用于将写入操作隔离到单个节点的群集。...在运行时,所有操作都是允许的。 PERMISSIVE   在启动时,不会进行验证。   在运行时,所有操作都是允许的,但是如果在没有定义显式主键的情况下在表上执行不希望的操作,则会记录警告。...在运行时,任何在没有显式主键的表上执行的不受欢迎的操作都将被拒绝,并且会记录一个错误。 5、日志输出 Percona XtraDB集群不支持将MySQL数据库中的表作为日志输出的目的地。...6、显式表锁定 Percona XtraDB集群只有对显式表锁定操作的实验性支持。...该验证检查innodb_autoinc_lock_mode变量的值。默认情况下,变量设置为1(连续锁定模式),但应该设置为2(交错锁定模式)。

    1.7K20

    MySQL常见的七种锁详细介绍

    一旦为自动增量列生成了值,无论是否完成“类似INSERT”语句以及包含事务是否回滚,都不能回滚。 这种丢失的值不被重用。 因此,存储在表的AUTO_INCREMENT列中的值可能存在间隙。 3....为AUTO_INCREMENT列分配一个负值 在所有锁定模式(0,1和2)中,如果您为AUTO_INCREMENT列分配了一个负值,则InnoDB会将该行为视为未指定值,并为其生成新值。 5....如果AUTO_INCREMENT值大于指定整数类型的最大整数 在所有锁定模式(0,1和2)中,如果值大于可以存储在指定整数类型中的最大整数,则InnoDB会将该值设置为指定类型所允许的最大值。 6....在自动递增计数器初始化之后,如果您未明确指定AUTO_INCREMENT列的值,InnoDB会递增计数器并将新值分配给该列。...如果插入显式指定列值的行,并且该值大于当前计数器值,则将计数器设置为指定的列值。 只要服务器运行,InnoDB就使用内存中自动递增计数器。

    99220

    第03期:列非空与自增

    对于包含 NULL 列的求 COUNT 值也不准确 t1 和 t2 的记录数是一样的,但是字段 r1 包含了 NULL,这导致结果忽略了这些值。...二、AUTO_INCREMENT 列的自增属性,一般用来设置整数列根据一定步长逐步增长的值,类似于其他数据库的序列。不过这里的“序列”是基于特定一张表的。关于自增属性的相关特性如下: 1....innodb_autoinc_lock_mode=1 代表连续模式,和传统模式差不多,不同的点在于对于简单的插入语句,比如 SQL 2,只在分配新的 ID 过程中持有一个轻量级的互斥锁(线程级别,而不是事务级别...自增列溢出现象 自增属性的列如果到了此列数据类型的最大值,会发生值溢出。比如变更表 f1 的自增属性列为 tinyint。 SQL 2 显式插入最大值 127, SQL 3 就报错了。...自增列也可以显式插入有符号的值 mysql> insert into f1 values (-10),(-20),(-30);Query OK, 3 rows affected (0.01 sec)Records

    62210

    FunDA(15)- 示范:任务并行运算 - user task parallel execution

    FunDA的并行运算施用就是对用户自定义函数的并行运算。原理上就是把一个输入流截分成多个输入流并行地输入到一个自定义函数的多个运行实例。...这些函数运行实例同时在各自不同的线程里同步运算直至耗尽所有输入。并行运算的具体函数实例数是用fs2-nondeterminism的算法根据CPU内核数、线程池配置和用户指定的最大运算实例数来决定的。...并在这个过程中把STATENAME和COUNTYNAME字段转换成STATES和COUNTIES表的id字段。...NORMAQMTable(tag: Tag) extends Table[NORMAQMModel](tag, "NORMAQM") { def rid = column[Long]("ROWID",O.AutoInc...下面就是这次示范的源代码: import slick.jdbc.meta._ import com.bayakala.funda._ import api._ import scala.language.implicitConversions

    60890

    2021-01-05:mysql的自增id的实现逻辑是什么样子的?

    以 InnoDB 作为存储引擎的表,表中的数据都会有一个主键,即使你不创建主键,系统也会帮你创建一个隐式的主键。...这种以主键作为 B+ 树索引的键值而构建的 B+ 树索引,我们称之为聚集索引。 存储中,聚集索引的数据,会根据索引的值,对应的数据也会聚集存储在一起。...AutoIncrement 原理 我们这里只关心 InnoDB 引擎的。 AutoIncrement 最大值 AutoIncrement 最大值,和列类型相关。...,这种模式下所有针对auto_increment列的插入操作都会加表级别的AUTO-INC锁,在语句执行结束则会释放,分配的值也是一个个分配,是连续的,正常情况下也不会有间隙(当然如果事务rollback...SELECT和LOAD DATA)才会采用AUTO-INC锁这种方式,而针对已知数量的普通插入,则采用了一种新的轻量级的互斥锁来分配auto_increment列的值。

    51910
    领券