1. 什么是JDBC?
JDBC(Java Database Connectivity)是一个Java API,用于连贯和执行SQL语句与关系型数据库进行交互。JDBC提供了一组接口和类,使Java程序可能与各种数据库通信,如MySQL、Oracle、PostgreSQL等。
2. JDBC的次要组件
JDBC次要由以下几个组件组成:
DriverManager
:负责加载数据库驱动,并建设与数据库的连贯。Connection
:示意与数据库的连贯。Statement
:用于执行SQL语句。PreparedStatement
:用于执行预编译的SQL语句。ResultSet
:示意查问后果集。
3. 连贯数据库
在连贯数据库之前,须要确保曾经装置了相应的数据库驱动并将其增加到我的项目中。以下是一个简略示例,演示如何应用JDBC连贯到MySQL数据库:
java
Copy
import java.sql.Connection;import java.sql.DriverManager;public class JdbcConnectExample { public static void main(String[] args) { try { // 加载数据库驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 连贯到数据库 String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; Connection connection = DriverManager.getConnection(url, username, password); System.out.println("Connected to database!"); // 敞开连贯 connection.close(); } catch (Exception e) { e.printStackTrace(); } }}
4. 执行SQL查问
要应用JDBC执行SQL查问,能够创立一个Statement
对象,而后调用其executeQuery()
办法。以下是一个简略示例,演示如何查询数据库中的数据:
java
Copy
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class JdbcQueryExample { public static void main(String[] args) { try { // 加载数据库驱动并连贯到数据库 Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; Connection connection = DriverManager.getConnection(url, username, password); // 创立Statement对象并执行SQL查问 Statement statement = connection.createStatement(); String sql = "SELECT id, name FROM users"; ResultSet resultSet = statement.executeQuery(sql); // 处理结果集 while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } // 敞开资源 resultSet.close(); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } }}
5. 执行SQL更新
要应用JDBC执行SQL更新(如插入、更新或删除),能够创立一个Statement
对象,而后调用其executeUpdate()
办法。以下是一个简略示例,演示如何向数据库中插入数据:
java
Copy
import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class JdbcUpdateExample { public static void main(String[] args) { try { // 加载数据库驱动并连贯到数据库 Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; Connection connection = DriverManager.getConnection(url, username, password); // 创立Statement对象并执行SQL更新 Statement statement = connection.createStatement(); String sql = "INSERT INTO users (name, age) VALUES ('John Doe', 30)"; int rowsAffected = statement.executeUpdate(sql); System.out.println("Rows affected: " + rowsAffected); // 敞开资源 statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } }}**6. 应用PreparedStatement**`PreparedStatement`是一个预编译的`Statement`对象,能够进步SQL语句的执行效率。它还能够避免SQL注入攻打。以下是一个简略示例,演示如何应用`PreparedStatement`插入数据:```javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;public class JdbcPreparedStatementExample { public static void main(String[] args) { try { // 加载数据库驱动并连贯到数据库 Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; Connection connection = DriverManager.getConnection(url, username, password); // 创立PreparedStatement对象并执行SQL更新 String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, "Jane Doe"); preparedStatement.setInt(2, 28); int rowsAffected = preparedStatement.executeUpdate(); System.out.println("Rows affected: " + rowsAffected); // 敞开资源 preparedStatement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } }}
7. 事务处理
事务是一组逻辑操作单元,执行这些操作要么全副胜利,要么全副失败。在JDBC中,能够应用Connection
对象的commit()
和rollback()
办法进行事务处理。以下是一个简略示例,演示如何应用事务处理:
java
Copy
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;public class JdbcTransactionExample { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; try { // 加载数据库驱动并连贯到数据库 Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; connection = DriverManager.getConnection(url, username, password); // 敞开主动提交(开启事务) connection.setAutoCommit(false); // 执行SQL更新 String sql = "UPDATE users SET age = age + 1 WHERE id = ?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 1); preparedStatement.executeUpdate(); // 提交事务 connection.commit(); System.out.println("Transaction committed."); } catch (Exception e) { // 回滚事务 try { if (connection != null) { connection.rollback(); System.out.println("Transaction rolled back."); } } catch (Exception ex) { ex.printStackTrace(); } e.printStackTrace(); } finally { // 敞开资源 try { if (preparedStatement != null) { preparedStatement.close(); } if (connection != null) { connection.close(); } } catch (Exception e) { e.printStackTrace(); } } }}
8. 敞开资源
在JDBC中,须要确保及时敞开资源,如Connection
、Statement
和ResultSet
等。能够应用close()
办法或者Java 7中引入的try-with-resources
语句进行资源敞开。以下是一个简略示例,演示如何应用try-with-resources
敞开资源:
java
Copy
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class JdbcCloseResourceExample { public static void main(String[] args) { try { // 加载数据库驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 连贯到数据库 String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; try (Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement()) { // 执行SQL查问并处理结果集
举荐浏览:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g