web-dev-qa-db-ja.com

JavaのSQL selectステートメントから1つの値を取得する

Selectステートメントから値を返そうとしています。私が返す値は主キー列からのものなので、その唯一の値です。

SQLステートメントは_SELECT itemNo FROM item WHERE itemName = 'astringvalue';_です。

値を取得するための私のメソッドは次のようになります。

_private String viewValue(Connection con, String command) throws SQLException 
    {
        String value = null;
        Statement stmt = null;

        try 
        {
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(command);

            while (rs.next())
                value = rs.toString();
        } 

        catch (SQLException e ) 
        {
            e.printStackTrace();
        } 

        finally
        {
            if (stmt != 
            null) { stmt.close(); }
        }

        return value;

    }
_

私もgetConnection()メソッドを持っています。

ここでは、imがviewValuemethodを呼び出すために使用しているものを示します。

_if((action.getSource() == btnSave) ||(action.getSource() == btnSavePrint) )
        {
            String findItemNoCommand = "SELECT itemNo FROM `item` WHERE itemName = '" + itemList.getSelectedItem() + "'";

            try 
            {
                itemNo = viewValue(conn, findItemNoCommand);
            }
            catch (SQLException e) 
            {
                e.printStackTrace();
            }

            System.out.println(itemNo);
        }
_

上記のコードはButtonHandler用に作成されました

現在、printlnの場合、「_com.mysql.jdbc.JDBC4ResultSet@1e72cae_」を取得しています..どうしてかわかりませんが、ここでは、ResultSetが間違った選択であると想定しています。

私の質問は..機能するものは何ですか?

私が間違っていることについての助けや手がかりは大歓迎です。

5
Tsar
_Right now, for the println I'm getting a "com.mysql.jdbc.JDBC4ResultSet@1e72cae"
_

ここでResultSetオブジェクトを返すため、value = rs.toString();

docs から、

ResultSetオブジェクトは、データベースの結果セットを表すデータのテーブルであり、通常、データベースにクエリを実行するステートメントを実行することによって生成されます

カーソルを介してResultSetオブジェクトのデータにアクセスします。このカーソルはデータベースカーソルではないことに注意してください。このカーソルは、ResultSetのデータの1行を指すポインターです。最初、カーソルは最初の行の前に配置されています。メソッドResultSet.nextは、カーソルを次の行に移動します。カーソルが最後の行の後にある場合、このメソッドはfalseを返します。このメソッドは、whileループでResultSet.nextメソッドを繰り返し呼び出し、ResultSet内のすべてのデータを反復処理します。

列から値を取得するように結果セットに指示する必要があります。

_value = rs.getString(1);
_

インデックスを介して

_value = rs.getString("itemNo");
_

または列名を介して

6
San Krish

ResultSetから実際の値を取得するには、rs.getInt(1)またはrs.getString(1)を使用します。次に、JDBCチュートリアルを読みます。

2
Kayaman

に変更

if(rs.next())

そして

rs.getString("itemNo");

動く!!!

2
sonal

変化する :

_value = rs.toString();
_

に:

_value = rs.getString(1);
_

rs.toStringは、オブジェクトtoStringResultSetメソッドの結果を返します。 rs.getString(1)は、結果セットの最初のパラメーターをStringとして提供します。

1
Jens

変える必要がある

while (rs.next())
    value = rs.toString();

 while (rs.next())
    value = rs.getString("itemNo");
1
Prabhakaran

これを試して:

private String viewValue(Connection con, String command) throws SQLException 
{
    String value = null;
    Statement stmt = null;

    try 
    {
        stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery(command);

        while (rs.next())
            value = rs.getString(1);
    } 

    catch (SQLException e ) 
    {
        e.printStackTrace();
    } 

    finally
    {
        if (stmt != 
        null) { stmt.close(); }
    }

    return value;

}
0
AsSiDe