0

こんにちは、常に SQL 例外を返すように見えるため、このコードに問題があります。数回は機能していましたが、停止し、例外で戻ってきました。何が悪いのかわかりません。以前に vld.close() を別の場所に変更しようとしたことがあります。ありがとう

PreparedStatement vld = conn.prepareStatement("SELECT * FROM carsharing.available(?,?,?,?)");
        vld.setString(1, carName);
        vld.setString(2, memberUser);
        vld.setTimestamp(3, new java.sql.Timestamp(startTime.getTime()));
        vld.setTimestamp(4, new java.sql.Timestamp(endTime.getTime()));
        System.out.println("test1");
        ResultSet rset = vld.executeQuery();
        System.out.println("test2");
        rset.next();
        int num = rset.getInt("num");
        boolean valid = rset.getBoolean("aval");
        vld.close();
        System.out.println(num);
        System.out.println(valid);
4

2 に答える 2

2

1)SQLを確認する

最初にSQLが正しいことを確認できますか?それは私には正しく見えません。ここで実行しようとしているのは、次のSQLです。

SELECT * FROM carsharing.available(?,?,?,?)

結果セットを指定された名前、ユーザー、およびタイムスタンプSQLで制限する場合は、次のようになります。

SELECT * FROM carsharing WHERE carNameField=? AND memberUserField=? AND tsField1=? AND tsField2=?

フィールド名をスキーマの正しい列名に置き換える場所。

2)結果セットのナビゲーション

次に、実行後に結果セットを取得したら、first()を使用して最初の位置に移動できます。また、ブール値が返されるため、利用可能な結果があるかどうかを確認できます。より多くの値をフェッチする場合は、ループが必要です。

//...
ResultSet rset = vld.executeQuery();
if( rset.first()){
   int num = rset.getInt("num");
   boolean valid = rset.getBoolean("aval");   
}
//...
于 2012-05-31T08:53:17.553 に答える
0

結果セットを反復する必要があります。コード rset.next();

ResultSet rset = vld.executeQuery();
System.out.println("test2");
while(rset.next()) {
  int num = rset.getInt("num");
  boolean valid = rset.getBoolean("aval");
  System.out.println(num);
  System.out.println(valid);
}
vld.close();
于 2012-05-31T09:14:59.573 に答える