2016-11-30 10 views
0

MySQL Workbenchを使用して同じクエリを使用すると、正しく動作しているように見え、すべての行(2)が返されます。しかし、私がgroovyを使ってそれをするとき、それは私に第1列だけを与えます。わからないここで間違っています。ここでrs.nextを使用すると最初の行だけが返される

は私のコードです:

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 
    } 
    } 
} 
+0

(ドキュメントhereから)。 –

+0

私は完全なコードを貼り付けました。 – protea

+1

さて、あなたはループ内から値を返します。だからそれは続かない。 'return'は現在のメソッドから即座に存在します。結果をいくつかのデータ構造体(リスト)に格納し、リストを返す必要があります。 –

答えて

1

このコードは、お使いのJavaバージョン

while (rs.next()) { 
     String value = rs.getString(table) 
     return (value) 
    } 

異なるように思えこのコードではなく、一時変数に格納して返すので、すぐに値を返します。あなたはこのように何かを書くことができます:

def result = [] 

    while (rs.next()) { 
     result << rs.getString(table) 
    } 

    return result 

このコードをGroovyに書き直すつもりですが、代わりに​​を使用してみませんか?あなたのようなことを行うことができます

その方法:

List authors = sql.rows('SELECT firstname, lastname FROM Author') 

有効なグルーヴィーではありません

関連する問題