2017-11-13 8 views
0

私はこの1つの簡単なヘルプが必要です!Selectステートメントは0行を返します:不可

public boolean memberExists(int id) { 
    try { 
     open(); 
     PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM client WHERE id = ?"); 
     pstmt.setInt(1,id); 
     boolean _res = pstmt.executeQuery().getRow() > 0; 
     close(); 
     return _res; 
    } 
    catch (SQLException e){ System.out.print(e); } 
     return false; 
    } 
} 

新しい接続を取得しopen()方法とclose()方法は、接続を閉じます。

私はメンバーがこのコードのデータベースに存在するかどうかを確認しようとしています。かなり簡単。

ナットを駆動するものは、常に0行を返すということです。クエリSELECT * FROM clientでも0行が返されます。

私は自分のデータベースとまったく同じクエリを検査するsqlitebrowser.exeを使用した行の右の数を返します。


私はすでにこの問題に遭遇していたと思いますが、正確に何かを覚えていません。私は何かが欠けているように感じる。


また、私のコードでは、私はデータベースにINSERTはなく、を選択することができます。これは本当に奇妙です。


open()方法。 ResultSet.getRow()から

public DBConnector open() { 
    boolean _exists = new File(path).exists(); 
    try { 
     conn = DriverManager.getConnection("jdbc:sqlite:" + path); 
     if (!_exists) create(); 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } 
    return this; 
} 
+0

問題は、あなたが 'のgetRow()'あなたはそれがないと思うよりも、他の何かをしている呼んでいるということです。 'pstmt.executeQuery()。getRow()> 0'の代わりに' pstmt.executeQuery()。next() 'を使います。' next() 'は行がない場合に' false'を返します。 – Jesper

+0

最近読んだドキュメントは過大評価されています。 – Kayaman

+0

コメントありがとうございました!とても有難い!このフォーラムにはあなたのような人がもっと必要です! – Bird

答えて

1

戻り:現在の行番号。現在の行がない場合は0

これは結果セットの行数ではなく、現在の行番号です。

あなたは、行数を取得するには、いくつかの方法があり、以下を参照してください。

How do I get the size of a java.sql.ResultSet ?

+1

ありがとう!私はこのメソッドを(同じファイル内の)いくつかのコードで 'someCodeRelatedToARequest.getRow()'を見て、私は同じ戦略のために行った!もう一度ありがとう:) – Bird

+0

@鳥は[貨物カルトプログラミング](https://en.wikipedia.org/wiki/Cargo_cult_programming)として知られています – Kayaman

+0

@カヤマン私は誰もが(あなたを含む)ハハのコーディングを開始すると思います。リンクありがとう。私はそれが名前を持っていたのか分からなかった。 – Bird

関連する問題