jdbc工具类介绍

来源:互联网 发布:药家鑫事件知乎 编辑:程序博客网 时间:2024/05/16 11:06
jdbc工具类的封装
1 当在很多的类里面有相同的代码,可以把相同的代码提取到一个工具类里面,
在类里面直接调用工具类里面的方法实现


2 在jdbc实现crud操作的代码里面,首先得到数据库连接,和释放资源的代码是重复的,所以进行封装


3 可以把数据库的一些信息,写到配置文件里面,在工具类读取配置文件得到内容
一般使用properties格式文件作为存储数据库信息的文件
有两种方式读取配置文件
第一种,使用properties类
(1)代码
//创建properties对象
Properties p = new Properties();
//文件的输入流
InputStream in = new FileInputStream("src/db.properties");
//把文件的输入流放到对象里面
p.load(in);
String drivername = p.getProperty("drivername");
String url = p.getProperty("url");
String username = p.getProperty("username");
String password = p.getProperty("password");


第二种,使用ResourceBundle类
* 使用范围:首先读取的文件的格式需要时properties,文件需要放到src下面
(1)代码
String drivername = ResourceBundle.getBundle("db").getString("drivername");
String url = ResourceBundle.getBundle("db").getString("url");
String username = ResourceBundle.getBundle("db").getString("username");
String password = ResourceBundle.getBundle("db").getString("password");


4 代码
public static String drivername;
public static String url;
public static String username;
public static String password;

//在类加载时候,执行读取文件的操作
static {
drivername = ResourceBundle.getBundle("db").getString("drivername");
url = ResourceBundle.getBundle("db").getString("url");
username = ResourceBundle.getBundle("db").getString("username");
password = ResourceBundle.getBundle("db").getString("password");
}



sql的注入和防止
1 模拟登录的效果
(1)登录的实现的步骤
首先,输入用户名和密码
第二,拿到输入的用户名和密码,到数据库里面进行查询,如果用户名和密码都正确,才表示登录成功;
但是如果用户名和密码,有一个是错误的,表示登录失败。

2 演示sql的注入
(1)在登录时候,用户名里面输入 bbb' or '1=1,因为在表里面有一个用户是bbb,可以登录成功
因为输入的内容,被作为sql语句的一个条件,而不是作为整个用户名。
select * from user where username='bbb' or '1=1' and password='rrr'


3 防止sql的注入
(1)使用PreparedStatement预编译对象防止sql注入
(2)创建PreparedStatement对象 prepareStatement(String sql) 
(3)PreparedStatement接口的父接口Statement
(4)什么是预编译
(5)步骤:
第一步,加载驱动,创建数据库的连接
第二步,编写sql
第三步,需要对sql进行预编译
第四步,向sql里面设置参数
第五步,执行sql
第六步,释放资源
(6)代码
//使用工具类得到数据库的连接
conn = MyJdbcUtils.getConnection();
//编写sql
String sql = "select * from user where username=? and password=?";
//对sql进行预编译
psmt = conn.prepareStatement(sql);
//设置参数
psmt.setString(1, username);
psmt.setString(2, password);
//执行sql
rs = psmt.executeQuery();
if(rs.next()) {
System.out.println("login success");
} else {
System.out.println("fail");
}

使用PreparedStatement预编译对象实现crud的操作
注意地方:
第一,编写sql时候,参数使用?表示(占位符)
第二,预编译sql,设置参数的值,执行sql


12.1 使用PreparedStatement预编译对象实现查询的操作
(1)预编译对象executeQuery()执行查询语句


12.2 使用PreparedStatement预编译对象实现增加的操作
(1)预编译对象executeUpdate()执行增加的语句


12.3 使用PreparedStatement预编译对象实现修改的操作
(1)预编译对象executeUpdate()执行修改的语句


12.4 使用PreparedStatement预编译对象实现删除的操作
(1)预编译对象executeUpdate()执行删除的语句
0 0