- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想通过做一个小测试来掌握 Slick 的窍门。我正在尝试插入。测试运行,没有错误,但是当我检查数据库时,没有插入任何记录。
我做错了什么?
这是我的测试代码:
注意:我禁用了第一个“flatMap”,因为当我想测试第二个插入方法时,当启用第一个 flatmap 函数时该代码没有执行。
两种插入方法都不会插入新记录。对所有项目的第一个查询确实有效。 'Test id:xx' 行被打印到控制台。
object TestSlick extends App {
import slick.driver.PostgresDriver.api._
import concurrent.ExecutionContext.Implicits.global
import concurrent.duration._
val config = ConfigFactory.load()
val username = config.getString("app.database.jdbc.username")
val password = config.getString("app.database.jdbc.password")
val url: String = config.getString("app.database.jdbc.url")
val db = Database.forURL(url, username, password)
try {
import Tables._
val res = db.run(headlines.result).map(_.foreach {
case HeadLineRow(id, _, _, _, _, companyId, text, from, days, end, user) =>
println(s"Test id:$id")
}).flatMap { _ =>
// println("Inserting....")
// val ts = Timestamp.valueOf(LocalDateTime.now())
// val insertAction: DBIO[Option[Int]] = (headlines returning headlines.map(_.id)) +=
// HeadLineRow(None, 100, 100, "tekst", ts, 5, ts, None, None, None, None)
//
// db.run(insertAction.transactionally.map(
// newId => println(s"New id: $newId"))
// )
// }.flatMap { _ =>
println("Inserting....(2)")
val ts = Timestamp.valueOf(LocalDateTime.now())
val insertAction = headlines.map(p => p) += HeadLineRow(None, 1921, 65, "tekst2", ts, 5, ts, None, None, None, None)
db.run(insertAction.transactionally.map(
r => println(s"Insert result: ${r}"))
)
}
Await.ready(res, 30 seconds);
} finally db.close()
}
还有我的表(使用 Slick 的生成器生成,然后稍微调整了一下(auto-inc id,交换了一些属性))
包 com.wanneerwerkik.db.slick
// AUTO-GENERATED Slick data model
/** Stand-alone Slick data model for immediate use */
object Tables extends {
val profile = slick.driver.PostgresDriver
} with Tables
/** Slick data model trait for extension, choice of backend or usage in the cake pattern. (Make sure to initialize this late.) */
trait Tables {
val profile: slick.driver.JdbcProfile
import profile.api._
import slick.model.ForeignKeyAction
import slick.collection.heterogeneous._
import slick.collection.heterogeneous.syntax._
// NOTE: GetResult mappers for plain SQL are only generated for tables where Slick knows how to map the types of all columns.
import slick.jdbc.{GetResult => GR}
/** DDL for all tables. Call .create to execute. */
lazy val schema = Array(headlines.schema).reduceLeft(_ ++ _)
@deprecated("Use .schema instead of .ddl", "3.0")
def ddl = schema
/**
* Entity class storing rows of table 'head_line_bar'
* @param id Database column id SqlType(int4), PrimaryKey
* @param createdBy Database column created_by SqlType(int4), Default(None)
* @param createdOn Database column created_on SqlType(timestamp), Default(None)
* @param updatedBy Database column updated_by SqlType(int4), Default(None)
* @param updatedOn Database column updated_on SqlType(timestamp), Default(None)
* @param companyId Database column company_id SqlType(int4), Default(None)
* @param contentType Database column content_type SqlType(varchar), Length(255,true), Default(None)
* @param fromDate Database column from_date SqlType(timestamp), Default(None)
* @param numberofdays Database column numberofdays SqlType(int4), Default(None)
* @param uptoEndDate Database column upto_end_date SqlType(timestamp), Default(None)
* @param userId Database column user_id SqlType(int4), Default(None)
*/
case class HeadLineRow(
id: Option[Int],
userId: Int,
companyId: Int,
contentType: String,
fromDate: java.sql.Timestamp,
numberofdays: Int,
uptoEndDate: java.sql.Timestamp,
createdBy: Option[Int] = None,
createdOn: Option[java.sql.Timestamp] = None,
updatedBy: Option[Int] = None,
updatedOn: Option[java.sql.Timestamp] = None
)
/** GetResult implicit for fetching HeadLineBarRow objects using plain SQL queries */
implicit def GetResultHeadLineRow(implicit e0: GR[Int], e1: GR[Option[Int]], e2: GR[Option[java.sql.Timestamp]], e3: GR[Option[String]]): GR[HeadLineRow] = GR{
prs => import prs._
HeadLineRow.tupled((<<?[Int], <<[Int], <<[Int], <<[String], <<[java.sql.Timestamp], <<[Int], <<[java.sql.Timestamp], <<?[Int], <<?[java.sql.Timestamp], <<?[Int], <<?[java.sql.Timestamp]))
}
/**
* Table description of table head_line_bar.
* Objects of this class serve as prototypes for rows in queries.
*/
class Headlines(_tableTag: Tag) extends Table[HeadLineRow](_tableTag, "head_line_bar") {
def * = (id, userId, companyId, contentType, fromDate, numberofdays, uptoEndDate, createdBy, createdOn, updatedBy, updatedOn) <> (HeadLineRow.tupled, HeadLineRow.unapply)
/** Maps whole row to an option. Useful for outer joins. */
def ? = (Rep.Some(id), userId, companyId, contentType, fromDate, numberofdays, uptoEndDate, createdBy, createdOn, updatedBy, updatedOn).shaped.<>({r=>import r._; _1.map(_=> HeadLineRow.tupled((_1.get, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported."))
/** Database column id SqlType(int4), PrimaryKey */
val id: Rep[Option[Int]] = column[Option[Int]]("id", O.PrimaryKey, O.AutoInc)
/** Database column user_id SqlType(int4), Default(None) */
val userId: Rep[Int] = column[Int]("user_id")
/** Database column company_id SqlType(int4), Default(None) */
val companyId: Rep[Int] = column[Int]("company_id")
/** Database column content_type SqlType(varchar), Length(255,true), Default(None) */
val contentType: Rep[String] = column[String]("content_type", O.Length(255,varying=true))
/** Database column from_date SqlType(timestamp), Default(None) */
val fromDate: Rep[java.sql.Timestamp] = column[java.sql.Timestamp]("from_date")
/** Database column numberofdays SqlType(int4), Default(None) */
val numberofdays: Rep[Int] = column[Int]("numberofdays")
/** Database column upto_end_date SqlType(timestamp), Default(None) */
val uptoEndDate: Rep[java.sql.Timestamp] = column[java.sql.Timestamp]("upto_end_date")
/** Database column created_by SqlType(int4), Default(None) */
val createdBy: Rep[Option[Int]] = column[Option[Int]]("created_by", O.Default(None))
/** Database column created_on SqlType(timestamp), Default(None) */
val createdOn: Rep[Option[java.sql.Timestamp]] = column[Option[java.sql.Timestamp]]("created_on", O.Default(None))
/** Database column updated_by SqlType(int4), Default(None) */
val updatedBy: Rep[Option[Int]] = column[Option[Int]]("updated_by", O.Default(None))
/** Database column updated_on SqlType(timestamp), Default(None) */
val updatedOn: Rep[Option[java.sql.Timestamp]] = column[Option[java.sql.Timestamp]]("updated_on", O.Default(None))
}
/** Collection-like TableQuery object for table HeadLineBar */
lazy val headlines = new TableQuery(tag => new Headlines(tag))
}
日志输出太大,无法粘贴在这里,所以我把它放在 this gist 中.
按照建议我添加了一个 readLine 来等待结果,但它已经输出了相同的东西。我还在 Future 上添加了一个完成处理程序来打印它的成功或失败。显然它因 RejectedExecutionException 而失败。为什么?
Failure: java.util.concurrent.RejectedExecutionException: Task slick.backend.DatabaseComponent$DatabaseDef$$anon$2@2e4db0df rejected from java.util.concurrent.ThreadPoolExecutor@43760a50[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 1]
最佳答案
这只是一个猜测,但也许您的测试框架对 flatMap
内部产生一个新任务的事实感到困惑,再次需要执行上下文(参见例如 this thread - 它是关于 Scala 的2.10 但我认为这没有改变)。因此,在执行插入之前释放资源。
您是否尝试过在 finally block 中放置一个 println,以查看它是在伴随插入的消息之前还是之后被调用?
您是否尝试过使用 await 同步运行两个 future?在这种情况下,您可能不会遇到此问题。
您可以考虑使用完整的异步支持进行测试,参见例如this link .
关于scala - Slick 3 插入不插入但没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31754315/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!