web-dev-qa-db-fra.com

Obtenir une valeur à partir d'une instruction SQL select en Java

J'essaie de renvoyer une valeur à partir d'une instruction select. Sa seule valeur car la valeur que je retourne provient de la colonne de clé primaire. 

L'instruction SQL est SELECT itemNo FROM item WHERE itemName = 'astringvalue';

Ma méthode pour obtenir la valeur ressemble à ceci:

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;

    }

J'ai aussi une méthode getConnection().

Voici ce que j'utilise pour appeler le 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);
        }

Le code ci-dessus a été écrit pour une ButtonHandler

Pour le moment, pour la println, je reçois un "com.mysql.jdbc.JDBC4ResultSet@1e72cae". Je ne comprends pas ce qui se passe. 

Ma question est .. que puis-je utiliser là-bas qui peut fonctionner?

Toute aide ou indice quant à ce que je fais mal est très apprécié. 

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

c'est parce que vous retournez l'objet ResultSet ici, value = rs.toString();

De docs ,

Un objet ResultSet est une table de données représentant un résultat de base de données set, qui est généralement généré en exécutant une instruction qui interroge la base de données

Vous accédez aux données d'un objet ResultSet via un curseur. Notez que ce curseur n'est pas un curseur de base de données. Ce curseur est un pointeur qui pointe vers une ligne de données dans le ResultSet. Initialement, le curseur est positionné avant la première rangée. La méthode ResultSet.next déplace le curseur à la ligne suivante. Cette méthode retourne false si le curseur est positionné après la dernière rangée. Cette méthode appelle à plusieurs reprises le ResultSet.next avec une boucle while pour parcourir tous les fichiers données dans le ResultSet.

Vous devriez indiquer au jeu de résultats la valeur de la colonne,

value = rs.getString(1);

par index

value = rs.getString("itemNo");

ou par nom de colonne 

6
San Krish

Utilisez rs.getInt(1) ou rs.getString(1) pour extraire la valeur réelle de la ResultSet. Ensuite, lisez un tutoriel JDBC.

2
Kayaman

changez le en 

if(rs.next())

et

rs.getString("itemNo");

travaux !!!

2
sonal

Changement :

value = rs.toString();

À: 

value = rs.getString(1);

rs.toString renvoie le résultat de la méthode toString de Object ResultSet.rs.getString(1) vous donne le premier paramètre du jeu de résultats sous forme de String.

1
Jens

Vous devez changer

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

à

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

Essaye ça:

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