数据库之JDBC的使用

1 什么是JDBC

JDBC的全称是Java Data Base Connectivity,翻译成中文就是Java数据库连接。JDBC是由Sun公司定义的一套标准,本质上是一大堆操作数据库的接口,所有数据库厂商为Java设计的数据库驱动都实现了这套接口,这样就统一了数据库驱动的方法,开发人员只需要学习JDBC就会使用任意数据库驱动了。
数据库驱动:数据库厂商为了方便开发人员从程序中操作数据库而提供的一套jar包,通过导入这个jar包就可以调用其中的方法操作数据库,这样的jar包就叫做数据库驱动。

2 JDBC的使用

// 1.注册数据库驱动
DriverManager.registerDriver(new Driver());
// 2.获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
// 3.获取传输器对象
Statement state = conn.createStatement();
// 4.利用传输器传输sql语句到数据库中执行,获取结果集对象
ResultSet result = state.executeQuery("SELECT * FROM user");
// 5.遍历结果集获取查询结果
while (result.next()) {
    String name = result.getString("name");
    System.out.println(name);
}
// 6.关闭资源
result.close();
state.close();
conn.close();

3 使用PreparedStatement防止SQL注入

SQL注入是指在程序中的SQL语句拼接外部传入的参数,外部入参可以包含SQL关键字来改变SQL语句的语义,从而执行一些特殊的操作,这样的攻击方式就叫做sql注入攻击。
使用PreparedStatement来代替Statement可以防止SQL注入攻击:

// 3.获取传输器对象
String sql = "SELECT * FROM users WHERE username=? and password=?";
PreparedStatement state = conn.prepareStatement(sql);
statement.setString(1, username); // username是外部入参
statement.setString(2, password); // password是外部入参
// 4.利用传输器传输sql语句到数据库中执行,获取结果集对象
ResultSet result = state.executeQuery();

PreparedStatement利用预编译的机制将SQL语句的主干和参数分别传输给数据库服务器,从而使数据库分辨的出哪些是SQL语句的主干哪些是参数,这样一来即使参数中带了SQL的关键字,数据库服务器也仅仅将他当作参数值使用,关键字不会起作用,从而从原理上防止了SQL注入的问题。
PreparedStatement主要有如下的三个优点:
(1)可以防止SQL注入攻击
(2)由于使用了预编译机制,执行的效率要高于Statement
(3)SQL语句使用“?”形式替代参数,然后再用方法设置“?”的值,比起拼接字符串,代码更加优雅
相关代码:https://github.com/que2017/UserLogin/blob/master/src/com/duiyi/dao/SafeMySqlUserDao.java

你可能感兴趣的:(数据库之JDBC的使用)