2016-11-04 5 views
0

現在、XLSファイルから情報を読み取り、データベースに入力する単純なJavaアプリケーションを作成しています。 XLSにはレコードが重複しているので、XLSファイルのエントリがデータベースに既に存在するかどうかを簡単にチェックします。ここに私のコードは次のとおりです。executeQueryを実行するときに結果セットが常に空になる

public static void addResult(ArrayList<ArrayList<String>> listResults) 
{ 
    try 
    { 
     openDatabase(); 
     stmt = c.createStatement(); 

     for (int i = 0; i < listResults.size(); i++) 
     { 
      PreparedStatement stm = c.prepareStatement("SELECT player_name FROM results WHERE player_name=?;"); 
      stm.setString(1, listResults.get(i).get(ReadResultsFile.NAME)); 
      System.out.println(stm); 
      ResultSet rs = stm.executeQuery(); 

      if (rs.getRow() <= 0) 
      { 
       String typeOfPlay = new String(); 

       if (listResults.get(i).get(ReadResultsFile.TYPE).equals("Simple")) 
       { 
        typeOfPlay = "single"; 
       } 
       else if (listResults.get(i).get(ReadResultsFile.TYPE).equals("Double")) 
       { 
        typeOfPlay = "double"; 
       } 

       stm = c.prepareStatement("INSERT INTO results (player_name, school_id, " + typeOfPlay + ", tournament_id) " 
         + "VALUES(?,?,?,?);"); 

       stm.setString(1, listResults.get(i).get(ReadResultsFile.NAME)); 
       stm.setString(2, listResults.get(i).get(ReadResultsFile.SCHOOL_ID)); 
       stm.setInt(3, Integer.parseInt(listResults.get(i).get(ReadResultsFile.SCORE))); 
       stm.setString(4, "1"); 
       stm.executeUpdate(); 
      } 
      else 
      { 
       String typeOfPlay = new String(); 

       if (listResults.get(i).get(ReadResultsFile.TYPE).equals("Simple")) 
       { 
        typeOfPlay = "single"; 
       } 
       else if (listResults.get(i).get(ReadResultsFile.TYPE).equals("Double")) 
       { 
        typeOfPlay = "double"; 
       } 

       stm = c.prepareStatement("UPDATE results SET " + typeOfPlay + "=? WHERE player_name=?;"); 

       stm.setString(1, typeOfPlay); 
       stm.setString(2, listResults.get(i).get(ReadResultsFile.SCORE)); 
       stm.setString(1, listResults.get(i).get(ReadResultsFile.NAME)); 
       System.out.println(stm); 
       stm.executeUpdate(); 
      } 
     } 

     closeDatabase(); 
    } 
    catch (Exception e) 
    { 
     System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
     System.exit(0); 
    } 
} 

生じる問題は、rs.getRow()関数は常に返すことである-1。データベースツールでSELECTクエリを直接実行しようとしましたが、類似するエントリが既に存在する場合は、クエリによってplayer_name列が返されます。残念ながら、Javaで同じことをしています。

私はこの時点で何をすべきか分かりません。

ありがとうございました!

+0

は 'listResults.get(I)に.get(ReadResultsFile.NAME)'持っていないことを確認して使用し、最初の行になります末尾のスペース。実際には私はストリングを掴み、それを印刷します。また関連はないと思うが、SQLの ';'は必要ない。 –

答えて

3

のgetRowはのJavadoc

現在の行番号を取得するごとに動作しません。最初の行は番号1で、2番目の番号は2のように続きます。

ResultSetのカーソルは最初に最初の行の前に配置されています。メソッドの 最初の呼び出しは、次の現在の行が

通常

while (rs.next()) {.... 
+0

ありがとうございました! –

関連する問題