JDBC是一种用于数据库访问的应用程序接口,它由一组用Java语言编写的类和接口组成。使用JDBC,可以以统一的语法访问多种关系数据库,而无需担心数据库操作语言的差异,下面对数据库连接、SQL操作、事务处理结合代码进行详细介绍。
一、 数据库连接
建立与数据库的连接,使用Connection
对象。
代码如下:
java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnectionExample {
public static void main(String[] args) {
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
System.out.println("连接成功");
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
username 用户名 password 数据库密码
二、SQL操作
1. 插入数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class InsertDataExample {
public static void main(String[] args) {
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
String sql = "INSERT INTO users (username, email) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "my");
pstmt.setString(2, "my@email.com");
int rowsAffected = pstmt.executeUpdate();
System.out.println(rowsAffected + " 条数据插入成功");
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2. 查询数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SelectDataExample {
public static void main(String[] args) {
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println("Username: " + rs.getString("username") + ", Email: " + rs.getString("email"));
}
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3. 更新数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UpdateDataExample {
public static void main(String[] args) {
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
String sql = "UPDATE users SET email = ? WHERE username = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "updated@email.com");
pstmt.setString(2, "he");
int rowsAffected = pstmt.executeUpdate();
System.out.println(rowsAffected + " 条数据更新成功");
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
4. 删除数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DeleteDataExample {
public static void main(String[] args) {
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
String sql = "DELETE FROM users WHERE username = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "he");
int rowsAffected = pstmt.executeUpdate();
System.out.println(rowsAffected + " 条数据删除成功");
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
三、事务处理
当多条语句共同执行,需要保证要么全部执行成功,要么全部执行失败,事务的处理就很重要。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TransactionExample {
public static void main(String[] args) {
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT INTO users (username) VALUES ('Alice')");
stmt.executeUpdate("INSERT INTO users (username) VALUES ('Bob')");
conn.commit();
System.out.println("事务提交成功");
} catch (SQLException e) {
try {
if (conn != null) {
conn.rollback();
System.out.println("事务回滚完成");
}
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
setAutoCommit(false); 设置事务不自动提交。
conn.commit(); 提交事务。
conn.rollback(); 回滚事务。