JavaEE-JDBC

什么是 JDBC?

Java 数据库连接,(Java Database Connectivity,简称 JDBC)是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC 也是 Sun Microsystems 的商标。我们通常说的 JDBC 是面向关系型数据库的。

简而言之,JDBC 就是 JDK 提供的关于数据库操作的一套接口规范,不同数据库厂商来负责实现这个接口,完成指定的操作。

用程序和数据建立连接,分为三步骤:

  1. 连接数据库

  2. 执行 SQL 语句

  3. 把查询到的结果集转换成 JAVA 对象

安装 mysql-connector-java.jar 文件

下载地址(官网):MySQL :: Download Connector/J

(1)加载驱动程序(通过反射找到对应的 re 包)

1
2
3
4
5
// 加载Oracle“驱动类” SPI
Class.forName("oracle.jdbc.driver.OracleDriver");

//加载MySql驱动 SPI
Class.forName("com.mysql.jdbc.Driver")

(2)获取数据库连接:

1
2
3
4
5
6
7
8
9
10
11
12
// 创建“URL连接字符串”。格式:jdbc:oracle:thin:@ 主机名/IP : 端口号 :服务名称
String url = "jdbc:oracle:thin:@ip:1521:sid"; //oracle
//jdbc:mysql://ip:3306:sid //mysql
//jdbc:micronsoft:sqlserver://ip:1433:sid //SqlServer

// 创建“用户名”
String username = "scott";
// 创建“密码”
String password = "123456";

// 初始化“数据库连接对象”
Connection conn = DriverManager.getConnection(url, username, password);

(3)Statement 对象(对静态 sql 的执行)

Statement 对象可以用来执行 SQL 语句,使用 executeQuery 执行查询语句,返回结果集,使用 executeUpdate 执行增删改,返回操作的行数。

1
Statement statement = conn.createStatement();

(4)结果 ResultSet 进行提取

1
2
3
4
5
6
7
8
String sql = "select * from users";
ResultSet rs = statement.executeQuery(sql);

//取出值
while(rs.next()){
int id=rs.getInt(columnLabel:"id");
String name=rs.getString(columnLabel:"username");
}

JDBC 预编译

在 JDBC 中,预编译指的是使用 PreparedStatement 接口来执行 SQL 语句

  • 性能提升:预编译的 SQL 语句只需要解析一次,可以重复执行多次,减少了数据库解析 SQL 的时间。
  • 参数化查询:预编译的 SQL 语句可以使用占位符(?)代替实际值,这使得相同的 SQL 语句可以使用不同的参数值执行。
  • 防止 SQL 注入:预编译的 SQL 语句可以自动转义特殊字符,从而防止 SQL 注入攻击。

创建预编译 Statement,并把 sql 语句传入,此时 sql 语句已与此 prepareStatement 绑定,所以执行语句时无需再把 sql 语句作为参数传入 execute ()。

定义预编译的 sql 语句,其中待填入的参数用?占位。注意,? 无关类型,不需要加分号之类。其具体数据类型在下面 setXX()时决定

1
2
String sql = "insert into student(id,name,passwd) values(?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
1
2
3
4
//填入具体参数。通过setXX(问号下标,数值)来为sql语句填入具体数据。注意:问号下标从1开始,setXX与数值类型有关,字符串就是setString(index,str).
ps.setInt(1, id);
ps.setString(2, user);
ps.setInt(3, passwd);