2016-09-09 342 views
1

jtbs.jdbc.Driverを使用して、プロキシ番号がMySQLデータベースに格納されていることを確認しています。java.sql.SQLException:ResultSetに現在行がありません

問題は、私はテーブルからカーテンの行をコピーして、自分のResultSetに入れしようとするたびに、エラーが there is no current row in the ResultSet

エラーは私がされているライン31 String value = result.getString(i);

であると言うことです答えはウェブ上をすべて見ていますが、私の特定の苦境を助けるものはありません。

UP DATE は、これまでのところ、私はwhile(result.next())を追加し、それが基本的には実行されませwhile(result.next())用量は何も線量ません。

ここに私のコードです!

package dataBata; 


import java.util.ArrayList; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
import javax.swing.JOptionPane; 


public class apples { 

    ArrayList<String> myList = new ArrayList<String>(); 
    String proxNumber = "2435847564"; 
    String usersName = "user"; 
    String password = "pass"; 

    public void wrightMatchdb(){ 
     Connection conn = null; 
     String url = "jdbc:jtds:sqlserver://localhost:1433/model"; 

    try{ 
     Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
     conn = DriverManager.getConnection(url, usersName, password); 
     Statement statement = conn.createStatement(); 
     ResultSet result = statement.executeQuery("select replace(PROXID , ' ','') PROXID ,FIRST_NAME from OKWC_IDCARDS where PROXID = '" + proxNumber + "'"); 
     System.out.println("hello"); 
     while(result.next()){ 
      for(int i=1;i<=6;i++){ 
       System.out.println("hello2"); 
       String value = result.getString(i); 

       if(result.getString(i) != null){ 
        value = value.replace(" ",""); 
        myList.add(value); 
       } 
       String userProx=myList.get(i); 
       String userFName=myList.get(i+1); 
       JOptionPane.showMessageDialog(null, userProx + " has a match for", "hi " + userFName, JOptionPane.DEFAULT_OPTION); 
      } 
      System.out.println("hello3"); 
     }; 
     System.out.println("hello4"); 
     statement.close(); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 
     finally { 
      if (conn != null) try { conn.close(); } catch(Exception e) {} 
     } 
    } 

    public static void main(String[] args){ 
     apples A = new apples(); 
     A.wrightMatchdb(); 
    } 
} 

答えて

3

あなたは現在の位置から前方に1行をカーソルを移動

result.getString(i)

を呼び出す前に result.next()を呼び出す必要があります。 A ResultSetカーソル は最初は最初の行の前に配置されます。 最初にメソッドを呼び出すと、最初の行が現在の行になります。 2番目の呼び出しによって2番目の行が現在の行になります。以下同様です。私の知る限り見ることができるように


、クエリ戻りますので、唯一の2列あなたがresult.getString(i)を呼び出す場合、i12のいずれかであることを確認してくださいそうしないと、例外が発生しますします。

+0

ありがとう月曜日に自分のデータベースにアクセスすると、そのコードに実装されます。 –

+0

私はwhileループで 'result.next()'を試みましたが、それはプログラムがwhileループでコマンドを実行しないようにするだけでした。 (int i = 1; i <= 6; i ++){あなたが3つの列(PROXID、FIRST_NAME)しか持っていないことを知っているので、おそらくあなたが約 –

+0

を取っているのを見ることができます。あなたはmyList.get(i + 1)を呼び出します。まだ追加されていない値を取得する=> IndexOutOfBoundsException –

関連する問題