Java-получение данных из базы данных MySQL

я подключился к базе данных MySQL, которая содержит четыре поля (первое из которых является идентификатором, последние содержат строки varchar).

Я пытаюсь получить последнюю строку базы данных и получить содержимое полей, чтобы я мог установить их в переменные (int и три строки) и использовать их позже.

до сих пор у меня есть минимум, чтобы сделать соединение, куда мне идти отсюда? Как вы можете видеть я попытался написать инструкцию SQL чтобы получить последнюю строку, но все пошло не так и я не знаю, как разбить его на отдельные поля.

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

4 ответов


здесь вы идете :

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

на rs.getInt или rs.getString вы можете пройти column_id начиная от 1, но я предпочитаю пройти column_name как его более информативным, как вы не должны смотреть на базу данных table для чего index это column.

обновление : rs.next

boolean next() бросает SQLException

Перемещает курсор на одну строку из текущей позиции. Ля набор результатов курсор изначально располагается перед первой строкой; первый вызов метода next делает первую строку текущей строкой; второй вызов делает вторую строку текущей и так далее.

когда вызов следующего метода возвращает false, курсор располагается после последнего ряда. Любой вызов метода ResultSet, который требуется текущая строка приведет к созданию SQLException. Если тип результирующего набора-TYPE_FORWARD_ONLY, указан поставщик будет ли их реализация драйвера JDBC возвращать false или бросать SQLException при последующем вызове next.

если входной поток открыт для текущей строки, вызов метода next неявно закроет его. Цепочка предупреждений объекта ResultSet очищается при чтении новой строки.

возвращает: true, если новая текущая строка допустима; false, если больше нет строк: Sqlexception - если ошибка доступа к базе данных, или этот метод вызывается на замкнутом результирующем наборе

ссылка


что-то вроде этого:

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

вы можете перебирать результаты с помощью while такой:

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

есть много других больших учебник там, как эти, Чтобы перечислить несколько:

как за использование Class.forName("com.mysql.jdbc.Driver").newInstance(); посмотреть С JDBC связь - класса.forName vs Class.forName().метод newinstance?, который показывает, как вы можете просто использовать Class.forName("com.mysql.jdbc.Driver") как его не нужно инициировать самостоятельно

ссылки:


это должно сработать, я думаю...

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

простой метод Java для получения данных из таблицы 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;
}