8

我已经连接到一个 MySQL 数据库,它包含四个字段(第一个是 ID,后面的每个都包含 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

6 回答 6

15

干得好 :

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它的更多信息,因为你不必查看数据库tableindex什么column

更新 : rs.next

boolean next() 抛出 SQLException

将光标从其当前位置向前移动一行。ResultSet 游标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。

当调用 next 方法返回 false 时,光标位于最后一行之后。任何需要当前行的 ResultSet 方法调用都将导致抛出 SQLException。如果结果集类型为 TYPE_FORWARD_ONLY,则供应商指定他们的 JDBC 驱动程序实现是返回 false 还是在后续调用 next 时抛出 SQLException。

如果当前行的输入流打开,则调用 next 方法将隐式关闭它。读取新行时会清除 ResultSet 对象的警告链。

返回: 如果新的当前行有效,则返回 true;如果没有更多行,则返回 false 抛出:SQLException - 如果发生数据库访问错误或在关闭的结果集上调用此方法

参考

于 2012-08-20T16:36:02.563 回答
3

这样的事情会做:

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连接 - Class.forName vs Class.forName().newInstance?这显示了您可以如何使用Class.forName("com.mysql.jdbc.Driver")它,因为它不需要自己启动它

参考:

于 2012-08-20T16:21:36.220 回答
1

这应该工作,我想...

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);
 ...
}
于 2012-08-20T16:26:18.060 回答
0

从 MySQL 表中获取数据的简单 Java 方法:

/*
 * 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;
}
于 2013-10-18T16:53:19.280 回答
0

这是我现在所做的:

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.sun.javafx.runtime.VersionInfo;  

public class ConnectToMySql {
public static ConnectBean dataBean = new ConnectBean();

public static void main(String args[]) {
    getData();
    }



public static void getData () {

    try {
        Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mynewpage", 
 "root", "root");
        
 // here mynewpage is database name, root is username and password
    
Statement stmt = con.createStatement();
        System.out.println("stmt  " + stmt);
        ResultSet rs = stmt.executeQuery("select * from carsData");
        System.out.println("rs  " + rs);
        int count = 1;
        while (rs.next()) {
            String vehicleType = rs.getString("VHCL_TYPE");
            System.out.println(count  +": " + vehicleType);
            count++;

        }

        con.close();
    } catch (Exception e) {
        Logger lgr = Logger.getLogger(VersionInfo.class.getName());
        lgr.log(Level.SEVERE, e.getMessage(), e);

        System.out.println(e.getMessage());
    }
    
    
}

}

上面的代码将为您提供您拥有的表格的第一列。

这是您可能需要在 MySQL 数据库中创建的表

CREATE TABLE
carsData
(
    VHCL_TYPE CHARACTER(10) NOT NULL,
);
于 2020-11-25T06:54:17.117 回答
0
  • 首先,下载 MySQL 连接器 jar 文件,这是今天最新的 jar 文件[mysql-connector-java-8.0.21]

  • 将 Jar 文件添加到您的工作区 [构建路径]。

  • 然后从 DriverManager 类创建一个新的 Connection 对象,这样您就可以使用这个 Connection 对象来执行查询。

  • 为您的连接定义数据库名称、用户名和密码。

  • 使用 resultSet 从数据库表中获取基于列名的数据。

示例代码在这里:

public class JdbcMySQLExample{

public static void main(String[] args) {

    String url = "jdbc:mysql://localhost:3306/YOUR_DB_NAME?useSSL=false";
    String user = "root";
    String password = "root";
    
    String query = "SELECT * from YOUR_TABLE_NAME";

    try (Connection con = DriverManager.getConnection(url, user, password);
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery(query)) {

        if (rs.next()) {
            
            System.out.println(rs.getString(1));
        }

    } catch (SQLException ex) {
          System.out.println(ex);
       
    } 
}
于 2020-11-25T07:10:18.957 回答