一. JDBC基础
JDBC (Java DataBase Connectivity): 就是使用 java 语言操作数据库的一套API.
JDBC本质:
- 一套标准接口, 规范
- 各个数据库厂商实现这套接口, 提供驱动
- 使用接口, 真正执行的是实现类
二. 实战
2.1 非预编译sql
// 1. 注册数据库驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2. 数据库基本信息, 与数据库建立连接String url = "jdbc:mysql://localhost:3306/itcast";String user = "root";String password = "***";Connection connection = DriverManager.getConnection(url, user, password);// 3. 获取语句执行器, 编写并执行sql语句Statement statement = connection.createStatement();String sql = "select * from user";ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println(id + " " + name);}// 4. 释放资源resultSet.close();statement.close();connection.close();
2.2 预编译sql
// 1. 注册数据库驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2. 数据库基本信息, 与数据库建立连接String url = "jdbc:mysql://localhost:3306/itcast";String user = "root";String password = "wuxuanyu000";Connection connection = DriverManager.getConnection(url, user, password);// 3. 获取语句执行器, 编写并执行预编译sql语句String sql = "select id, username, password, name, age from user where id = ?";PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1, 1);ResultSet resultSet = preparedStatement.executeQuery();while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println(id + " " + name);}// 4. 释放资源resultSet.close();preparedStatement.close();connection.close();
预编译sql语句的优点:
- 防止sql注入, 更安全
- 将用户输入与sql语句分离开.
- 性能更高
- 避免反复的"sql检查 - sql优化 - sql编译".