将 mysql 记录集中的多列转换为数组
Converting multiple columns from mysql recordset into Array
在 Scala 2.12 中,我尝试将 MySQL 查询中的两列转换为两个数组,然后将这两个数组组合成一个数组,如下所示
val url = "jdbc:mysql://00.0.0.00:3306/dataanalysis"
val driver = "com.mysql.jdbc.Driver"
val username = "xxxx"
val password = "yyyy"
var connection:Connection = _
Class.forName(driver)
connection = DriverManager.getConnection(url, username, password)
val statement = connection.createStatement
val rs1 = statement.executeQuery("" +
"select BBK,date_format(min(date(AAA)),'%Y%m%d') as AAA from OPER_MEMB_AAAD " +
"where AAF between '2020/07/01' and '2020/07/31' " +
"group by BBK order by BBK")
val strBBKArray=new Iterator[String] {
def hasNext = rs1.next()
def next() = rs1.getString(1)
}.toArray
val strAAAArray=new Iterator[String] {
def hasNext = rs1.next()
def next() = rs1.getString(2)
}.toArray
val strRs1Array=数组(strBBKArray,strAAAArray)
它适用于 BBK 列,但不适用于 AAA。
val strBBKArray: Array[String] = Array(1211212,2324324...
val strAAAArray: Array[String] = Array()
当我在 strBBKArray 之前用元素填充 strAAAArray 时,列 AAA 被转换为数组但没有 BBK。我的猜测是迭代器到达第一列的 rs1 的底部,当我想再次迭代时它没有找到更多记录。如何让迭代器回到 rs1 的第一行,或者有更好的方法将多列记录集转换为一个数组?
也许我在这里完全糊涂了。但是你知道当你执行 next() 时你实际上是在从迭代器中删除元素吗?如果您想对其进行两次迭代......也许您可以尝试在对其进行迭代之前创建它的副本。然后迭代第二个?或者你可以使用 next()
之外的其他迭代
val rs1 = statement.executeQuery("" +
"select BBK,date_format(min(date(AAA)),'%Y%m%d') as AAA from OPER_MEMB_AAAD " +
"where AAF between '2020/07/01' and '2020/07/31' " +
"group by BBK order by BBK")
val rs2 = rs1.clone
val strBBKArray=new Iterator[String] {
def hasNext = rs1.next()
def next() = rs1.getString(1)
}.toArray
val strAAAArray=new Iterator[String] {
def hasNext = rs2.next()
def next() = rs2.getString(2)
}.toArray
您可以在 Scala 文档中阅读更多关于 Scala 中迭代器如何工作的信息,尤其是 next():docs.scala-lang.org/overviews/collections/iterators.html
否则,我个人会使用 map 或“toArray”(如果存在)。我不知道 mysql 记录集有什么用处。检查您拥有的库和方法:)
最后我是这样搞的。尽管它比我预期的要复杂,但它确实有效。如果有人有更好的解决方案。随意post它,我会在测试后勾选你的答案。
val rs1 = statement.executeQuery("" +
"select BBK,AAA from OPER_MEMB_AAAD order by BBK")
while (rs1.next()){
strBBKArrayRs1+=rs1.getString(1)
strAAAArrayRs1+=rs1.getString(2)
}
val rs2 = statement.executeQuery("" +
"select BBK,AAB from MIDD_MEMB_AAAJ order by BBK")
while (rs2.next()){
strBBKArrayRs2+=rs2.getString(1)
strAAAArrayRs2+=rs2.getString(2)
}
val strRs1Array=ArrayBuffer(strBBKArrayRs1,strAAAArrayRs1)
val strRs2Array=ArrayBuffer(strBBKArrayRs2,strAAAArrayRs2)
在 Scala 2.12 中,我尝试将 MySQL 查询中的两列转换为两个数组,然后将这两个数组组合成一个数组,如下所示
val url = "jdbc:mysql://00.0.0.00:3306/dataanalysis"
val driver = "com.mysql.jdbc.Driver"
val username = "xxxx"
val password = "yyyy"
var connection:Connection = _
Class.forName(driver)
connection = DriverManager.getConnection(url, username, password)
val statement = connection.createStatement
val rs1 = statement.executeQuery("" +
"select BBK,date_format(min(date(AAA)),'%Y%m%d') as AAA from OPER_MEMB_AAAD " +
"where AAF between '2020/07/01' and '2020/07/31' " +
"group by BBK order by BBK")
val strBBKArray=new Iterator[String] {
def hasNext = rs1.next()
def next() = rs1.getString(1)
}.toArray
val strAAAArray=new Iterator[String] {
def hasNext = rs1.next()
def next() = rs1.getString(2)
}.toArray
val strRs1Array=数组(strBBKArray,strAAAArray)
它适用于 BBK 列,但不适用于 AAA。
val strBBKArray: Array[String] = Array(1211212,2324324...
val strAAAArray: Array[String] = Array()
当我在 strBBKArray 之前用元素填充 strAAAArray 时,列 AAA 被转换为数组但没有 BBK。我的猜测是迭代器到达第一列的 rs1 的底部,当我想再次迭代时它没有找到更多记录。如何让迭代器回到 rs1 的第一行,或者有更好的方法将多列记录集转换为一个数组?
也许我在这里完全糊涂了。但是你知道当你执行 next() 时你实际上是在从迭代器中删除元素吗?如果您想对其进行两次迭代......也许您可以尝试在对其进行迭代之前创建它的副本。然后迭代第二个?或者你可以使用 next()
之外的其他迭代 val rs1 = statement.executeQuery("" +
"select BBK,date_format(min(date(AAA)),'%Y%m%d') as AAA from OPER_MEMB_AAAD " +
"where AAF between '2020/07/01' and '2020/07/31' " +
"group by BBK order by BBK")
val rs2 = rs1.clone
val strBBKArray=new Iterator[String] {
def hasNext = rs1.next()
def next() = rs1.getString(1)
}.toArray
val strAAAArray=new Iterator[String] {
def hasNext = rs2.next()
def next() = rs2.getString(2)
}.toArray
您可以在 Scala 文档中阅读更多关于 Scala 中迭代器如何工作的信息,尤其是 next():docs.scala-lang.org/overviews/collections/iterators.html
否则,我个人会使用 map 或“toArray”(如果存在)。我不知道 mysql 记录集有什么用处。检查您拥有的库和方法:)
最后我是这样搞的。尽管它比我预期的要复杂,但它确实有效。如果有人有更好的解决方案。随意post它,我会在测试后勾选你的答案。
val rs1 = statement.executeQuery("" +
"select BBK,AAA from OPER_MEMB_AAAD order by BBK")
while (rs1.next()){
strBBKArrayRs1+=rs1.getString(1)
strAAAArrayRs1+=rs1.getString(2)
}
val rs2 = statement.executeQuery("" +
"select BBK,AAB from MIDD_MEMB_AAAJ order by BBK")
while (rs2.next()){
strBBKArrayRs2+=rs2.getString(1)
strAAAArrayRs2+=rs2.getString(2)
}
val strRs1Array=ArrayBuffer(strBBKArrayRs1,strAAAArrayRs1)
val strRs2Array=ArrayBuffer(strBBKArrayRs2,strAAAArrayRs2)