ScalikeJDBC,原始 SQL 无法映射或 return 有效结果集

ScalikeJDBC, raw SQL failing to map or return a valid result set

我将此 post 发给了 scalikejdbc 用户组,并且还应该跨越 post 到 github 问题。

我在 运行 对 table 进行原始查询的文档示例中看到过,我正在尝试使用以下代码获取 IndexEntry 列表,同时执行查询和 returns 在控制台中的结果,我没有在地图中得到任何东西(rs => ...部分。

相关代码在这里 - 当我在 intellij 的调试器中 运行 时,结果为 "Vector" size = 0。感谢您的指导。我做错了什么,希望这是一个简单的疏忽。

package company.shared.database.models

import company.shared.database.MySQLConnector
import scalikejdbc._

case class IndexEntry(model:String, indexName: String, fieldName: String)

object IndexSchemaModel extends App  with MySQLConnector {
  implicit val session:DBSession = AutoSession

  def indexMap:List[IndexEntry] = {
    val result = DB readOnly { implicit session =>
      sql"""
         SELECT
          substring_index(t.name,'/',-1) as model,
              i.name AS indexName,
              f.name as tableName
       FROM information_schema.innodb_sys_tables t
       JOIN information_schema.innodb_sys_indexes i USING (table_id)
       JOIN information_schema.innodb_sys_fields f USING (index_id)
       where t.name like "MyDB/%"
      """.map(rs => IndexEntry(
              rs.string(0), 
              rs.string(1), 
              rs.string(2))).list().apply()
    }
  println(result) //always List()
  List(IndexEntry("foo", "bar", "az")) //to match the return type
  }

  override def main(args: Array[String]): Unit = {
    configureDB
    indexMap
  }
}

我已经尝试过 scalikejdc 的其他变体 - withSql { queryDSL } 和整个位 SQL 具有完整语法支持的插值。第一个和最后一个始终针对 mysql 服务器执行,其中 returns 57 行(小数据库),中间抛出 NPE,老实说,我很乐意解决中间的第二个问题。我在 .map 中的某处遇到了问题,我试图将其 return 映射到地图上,但结果始终是一个空列表。

谢谢,希望没有语法错误复制到 SO 中。

哦,FWIW,configureDb 只是手动设置一个连接池,因为数据库名称和服务器在 sbt 测试、开发、测试和生产之间可能会有很大差异。目前这不是我的问题,否则我会看到 "ConnectionPool('default') not initialized" 或类似内容。

在这里回答:https://groups.google.com/forum/#!topic/scalikejdbc-users-group/yRjLjuCzuEo

should also cross post to github issues

请避免在 GitHub 个问题上发帖。 https://github.com/scalikejdbc/scalikejdbc/blob/master/CONTRIBUTING.md#issues

抛开一点尴尬。有问题的用户没有进程权限,因此不会从这些表中取回任何行,一旦在 . 上添加了对 user@host 的授予进程,所有这些都有效美好的。 information_schema 中的权限由相关用户有权访问的对象决定。必须显式调出 ROUTINES 等含义项,在本例中为 PROCESS 等。