web-dev-qa-db-fra.com

Java - Obtenir des données de la base de données MySQL

Je me suis connecté à une base de données MySQL, qui contient quatre champs (le premier étant un ID, les derniers contenant chacun des chaînes de type varchar).

J'essaie d'obtenir la dernière ligne de la base de données et de récupérer le contenu des champs afin de pouvoir les définir avec des variables (un entier et trois chaînes) et de les utiliser plus tard.

Jusqu'à présent, j'ai le strict minimum pour établir la connexion, où dois-je aller à partir de maintenant? Comme vous pouvez le constater, j'ai essayé d'écrire une instruction SQL pour obtenir la dernière ligne, mais tout a mal tourné à partir de là et je ne sais pas comment la scinder dans des champs distincts.

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/t", "", "");

Statement st = con.createStatement();
String sql = ("SELECT * FROM posts ORDER BY id DESC LIMIT 1;");
st.getResultSet().getRow();
con.close();
8
mino

Voici : 

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/t", "", "");

Statement st = con.createStatement();
String sql = ("SELECT * FROM posts ORDER BY id DESC LIMIT 1;");
ResultSet rs = st.executeQuery(sql);
if(rs.next()) { 
 int id = rs.getInt("first_column_name"); 
 String str1 = rs.getString("second_column_name");
}

con.close();

Dans rs.getInt ou rs.getString, vous pouvez passer column_id à partir de 1, mais je préfère que column_name soit plus informatif car vous n'avez pas à consulter la base de données table pour laquelle index est ce que column.

UPDATE:rs.next

boolean next () jette SQLException

Déplace le curseur d'une ligne vers le bas de sa position actuelle. UNE Le curseur ResultSet est initialement placé avant la première ligne; la premier appel à la méthode next fait de la première ligne la ligne actuelle; la le deuxième appel fait de la deuxième ligne la ligne actuelle, et ainsi de suite.

Lorsqu'un appel à la méthode suivante renvoie false, le curseur est positionné après la dernière rangée. Toute invocation d'une méthode ResultSet qui nécessite une ligne en cours, une exception SQLException sera levée. Si le type de jeu de résultats est TYPE_FORWARD_ONLY, il est spécifié par le fournisseur si leur implémentation de pilote JDBC retournera false ou lancera un SQLException lors d'un prochain appel à next.

Si un flux d'entrée est ouvert pour la ligne en cours, appelez la méthode next le fermera implicitement. La chaîne d'avertissement d'un objet ResultSet est effacé quand une nouvelle ligne est lue.

Résultats: true si la nouvelle ligne en cours est valide; false s'il n'y a plus de lignes Throws: SQLException - si une erreur d'accès à la base de données se produit ou si cette méthode est appelée sur un jeu de résultats fermé

référence

13
Harmeet Singh

Quelque chose comme ça ferait:

public static void main(String[] args) {

    Connection con = null;
    Statement st = null;
    ResultSet rs = null;

    String url = "jdbc:mysql://localhost/t";
    String user = "";
    String password = "";

    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection(url, user, password);
        st = con.createStatement();
        rs = st.executeQuery("SELECT * FROM posts ORDER BY id DESC LIMIT 1;");

        if (rs.next()) {//get first result
            System.out.println(rs.getString(1));//coloumn 1
        }

    } catch (SQLException ex) {
        Logger lgr = Logger.getLogger(Version.class.getName());
        lgr.log(Level.SEVERE, ex.getMessage(), ex);

    } finally {
        try {
            if (rs != null) {
                rs.close();
            }
            if (st != null) {
                st.close();
            }
            if (con != null) {
                con.close();
            }

        } catch (SQLException ex) {
            Logger lgr = Logger.getLogger(Version.class.getName());
            lgr.log(Level.WARNING, ex.getMessage(), ex);
        }
    }
}

vous pouvez parcourir les résultats avec une while comme ceci:

while(rs.next())
{
System.out.println(rs.getString("Colomn_Name"));//or getString(1) for coloumn 1 etc
}

Il existe de nombreux autres didacticiels de ce type, dont voici quelques exemples:

En ce qui concerne votre utilisation de Class.forName("com.mysql.jdbc.Driver").newInstance();, voir Connexion JDBC - Class.forName vs Class.forName (). NewInstance? qui montre comment vous pouvez simplement utiliser Class.forName("com.mysql.jdbc.Driver") car il n'est pas nécessaire de l'initialiser vous-même

Références:

3
David Kroukamp

Cela devrait marcher, je pense ...

ResultSet results = st.executeQuery(sql);

if(results.next()) { //there is a row
 int id = results.getInt(1); //ID if its 1st column
 String str1 = results.getString(2);
 ...
}
1
nullpotent

Méthode Java simple pour obtenir des données de la table MySQL:

/*
 * CREDIT : WWW.CODENIRVANA.IN
*/

String Data(String query){
    String get=null;
    try{

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = (Connection)DriverManager.getConnection
("jdbc:mysql://localhost:3306/mysql","root","password");
Statement stmt = (Statement) con.createStatement();
ResultSet rs=stmt.executeQuery(query);
if (rs.next())
       {
get = rs.getString("");
        }

}
catch(Exception e){
JOptionPane.showMessageDialog (this, e.getMessage());
}
    return get;
}
0
Simran Sharma