webentwicklung-frage-antwort-db.com.de

Java - Daten aus der MySQL-Datenbank abrufen

Ich habe eine Verbindung zu einer MySQL-Datenbank hergestellt, die vier Felder enthält (das erste ist eine ID, das letzte enthält Varchar-Zeichenfolgen).

Ich versuche, die letzte Zeile der Datenbank abzurufen und den Inhalt der Felder abzurufen, sodass ich sie auf Variablen (einen int und drei Strings) setzen und sie später verwenden kann.

Bis jetzt habe ich das Nötigste, um die Verbindung herzustellen. Wohin gehe ich von hier? Wie Sie sehen, habe ich versucht, eine SQL-Anweisung zu schreiben, um die letzte Zeile zu erhalten, aber von da an ist alles schiefgegangen, und ich weiß nicht, wie ich sie in die einzelnen Felder aufteilen soll.

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

Bitte schön : 

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();

In rs.getInt oder rs.getString können Sie column_id von 1 aus übergeben, aber ich bevorzuge column_name als informativer, da Sie nicht auf die Datenbank table schauen müssen, für die indexcolumn ist.

UPDATE:rs.next

boolean next () wirft SQLException

Bewegt den Cursor eine Zeile von seiner aktuellen Position aus. EIN ResultSet-Cursor wird anfänglich vor der ersten Zeile positioniert; das erster Aufruf der Methode next macht die erste Zeile zur aktuellen Zeile; das Bei einem zweiten Aufruf wird die zweite Zeile zur aktuellen Zeile und so weiter.

Wenn ein Aufruf der nächsten Methode false zurückgibt, wird der Cursor positioniert nach der letzten reihe. Jeder Aufruf einer ResultSet-Methode, die Wenn eine aktuelle Zeile erforderlich ist, wird eine SQLException ausgelöst. Ob Der Typ der Ergebnismenge ist TYPE_FORWARD_ONLY, es ist der Anbieter angegeben ob ihre JDBC-Treiberimplementierung false zurückgibt oder eine .__ auslöst. SQLException bei einem nachfolgenden Aufruf von next.

Wenn für die aktuelle Zeile ein Eingabestrom geöffnet ist, rufen Sie die Methode .__ auf. next schließt es implizit. Die Warnkette eines ResultSet-Objekts ist wird gelöscht, wenn eine neue Zeile gelesen wird.

Kehrt zurück: wahr, wenn die neue aktuelle Zeile gültig ist; false, wenn keine weiteren Zeilen vorhanden sind Löst: SQLException - Wenn ein Datenbankzugriffsfehler auftritt oder diese Methode für eine geschlossene Ergebnismenge aufgerufen wird

Referenz

13
Harmeet Singh

So etwas würde tun:

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);
        }
    }
}

sie können die Ergebnisse mit einer while wie folgt durchlaufen:

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

Es gibt viele andere großartige Tutorials wie diese, um einige aufzulisten:

Für Ihre Verwendung von Class.forName("com.mysql.jdbc.Driver").newInstance(); siehe JDBC-Verbindung. Class.forName vs Class.forName (). NewInstance? was zeigt, wie Sie einfach Class.forName("com.mysql.jdbc.Driver") verwenden können, da es nicht notwendig ist, es selbst zu initiieren

Verweise:

3
David Kroukamp

Das sollte funktionieren, denke ich ...

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

Einfache Java-Methode zum Abrufen von Daten aus der MySQL-Tabelle:

/*
 * 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