JDBC概述
JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作。说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。
Java使用JDBC详细步骤
IDEA中创建maven工程,然后导入mysql
jar包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
1、加载数据库驱动
// 1.加载驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
如果是mysql 8.0一下的版本
Class.forName("com.mysql.jdbc.Driver");
2、获得数据库链接
// 2.获得数据库链接
String URL = "jdbc:mysql://localhost:3306/springtest?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false";
String USER = "root";
String PASSWORD = "123456";
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
Connection
对象常用方法
方法 | 描述 |
---|---|
prepareStatement(sql) | 创建向数据库发送预编译sql的PrepareSatement对象。 |
prepareCall(sql) | 创建执行存储过程的callableStatement对象。 |
createStatement() | 创建向数据库发送sql的statement对象。 |
setAutoCommit(boolean autoCommit) | 设置事务是否自动提交。 |
commit() | 在链接上提交事务。 |
rollback() | 在此链接上回滚事务。 |
3、执行SQL语句
方法1:Statement
String sql="select * from user where name='"+name+"'";
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery(sql);
Statement对象常用方法:
方法 | 描述 |
---|---|
executeQuery(String sql) | 用于向数据发送查询语句 |
executeUpdate(String sql) | 用于向数据库发送insert、update或delete语句 |
execute(String sql) | 用于向数据库发送任意sql语句 |
addBatch(String sql) | 把多条sql语句放到一个批处理中。 |
executeBatch() | 向数据库发送一批sql语句执行。 |
方法2:PreperedStatement
PreperedStatement
是Statement
的子类
String sql="select * from user where name=?";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, name);
ResultSet rs = statement.executeQuery();
Statement
和PreperedStatement
对比
- PreperedStatement可以避免SQL注入的问题
- Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。
- PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。
4、获取结果
while (rs.next()) {
System.out.println(rs.getString("name") + " " + rs.getString("age"));
}
ResultSet
常用方法:
获取行
- next():移动到下一行
- Previous():移动到前一行
- absolute(int row):移动到指定行
- beforeFirst():移动resultSet的最前面。
- afterLast() :移动到resultSet的最后面。
5、释放资源
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if (statement != null) {
try {
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
完整代码
import java.sql.*;
public class App {
public static void main(String[] args) {
Connection conn = null;
// Statement statement = null;
PreparedStatement statement = null;
ResultSet rs = null;
try {
// 1.加载驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
// 2.获得数据库链接
String URL = "jdbc:mysql://localhost:3306/springtest?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false";
String USER = "root";
String PASSWORD = "123456";
conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
String name = "张三1";
//预编译
String sql = "select * from user where name=?";
statement = conn.prepareStatement(sql);
statement.setString(1, name);
rs = statement.executeQuery();
/* String sql="select * from user where name='"+name+"'";
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery(sql);*/
// 4.处理数据库的返回结果(使用ResultSet类)
while (rs.next()) {
System.out.println(rs.getString("name") + " " + rs.getString("age"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//6.关闭链接,释放资源
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if (statement != null) {
try {
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}