我将此发布到 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”或类似的。