Java学习教程,从入门到精通,JDBC数据库连接语法知识点及案例代码(92)
JDBC数据库连接语法知识点及案例代码
一、JDBC概述
JDBC(Java Database Connectivity)是Java语言中用于执行SQL语句的API,它为多种关系数据库提供统一访问接口,允许Java程序连接数据库,执行SQL语句,处理查询结果等。
二、JDBC连接数据库步骤
- 加载数据库驱动
- 通过
Class.forName()
方法加载数据库驱动类,使JDBC驱动程序注册到DriverManager中。 - 不同数据库的驱动类不同,例如MySQL的驱动类为
com.mysql.cj.jdbc.Driver
。
- 通过
- 建立数据库连接
- 使用
DriverManager.getConnection()
方法建立与数据库的连接。 - 需要提供数据库的URL、用户名和密码。
- 数据库URL格式通常为
jdbc:数据库类型://主机名:端口/数据库名
,例如MySQL的URL为jdbc:mysql://localhost:3306/数据库名
。
- 使用
- 创建
Statement
对象- 通过连接对象
Connection
的createStatement()
方法创建Statement
对象,用于执行SQL语句。
- 通过连接对象
- 执行SQL语句
- 使用
Statement
对象的executeQuery()
方法执行查询SQL语句,返回ResultSet
对象。 - 使用
executeUpdate()
方法执行增删改SQL语句,返回受影响的行数。
- 使用
- 处理结果(对于查询操作)
- 通过
ResultSet
对象遍历查询结果,获取数据。
- 通过
- 关闭连接
- 关闭
ResultSet
、Statement
和Connection
对象,释放数据库资源。
- 关闭
三、案例代码 - 查询数据库中的数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
// 数据库URL、用户名和密码
String url = "jdbc:mysql://localhost:3306/testdb";
String username = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1. 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立数据库连接
conn = DriverManager.getConnection(url, username, password);
// 3. 创建Statement对象
stmt = conn.createStatement();
// 4. 执行SQL语句
String sql = "SELECT * FROM users";
rs = stmt.executeQuery(sql);
// 5. 处理结果
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 6. 关闭连接
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
四、案例代码 - 向数据库中插入数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JdbcInsertExample {
public static void main(String[] args) {
// 数据库URL、用户名和密码
String url = "jdbc:mysql://localhost:3306/testdb";
String username = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
try {
// 1. 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立数据库连接
conn = DriverManager.getConnection(url, username, password);
// 3. 创建Statement对象
stmt = conn.createStatement();
// 4. 执行SQL语句
String sql = "INSERT INTO users(name, age) VALUES('Tom', 25)";
int rowsAffected = stmt.executeUpdate(sql);
// 判断插入是否成功
if (rowsAffected > 0) {
System.out.println("插入成功");
} else {
System.out.println("插入失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5. 关闭连接
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
以上代码中的数据库名称、表结构等需要根据实际情况进行调整。在运行代码前,确保数据库已正确安装并运行,且数据库驱动已添加到项目依赖中。
以下是一些更具体的JDBC操作数据库的案例,包括查询、插入、更新和删除操作,每个案例都基于一个假设的“学生信息管理系统”数据库。
一、数据库表结构
假设我们有一个名为students
的表,表结构如下:
id
:学生编号,主键,自增name
:学生姓名,字符串类型age
:学生年龄,整型gender
:学生性别,字符串类型
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
gender VARCHAR(10) NOT NULL
);
二、案例代码
1. 查询学生信息
功能描述
查询所有学生的信息,并打印出来。
代码实现
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class QueryStudents {
public static void main(String[] args) {
// 数据库URL、用户名和密码
String url = "jdbc:mysql://localhost:3306/studentdb";
String username = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1. 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立数据库连接
conn = DriverManager.getConnection(url, username, password);
// 3. 创建Statement对象
stmt = conn.createStatement();
// 4. 执行SQL语句
String sql = "SELECT * FROM students";
rs = stmt.executeQuery(sql);
// 5. 处理结果
System.out.println("学生信息列表:");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String gender = rs.getString("gender");
System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age + ", Gender: " + gender);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 6. 关闭连接
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
2. 插入学生信息
功能描述
向students
表中插入一条新的学生记录。
代码实现
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class InsertStudent {
public static void main(String[] args) {
// 数据库URL、用户名和密码
String url = "jdbc:mysql://localhost:3306/studentdb";
String username = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
try {
// 1. 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立数据库连接
conn = DriverManager.getConnection(url, username, password);
// 3. 创建Statement对象
stmt = conn.createStatement();
// 4. 执行SQL语句
String sql = "INSERT INTO students(name, age, gender) VALUES('Alice', 20, 'Female')";
int rowsAffected = stmt.executeUpdate(sql);
// 判断插入是否成功
if (rowsAffected > 0) {
System.out.println("插入成功");
} else {
System.out.println("插入失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5. 关闭连接
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
3. 更新学生信息
功能描述
更新指定学生的信息,例如将学生ID为1的年龄修改为21。
代码实现
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class UpdateStudent {
public static void main(String[] args) {
// 数据库URL、用户名和密码
String url = "jdbc:mysql://localhost:3306/studentdb";
String username = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
try {
// 1. 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立数据库连接
conn = DriverManager.getConnection(url, username, password);
// 3. 创建Statement对象
stmt = conn.createStatement();
// 4. 执行SQL语句
String sql = "UPDATE students SET age = 21 WHERE id = 1";
int rowsAffected = stmt.executeUpdate(sql);
// 判断更新是否成功
if (rowsAffected > 0) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5. 关闭连接
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
4. 删除学生信息
功能描述
删除指定学生的信息,例如删除学生ID为2的记录。
代码实现
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class DeleteStudent {
public static void main(String[] args) {
// 数据库URL、用户名和密码
String url = "jdbc:mysql://localhost:3306/studentdb";
String username = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
try {
// 1. 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立数据库连接
conn = DriverManager.getConnection(url, username, password);
// 3. 创建Statement对象
stmt = conn.createStatement();
// 4. 执行SQL语句
String sql = "DELETE FROM students WHERE id = 2";
int rowsAffected = stmt.executeUpdate(sql);
// 判断删除是否成功
if (rowsAffected > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5. 关闭连接
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
三、注意事项
-
数据库连接信息:确保数据库URL、用户名和密码正确无误,并且数据库已正确安装并运行。
-
数据库驱动:确保已将数据库驱动添加到项目依赖中。对于MySQL,可以在
pom.xml
中添加以下依赖:<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency>
-
异常处理:在实际项目中,建议使用更详细的异常处理逻辑,例如使用
try-catch
块捕获不同类型的异常,并进行相应的处理。 -
资源关闭:确保在
finally
块中关闭所有数据库资源,避免资源泄漏。