JDBC
一 前期准备阶段
以下是在IDEA中实现
File----Project Structure—Modules模块下的Dependencies,点击+,选择第一个,之后就将下好的用于连接Jar包,显示以下代表成功
假设不行,可以新建一个项目再试
以下给出需要的jar包
链接:https://pan.baidu.com/s/1Sfznzx_YcaMvr7YymOIcLA
提取码:qwu6
二 六大步骤
不涉及异常的处理
1 注册驱动
- 第一种方法
Driver driver = new com.mysql.jdbc.Driver(); DriverManager.registerDriver(driver)
这里可以合并:DriverManager.registerDriver(new com.mydql.jdbc.Driver); - 采用反射机制 :
Class.forName("com.mysql.jdbc.Driver");
2 获取连接
- 第一种方式
// String url = "jdbc:mysql://localhost:3306/mysql2",低版本的mysql用这个就行
String url = "jdbc:mysql://localhost:3306/mysql2?useUnicode=true&characterEncoding=utf-8&useSSL=false";//mysql8.0以上版本的会警告关于ssl的,我们可以设置一下
String user = "用户名";
String password = "密码";
Connection con = DriverManager.getConnection(url,user,password);
- 第二种方式: 使用资源绑定器绑定属性配置文件,这种方法更加便捷,动态获取属性,不必修改java代码
用文本编辑器将属性写入: jdbc.txt文件
写完将后缀改为“ .properties ”文件,建议文件路径最好一致
ResouceBundle rb = ResouceBundle.getBundle("jdbc");
String driver = rb.getString("driver");
String url = rb.getString("url");
String user = rb.getString("user");
String password = rb.getString("password");
3 获取操作数据库对象
Stmtment stmtment = con.createStmtment();//这个存在SQL注入风险
PreparedStmtment ps = con.prepareStmtment(...);//可以预防SQL注入 ,后面会讲
4 执行SQL语句
String sql = "select * from dfh";
..........
rs = tmtment.executeUpdate(sql)//专门执行DML语句
rs = stmtment.executeQuery(sql)//专门执行DQL语句
5 处理查询结果集
取元素
while(rs.next()){
........
}
6 关闭资源
- 保证资源的释放
- 遵循从小到大一次关闭
- 异常处理
三 如何解决SQL注入问题
先来看看Stmtment 与 PrepareStmtment的区别
- 前者存在SQL注入,后者可以预防SQL注入
- 前者是编译一次执行一次,后者是编译一次,执行N次
- 遇到字符串拼接的时候一定要用Stmtment, 后者编译阶段会做安全检查
- Stmtment的相关代码:
//执行SQL语句
String sql = "select * from hehe where no = 123";
stmtment.executeUpdate(sql);
根据Java自上而下的执行顺序,可以看出,带着sql语句在进行编译,如若sql语句发生恶意改动,就会带入一同编译,扭曲原sql语句的含义
PrepareStmtment的原理是:对sql语句的框架进行预编译,之后再传值。?表示占位符
String sql = "select * from hehe where no = ? ";
PrepareStmtment ps = con.prepareStmtment(sql)//预编译,此时还没传值
ps.setInt(1,233);//传值
ps.setDounle(2,20.2);//传值
四 有关于事务
jdbc是自动提交事务
我们可以手动修改机制
再获取数据库连接对象之后
con.setAutoCommit(false);//开启事务
.......
con.commit();//手动提交
//在异常语句中可以添加事务回滚:
906

被折叠的 条评论
为什么被折叠?



