JDBC快速入门
JDBC 详细入门教程 - 以 MySQL 为例
JDBC(Java Database Connectivity)是 Java 语言用于与数据库交互的标准 API。本教程将指导你如何使用 JDBC 连接到 MySQL 数据库,并执行不同类型的查询。
步骤 1: 添加 JDBC 驱动
首先,需要下载 MySQL 的 JDBC 驱动(通常是一个 .jar
文件),并将其添加到项目的类路径中。
一般需要将jar包的版本对应MySQL服务的版本。
jar包需要去Maven仓库官网下载
下载完成之后导入到lib文件目录下(我的MySQL服务版本是8.0,所以导入8.0版本的jar包驱动)
如果不知道MySQL服务版本的可以直接在windows任务栏搜索mysql server
加到lib文件目录下之后可以直接复制粘贴jar包,然后右键jar包选择添加为库
导入驱动类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.PreparedStatement;
步骤 2: 加载驱动
使用 Class.forName()
方法加载 MySQL 驱动。
Class.forName("com.mysql.cj.jdbc.Driver");
某些低版本的驱动包名为
Class.forName("com.mysql.jdbc.Driver");
步骤 3: 建立连接
使用 DriverManager.getConnection()
方法建立与 MySQL 数据库的连接。
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydb?useSSL=false", "username", "password"
);
这里的url就是JDBC连接mysql服务的地址,可以忽略连接,在localhost:3306之后直接写数据库名,?后面可以配置时区等参数,详情请查询mysql官网
这里的username和password是mysql的账号密码
步骤 4: 创建语句
创建一个 Statement
或 PreparedStatement
对象来执行 SQL 语句。
Statement stmt = conn.createStatement();
步骤 5: 执行查询
有多种方式可以执行查询,具体取决于你的需求。
5.1 使用 Statement 执行简单查询
适用于不包含参数的查询。
ResultSet rs = stmt.executeQuery("SELECT * FROM mytable");
5.2 使用 PreparedStatement 执行带参数的查询
更安全,可以防止 SQL 注入。
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM mytable WHERE column1 = ?");
pstmt.setString(1, "value1");
ResultSet rs = pstmt.executeQuery();
5.3 使用 Statement 执行更新
用于 INSERT、UPDATE 或 DELETE 语句。
int rowsAffected = stmt.executeUpdate("UPDATE mytable SET column1 = 'value1' WHERE column2 = 'value2'");
5.4 使用 PreparedStatement 执行带参数的更新
同样更安全,可以防止 SQL 注入。
PreparedStatement pstmt = conn.prepareStatement("UPDATE mytable SET column1 = ? WHERE column2 = ?");
pstmt.setString(1, "value1");
pstmt.setString(2, "value2");
int rowsAffected = pstmt.executeUpdate();
步骤 6: 处理结果
对于查询,需要遍历 ResultSet
。
while (rs.next()) {
System.out.println(rs.getString("column1") + " " + rs.getInt("column2"));
}
步骤 7: 关闭连接
最后,关闭所有资源。
rs.close();
stmt.close();
pstmt.close();
conn.close();
运行代码前请先打开mysql服务及其对应数据库
完整示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.PreparedStatement;
public class JdbcExample {
public static void main(String[] args) {
try {
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立连接
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydb?useSSL=false", "username", "password"
);
// 创建语句
Statement stmt = conn.createStatement();
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM mytable WHERE column1 = ?");
// 执行查询
ResultSet rs = stmt.executeQuery("SELECT * FROM mytable");
pstmt.setString(1, "value1");
ResultSet rs2 = pstmt.executeQuery();
// 处理结果
while (rs.next()) {
System.out.println(rs.getString("column1") + " " + rs.getInt("column2"));
}
while (rs2.next()) {
System.out.println(rs2.getString("column1") + " " + rs2.getInt("column2"));
}
// 关闭连接
rs.close();
rs2.close();
stmt.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace(); //若SQL执行出错则抛异常
}
}
}
这个示例展示了如何使用 JDBC 连接到 MySQL 数据库,并执行不同类型的查询。记得根据你的数据库配置更改连接字符串、用户名和密码。
附:代码优化(降低耦合性,提高阅读性)
import java.sql.*; // *代表所有
public class JdbcExample {
public static void main(String[] args) throws Exception {
String url =
"jdbc:mysql://localhost:3306/mydb?useSSL=false";
String username = "root";
String password = "123456";
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立连接
Connection conn = DriverManager
.getConnection(url, username, password);
// 创建语句
Statement stmt = conn.createStatement();
String sql1="SELECT * FROM mytable WHERE column1 = ?";
String sql2="SELECT * FROM mytable";
PreparedStatement pstmt = conn.prepareStatement(sql1);
// 执行查询
ResultSet rs = stmt.executeQuery(sql2);
pstmt.setString(1, "value1");
ResultSet rs2 = pstmt.executeQuery();
// 处理结果
while (rs.next()) {
System.out.println(rs.getString("column1") + " " + rs.getInt("column2"));
}
while (rs2.next()) {
System.out.println(rs2.getString("column1") + " " + rs2.getInt("column2"));
}
// 关闭连接,关闭顺序不可乱
rs.close();
rs2.close();
stmt.close();
pstmt.close();
conn.close();
}
}