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 等。
我将此 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 等。