我将此发布到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('默认')未初始化"或类似的。
答案 0 :(得分:0)
在这里回答:jsfiddle
也应该过帖到github问题
请避免在GitHub问题上发布问题。 https://groups.google.com/forum/#!topic/scalikejdbc-users-group/yRjLjuCzuEo
答案 1 :(得分:0)
除了一点尴尬。有问题的用户没有进程权限,因此只要添加。到user @ host的授权进程,就不会从这些表中获取任何行,所有这些都能正常工作。 information_schema中的权限由有问题的用户可以访问的对象驱动。像ROUTINES这样的含义项,在这种情况下,必须明确地调出PROCESS等。