1

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

我在文档示例中看到了对表运行原始查询的示例,我正在尝试使用以下代码获取 IndexEntry 列表,并且在执行查询并在控制台中返回结果时,我没有得到任何回报在地图(rs => ...部分。

相关代码在这里 - 当我在 intellij 的调试器中运行它时,结果为“Vector”大小 = 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 服务器执行,它返回 57 行(小数据库),中间抛出 NPE,老实说,我很高兴解决中间的第二个问题。我在 .map 的某个地方有问题,我试图让它只返回地图,但它总是导致一个空列表。

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

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

4

2 回答 2

0

一边说着有些尴尬。有问题的用户没有进程权限,因此不会从这些表中取回任何行,只要在. 添加到 user@host,这一切都很好。information_schema 中的权限由相关用户有权访问的对象驱动。意味着像 ROUTINES 这样的项目,在这种情况下 PROCESS 等必须被明确地调用。

于 2016-02-12T14:41:44.910 回答
0

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

也应该交叉发布到 github 问题

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

于 2016-02-12T10:36:43.950 回答