0

新しく入力したデータがすでにテーブルにあるかどうかを確認したい

コード:

txtNo   = new JTextField();
{
    try {
        Class.forName("com.mysql.jdbc.Driver");
        String srcurl1      = "jdbc:mysql://localhost:3306/DB_name"; 
        Connection con      = DriverManager.getConnection(srcurl1,"root","paswrd");
        Statement stmt1     = con.createStatement();
        ResultSet rs1       = stmt1.executeQuery("select No from bank where No='"+txtNo.getText()+"' ");

        int ch =rs1.getInt("No");
        int ch4= Integer.parseInt(txtNo.getText());

        if(ch==ch4)    // input 58 == 58
         System.out.println("already exits");
    }
    catch(Exception e)
    {
        System.out.println("Exception:"+e);
    }
}

エラー : Exception:java.sql.SQLException: Illegal operation on empty result set.

4

6 に答える 6

0

AResultSetは、最初の行の前に最初に配置されます。したがって、メソッドの 1 つを呼び出す前に、呼び出しnext()て次の行に移動する (そして、それが を返すことを確認する) 必要があります。truegetXXX()

于 2012-09-19T12:00:51.480 に答える
0

ResultSet最初にチェックして、行が含まれていることを確認する必要があります。

if (rs1.next()) {
   int ch =rs1.getInt("No");
   ...
}
于 2012-09-16T14:34:54.187 に答える
0

select ステートメントが空のセットを返すと、この例外が発生します。データがまだテーブルにないという知識に基づいて動作する try/catch ブロックを catch ブロックに追加します。

于 2012-09-16T14:35:27.570 に答える
0

結果セットに要素があるかどうかを確認する必要があります。

while(rs1.next())
{
    int ch = rs1.getInt("No");
    // ...
}
于 2012-09-16T14:35:35.550 に答える
0

特定のレコードがデータベースに存在するかどうかを確認する最も簡単な方法は、次のとおりです。

Select 1 from bank where No = [your_supplied_value]

このクエリは、提供されたデータを含む行がデータベース内に見つかった場合、または空の結果セットを返した場合に 1 を返します。したがって、確認する必要があるのは、結果セットに ANY 値が返されるかどうか、または空であるかどうかだけです。

開始するためのサンプル コードを次に示します。

txtNo   = new JTextField();
{
    try {
        String compareText = txtNo.getText().trim();

        if(compareText.length() > 0){
            Class.forName("com.mysql.jdbc.Driver");
            String srcurl1      = "jdbc:mysql://localhost:3306/DB_name"; 
            Connection con      = DriverManager.getConnection(srcurl1,"root","paswrd");
            Statement stmt1     = con.createStatement();
            ResultSet rs1       = stmt1.executeQuery("select 1 from bank where No='"+txtNo.getText()+"' ");

            boolean isPresent = rs1.next();

            if(isPresent){
                System.out.println("Already exists!!");
            }
        }
    }
    catch(Exception e)
    {
        System.out.println("Exception:"+e);
    }
}

いくつかの問題があるため、これが最終的なコードではないことを願っています。

  • リソースを適切に管理していません。データベースへのクエリが完了したら、結果セット、ステートメント、および接続オブジェクトを閉じることを検討する必要があります。

  • JTextField のテキストが空かどうかを確認したことに注意してください。これは、テキスト フィールドに値が含まれていないことがわかっている場合に、データベースへの呼び出しを防ぐ良い方法です。

  • データベースへのクエリには、 Statement ではなく PreparedStatement を使用することをお勧めします。

于 2012-09-16T15:46:14.663 に答える