【发布时间】:2020-03-19 12:05:34
【问题描述】:
我在 Akka 中使用 Slick 来访问 MySQL 数据库。
我想通过调用resultSet.getMetaData获取表格列信息,如下图:
(我尝试使用slick.jdbc.meta.MTable.getTables,但它总是返回一个空向量;如someone else also ran into it.)
implicit val meta2string = GetResult{ row: PositionedResult =>
val md = row.rs.getMetaData() // call rs.getMetaData will cause exception thrown
"debugging"
}
val done = Slick.source(sql"SELECT * FROM trips".as[String](meta2string)).runForeach(println)
问题是,每当我调用rs.getMetaData() 时,都会发生异常:
java.lang.SecurityException: Prohibited package name: java.sql
at java.base/java.lang.ClassLoader.preDefineClass(ClassLoader.java:898)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1014)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:575)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at $line303.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$.$anonfun$meta2string$1(<pastie>:138)
at slick.jdbc.GetResult$$anon$2.apply(GetResult.scala:73)
at slick.jdbc.GetResult$$anon$2.apply(GetResult.scala:73)
at slick.jdbc.SQLActionBuilder$$anon$1$$anon$2.extractValue(StaticQuery.scala:100)
at slick.jdbc.StatementInvoker$$anon$2.extractValue(StatementInvoker.scala:67)
at slick.jdbc.PositionedResultIterator.fetchNext(PositionedResult.scala:176)
at slick.util.ReadAheadIterator.update(ReadAheadIterator.scala:28)
at slick.util.ReadAheadIterator.hasNext(ReadAheadIterator.scala:34)
at slick.util.ReadAheadIterator.hasNext$(ReadAheadIterator.scala:33)
at slick.jdbc.PositionedResultIterator.hasNext(PositionedResult.scala:167)
at slick.jdbc.StreamingInvokerAction.emitStream(StreamingInvokerAction.scala:31)
at slick.jdbc.StreamingInvokerAction.emitStream$(StreamingInvokerAction.scala:26)
at slick.jdbc.SQLActionBuilder$$anon$1.emitStream(StaticQuery.scala:95)
at slick.jdbc.SQLActionBuilder$$anon$1.emitStream(StaticQuery.scala:95)
at slick.basic.BasicBackend$DatabaseDef$$anon$4.run(BasicBackend.scala:342)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
我不确定是否有某事。我的使用有问题,或者 Slick 不支持它?
谁能帮我解决这个问题?
【问题讨论】:
-
这个错误似乎表明它正在尝试在包
java.sql中加载一个类,但是正在加载的东西在Java 引导类路径之外(例如,一个库在包中有它自己的类java.sql),不再允许。