首页
学习
活动
专区
工具
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 还可能是其他一些可能延迟计算提供者。...因此,你不能在这里获取到常规方法获取到依赖项属性真实类型。 但是,此枚举拿到所有依赖项属性都是此依赖对象已经赋值过依赖项属性本地。如果没有赋值过,将不会在这里遍历中出现。

19540
  • 细谈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

    79870

    转换程序一些问题:设置为 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编程语言,可以通过jdbcurl、DataSource等来指定目标数据库类型及相关参数。...对应Slick具体函数有: val db = Database.forConfig("mydb") val db = Database.forURL("jdbc:h2:mem:test1;DB_CLOSE_DELAY...) 在SlickDatabase配置方面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

    81850

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

    一、geotrellis.slick 简介 geotrellis.slick是geotrellis一个模块,它是对slick封装。...首先是对geotrllis.slick引用,在build.sbtlibraryDependencies添加如下项: "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 作用是,保证读写正确性。比 ,如果一个查询正在遍历一个表数据,而执行期间另一个线程对这个 表结构做变更 ,增加了一 ,那么查询线程拿到结果跟表结构对不上,肯定是不行

    98640

    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

    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

    765100

    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就使用内存自动递增计数器。

    82020

    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

    第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

    61910

    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就使用内存自动递增计数器。

    97520

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

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

    51410

    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

    60490
    领券