您的位置:首页 > 数据库 > MySQL

使用slick 3.2 codegen 和mysql connector 6自动生成代码

2017-06-20 19:05 281 查看
slick官网上面关于codegen的部分的代码如下:

slick.codegen.SourceCodeGenerator.main(
Array(profile, jdbcDriver, url, outputFolder, pkg, user, password)
)


其中,profile是profile类的全限定名,比如
slick.jdbc.H2Profile
,是和数据库种类相关的;jdbcDriver是jdbc驱动类的全限定名,比如
org.h2.Driver
;url就是jdbc的url,通俗点理解就是你的数据库的地址,比如
jdbc:postgresql://localhost/test
;outputFolder是你想要把生成的代码输出的位置;pkg是生成代码需要放置在哪个scala包里面;user和password就是数据库的账号密码。

然而由于版本升级的原因,slick codegen的代码老是运行出错,我在网上找到的代码出现各种各样的错误,主要有两种,一种是显示Driver找不到:
java.lang.ClassNotFoundException: slick.driver.MySQLDriver$
。这时看一下
slick.driver.driver
里面对应的MySQL的部分:

@deprecated("Use type `slick.jdbc.MySQLProfile` instead of `slick.driver.MySQLDriver`", "3.2")
type MySQLDriver = slick.jdbc.MySQLProfile
@deprecated("Use object `slick.jdbc.MySQLProfile` instead of `slick.driver.MySQLDriver`", "3.2")
val MySQLDriver = slick.jdbc.MySQLProfile


可知需要把
profile
换成
slick.driver.MySQLDriver
,另外由于mysql connector已经从5.x升级到6.x系列,所以
jdbcDriver
需要换成
com.mysql.cj.jdbc.Driver
。之后还出现一个错误是

Exception in thread "main" java.sql.SQLException: Table name pattern can not be NULL or empty.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:545)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:513)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:505)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:479)
at com.mysql.cj.jdbc.DatabaseMetaData.getTables(DatabaseMetaData.java:3836)
at slick.jdbc.meta.MTable$$anonfun$getTables$1.apply(MTable.scala:28)
at slick.jdbc.meta.MTable$$anonfun$getTables$1.apply(MTable.scala:28)
at slick.jdbc.ResultSetInvoker$$anon$4.createResultSet(ResultSetInvoker.scala:36)
at slick.jdbc.ResultSetInvoker.iteratorTo(ResultSetInvoker.scala:19)
at slick.jdbc.Invoker$class.foreach(Invoker.scala:48)
at slick.jdbc.ResultSetInvoker.foreach(ResultSetInvoker.scala:14)
at slick.jdbc.StreamingInvokerAction$class.run(StreamingInvokerAction.scala:22)
at slick.jdbc.ResultSetAction$$anon$1.run(ResultSetInvoker.scala:42)
at slick.jdbc.ResultSetAction$$anon$1.run(ResultSetInvoker.scala:42)
at slick.basic.BasicBackend$DatabaseDef$$anon$2.liftedTree1$1(BasicBackend.scala:240)
at slick.basic.BasicBackend$DatabaseDef$$anon$2.run(BasicBackend.scala:240)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)


这也是由于mysql connector版本升级的原因,mysql connector在5.x版本的时候参数
nullNamePatternMatchesAll
的默认值是
true
,然而到了6.x版本的时候它的值变成了
false
,所以需要在
jdbc url
的字符串里面加上
nullNamePatternMatchesAll=true
。总的代码如下:

object CodeGenenerator extends App {
slick.codegen.SourceCodeGenerator.main(
Array("slick.jdbc.MySQLProfile",
"com.mysql.cj.jdbc.Driver",
"jdbc:mysql://×××.××.×××.×××/×××?nullNamePatternMatchesAll=true",
"××××/app/",
"××××",
"root",
"×××××")
)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  play slick codegen 数据库
相关文章推荐