在本教程中,我们将向您展示如何使用 JDBC Statement 和 ResultSet 对象从 MySQL 查询数据。
要从 MySQL 查询数据,首先需要使用 Connection 对象建立与 MySQL 的连接。
Connection conn = DriverManager.getConnection(url,username,password);
Code language: Java (java)
我们开发了一个名为 MySQLJDBCUtil 的实用程序类,它使用存储在属性文件中的数据库参数打开一个新连接。
Connection conn = MySQLJDBCUtil.getConnection()
Code language: Java (java)
打开连接后,需要创建一个Statement对象。 JDBC 提供了几种语句,例如Statement、PreparedStatement 和CallableStatement。要查询数据,只需使用Statement对象即可,如下所示:
Statement stmt = conn.createStatement();
Code language: Java (java)
创建 Statement 对象后,您可以使用它来执行任何有效的 MySQL 查询,如下所示:
String sql = "SELECT first_name, last_name, email " +
"FROM candidates";
ResultSet rs = stmt.executeQuery(sql)
Code language: SQL (Structured Query Language) (sql)
我们调用了Statement对象的executeQuery()
方法。此方法返回一个 ResultSet 对象,其中包含 SQL 查询的结果。结果采用基于SELECT 语句的行和数据列的形式。
ResultSet 对象为您提供了遍历结果和读取数据的方法。如果有可用行,则next()
方法返回 true 并移至 ResultSet 中的下一行,否则返回 false。在读取数据之前必须至少调用一次next()
方法,因为在第一次next()
调用之前,ResultSet 位于第一行之前。
要获取当前行的列数据,可以使用getDataType()
方法,其中 DataType 是列的数据类型,例如 int、string、double 等,您需要将列名称或列索引传递给 getDataType()方法,例如:
String s = rs.getString("column_name");
int id = rs.getInt(1);
Code language: Java (java)
要从候选结果集中获取数据,请执行以下操作:
while (rs.next()) {
System.out.println(rs.getString("first_name") + "\t" +
rs.getString("last_name") + "\t" +
rs.getString("email"));
}
Code language: Java (java)
当您完成数据遍历时,应始终通过调用close()
方法关闭 ResultSet 和 Statement 对象。
try{
rs.close();
stmt.close();
} catch(SQLException e) {
System.out.println(e.getMessage());
}
Code language: Java (java)
如果您使用 try-with-resource 语句,则会自动调用close()
方法,因此您无需显式执行此操作。以下是从示例数据库的candidates
表中查询数据的完整示例。
package org.mysqltutorial;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* @author mysqltutorial.org
*/
public class Main {
public static void main(String[] args) {
//
String sql = "SELECT first_name, last_name, email " +
"FROM candidates";
try (Connection conn = MySQLJDBCUtil.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
// loop through the result set
while (rs.next()) {
System.out.println(rs.getString("first_name") + "\t" +
rs.getString("last_name") + "\t" +
rs.getString("email"));
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
}
Code language: Java (java)
程序的输出如下:
在本教程中,我们向您展示了如何使用 JDBC 和简单的 SQL 语句从 MySQL 查询数据。