当我使用 rs.next 时只返回第一行
Returning only first row when I use rs.next
当我使用 MySQL Workbench 使用相同的查询时,它似乎工作正常并且 returns 所有行(即 2)。但是当我使用 groovy 时,它只给我第一行。不确定我在这里做错了什么。
这是我的代码:
context.setProperty("Database", new Database());
import groovy.sql.Sql
import java.sql.*
import com.jcraft.jsch.JSch
import com.jcraft.jsch.Session
class Database{
def queryDatabase(sqlQuery, table)
{
// ssh login
String sshHost = 'test'
String sshUser = 'test'
String sshPass = 'test'
int sshPort = 22
// database login
String targetHost = 'localhost'
String targetUser = 'test'
String targetPass = 'test'
int targetPort = 3306
int lport = 4322
JSch jsch = new JSch();
Session session = jsch.getSession(sshUser, sshHost, sshPort);
session.setPassword(sshPass);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
try {
session.connect();
int assinged_port=session.setPortForwardingL(lport, targetHost, targetPort);
Connection con = null;
String driver = "org.mariadb.jdbc.Driver";
String connectionString = "jdbc:mariadb://" + targetHost +":" + lport + "/";
con = DriverManager.getConnection(connectionString, targetUser, targetPass);
Statement st = con.createStatement();
java.sql.ResultSet rs = st.executeQuery(sqlQuery);
while (rs.next()) {
String value = rs.getString(table);
return (value)
}
}finally{
session.disconnect()
null
}
}
}
此代码似乎与您的 Java 版本不同
while (rs.next()) {
String value = rs.getString(table)
return (value)
}
此代码立即 returns 值,而不是将其存储在临时变量中并返回整个列表,因此您可以这样写:
def result = []
while (rs.next()) {
result << rs.getString(table)
}
return result
但是,如果您要将此代码重写为 Groovy,为什么不改用 groovy.sql.Sql?
这样你就可以做如下事情:
List authors = sql.rows('SELECT firstname, lastname FROM Author')
(来自文档 here)
当我使用 MySQL Workbench 使用相同的查询时,它似乎工作正常并且 returns 所有行(即 2)。但是当我使用 groovy 时,它只给我第一行。不确定我在这里做错了什么。
这是我的代码:
context.setProperty("Database", new Database());
import groovy.sql.Sql
import java.sql.*
import com.jcraft.jsch.JSch
import com.jcraft.jsch.Session
class Database{
def queryDatabase(sqlQuery, table)
{
// ssh login
String sshHost = 'test'
String sshUser = 'test'
String sshPass = 'test'
int sshPort = 22
// database login
String targetHost = 'localhost'
String targetUser = 'test'
String targetPass = 'test'
int targetPort = 3306
int lport = 4322
JSch jsch = new JSch();
Session session = jsch.getSession(sshUser, sshHost, sshPort);
session.setPassword(sshPass);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
try {
session.connect();
int assinged_port=session.setPortForwardingL(lport, targetHost, targetPort);
Connection con = null;
String driver = "org.mariadb.jdbc.Driver";
String connectionString = "jdbc:mariadb://" + targetHost +":" + lport + "/";
con = DriverManager.getConnection(connectionString, targetUser, targetPass);
Statement st = con.createStatement();
java.sql.ResultSet rs = st.executeQuery(sqlQuery);
while (rs.next()) {
String value = rs.getString(table);
return (value)
}
}finally{
session.disconnect()
null
}
}
}
此代码似乎与您的 Java 版本不同
while (rs.next()) {
String value = rs.getString(table)
return (value)
}
此代码立即 returns 值,而不是将其存储在临时变量中并返回整个列表,因此您可以这样写:
def result = []
while (rs.next()) {
result << rs.getString(table)
}
return result
但是,如果您要将此代码重写为 Groovy,为什么不改用 groovy.sql.Sql?
这样你就可以做如下事情:
List authors = sql.rows('SELECT firstname, lastname FROM Author')
(来自文档 here)