【问题标题】:call ResultSet.getMetaData in Scala results in java.lang.SecurityException在 Scala 中调用 ResultSet.getMetaData 会导致 java.lang.SecurityException
【发布时间】: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),不再允许。

标签: scala jdbc slick


【解决方案1】:

我不太确定这一点,但我怀疑这个问题是由于我在 sbt 控制台中运行代码示例造成的。 我用一个 jar 运行了相同的代码 sn-p,一切都很好。

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2017-04-18
    • 2016-04-11
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多