ScalikeJDBC,原始SQL无法映射或返回有效的结果集

时间:2016-02-12 01:30:55

标签: scala scalikejdbc

我将此发布到scalikejdbc用户组,并且还应该发布到github问题。

我在对表运行原始查询的docs示例中看到,我试图使用以下代码获取IndexEntry列表,并且在执行查询并在控制台中返回结果时,我没有在地图上找到任何东西(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的其他变种 - 使用SQL {queryDSL}并将整个位作为SQL插值,并提供完整的语法支持。第一个和最后一个总是对mysql服务器执行,它返回57行(小数据库),中间抛出一个NPE,说实话,我很乐意解决中间秒。我在.map中遇到了一个问题,我试图让它只返回地图,但它总是会产生一个空列表。

感谢并希望没有语法错误复制到SO。

哦和FWIW,configureDb只是手动设置连接池,因为数据库名称和服务器在sbt测试,开发,测试和产品之间可能会有很大差异。目前,这不是我的问题,或者我会看到" ConnectionPool('默认')未初始化"或类似的。

2 个答案:

答案 0 :(得分:0)

在这里回答:jsfiddle

  

也应该过帖到github问题

请避免在GitHub问题上发布问题。 https://groups.google.com/forum/#!topic/scalikejdbc-users-group/yRjLjuCzuEo

答案 1 :(得分:0)

除了一点尴尬。有问题的用户没有进程权限,因此只要添加到user @ host的授权进程,就不会从这些表中获取任何行,所有这些都能正常工作。 information_schema中的权限由有问题的用户可以访问的对象驱动。像ROUTINES这样的含义项,在这种情况下,必须明确地调出PROCESS等。