【JDBC详解】深入
来源:互联网 发布:梦里花落知多少大结局 编辑:程序博客网 时间:2024/06/07 04:59
1.SQL注入攻击
(1)定义:
SQL 注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的 SQL 语句段或命令,从而利用系统的 SQL 引擎完成恶意行为的做法。
(2)解决方法:用 PreparedStatement(预编译) 取代 Statement 就可以了
原因:使用预编译SQL语句避免了频繁sql拼接 (可以使用占位符),也可以防止sql注入
例:OR 1=1 语句将删除整个表 ;
2.批处理
(1)需求:批量保存信息。
(2)常用方法
- void addBatch(String sql) 添加批处理
- void clearBatch() 清空批处理
- int[] executeBatch() 执行批处理
(3)进行批处理
例:
public void batching(List<Admin> list) { private Connection con = null; private PreparedStatement pstmt = null; String sql = "INSERT INTO admin(userName,pwd) values(?,?)"; try { // 获取连接(利用工具类) con = JdbcUtil.getConnection(); pstmt = con.prepareStatement(sql); //预编译SQL语句 for (int i=0; i<list.size(); i++) { Admin admin = list.get(i); // 设置参数 pstmt.setString(1, admin.getUserName()); pstmt.setString(2, admin.getPwd()); // 添加批处理 pstmt.addBatch(); // 不需要传入SQL // 测试:每5条执行一次批处理 if (i % 5 == 0) { // 批量执行 pstmt.executeBatch(); // 清空批处理 pstmt.clearBatch(); } } // 批量执行 pstmt.executeBatch(); // 清空批处理 pstmt.clearBatch(); } catch (Exception e) { e.printStackTrace(); } finally { //(利用工具类) JdbcUtil.closeAll(con, pstmt, null); } }}
3. 事务
(1)概念:
事务使指一组最小逻辑操作单元,里面有多个操作组成。 组成事务的每一部分必须要同时提交成功,如果有一个操作失败,整个操作就回滚。
(2)四个特性(ACID)
原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
(3)特性的总结:
* 原子性,是一个最小逻辑操作单元 !
* 一致性,事务过程中,数据处于一致状态。
* 持久性, 事务一旦提交成功,对数据的更改会反映到数据库中。
* 隔离性, 事务与事务之间是隔离的。
(4)JDBC事务处理
当一个连接对象被创建时,默认情况下是自动提交事务:每次执行一个 SQL 语句时,如果执行成功,就会向数据库自动提交,而不能回滚
为了让多个 SQL 语句作为一个事务执行,调用 Connection 对象的 setAutoCommit(false); 以取消自动提交事务
在所有的 SQL 语句都成功执行后,调用 commit(); 方法提交事务
若出现异常,调用 rollback(); 方法回滚事务
若此时 Connection 没有被关闭, 则需要恢复其自动提交状态
例:
public void trans() { String sql_zs = "UPDATE account SET money=money-1000 WHERE accountName='Lee';"; String sql_ls = "UPDATE1 account SET money=money+1000 WHERE accountName='LinDan';"; try { con = JdbcUtil.getConnection(); //设置手动提交任务 con.setAutoCommit(false); pstmt = con.prepareStatement(sql_zs); pstmt.executeUpdate(); pstmt = con.prepareStatement(sql_ls); pstmt.executeUpdate(); } catch (Exception e) { try { //若出现异常则回滚 con.rollback(); } catch (SQLException e1) { } e.printStackTrace(); } finally { try { //若无异常则提交事务 con.commit(); //工具类 JdbcUtil.closeAll(con, pstmt, null); } catch (SQLException e) { } } }
4.大文本类型的处理
(1)MySQL的大文本类型,
- Text 长文本类型
- Blob 二进制类型
例:
public void testSaveText() { String sql = "insert into test(img) values(?)"; try { // 连接 con = JdbcUtil.getConnection(); // pstmt 对象 pstmt = con.prepareStatement(sql); // 获取图片流 InputStream in = App_text.class.getResourceAsStream("background.jpg"); pstmt.setBinaryStream(1, in); // 执行保存图片 pstmt.execute(); // 关闭 in.close(); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtil.closeAll(con, pstmt, null); } }
本人才疏学浅,若有错误,请指出
谢谢!
- 【JDBC详解】深入
- 深入JDBC
- elasticsearch-jdbc实现MySQL同步到ElasticSearch深入详解
- elasticsearch-jdbc实现MySQL同步到ElasticSearch深入详解
- elasticsearch-jdbc实现MySQL同步到ElasticSearch深入详解
- JDBC详解
- JDBC详解
- JDBC详解
- JDBC详解
- jdbc详解
- jdbc详解
- JDBC详解
- JDBC详解
- JDBC详解
- JDBC详解
- jdbc详解
- JDBC详解
- JDBC详解
- 技巧1 以空格分隔 第一个最后一个数后无空格
- 四月杂记
- HDU 2544 最短路dijstra算法
- Centos 7.2 安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群
- 安卓沉浸式状态栏
- 【JDBC详解】深入
- css3
- 基础知识—函数-默然参数
- 搬运自己的mysql学习笔记2-连接池的使用
- 翻转单词顺序列
- 【Codeforces 132C】 Logo Turtle
- andriod org.apache.http网络通讯
- 将数据库中的数据转换成json格式
- 面向对象实验3-分析类