
JDBC进阶
发布日期:2021-05-14 16:56:12
浏览次数:18
分类:精选文章
本文共 3120 字,大约阅读时间需要 10 分钟。
JDBC进阶
一、PreparedStatement
(一)介绍
1)概念
是Statement的子接口,表示预编译SQL语句对象
2)三大优点
1. 字符串不用拼接,使用方便
2.解决SQL注入的问题(登录验证)
SQL注入:通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意 的SQL命令
比如:在一个登录界面输入用户名和密码,如果用户名输入’or 1 = 1 可以实现免账号登录
3. 预编译:执行效率更高,速度更快
(二)使用
1.贾琏步骤一样
2.预编译,问号相当于占位符
String sql = "select * from java创建表 where username = ?";//在拿到语句对象的时候就使用SQLpsta = con.prepareStatement(sql);//所有占位符,需要给它添加相应的值psta.setString(1, username);
3.执事步骤一样
二、获取主键
public void getKey(User user) { Connection con = null;PreparedStatement psta = null;ResultSet rs = null; try { con = JDBCUtilPro.getCon(); String sql = "insert into java创建表 (username,password) values (?,?)"; psta = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); psta.setString(1, user.getUsername()); psta.setString(2, user.getPassword()); psta.execute(); //获取由于执行此Statement对象而创建所有自动生成的键 rs = psta.getGeneratedKeys(); while (rs.next()) { System.out.println(rs.getInt(1));//getInt(1) 固定格式 }
三、事务
Transaction,简写为tx
(一)概念
一组逻辑操作单元,使数据从一种状态变换到另一种状态,是对一组操作,要么都成功,要么都失败(同生共死)
(二)四大特性ACID
A Atomic 原子性 不可分割,要成功都成功,失败退回原有状态
C Consistency 一致性 数据前后保持不变 I Isolation 隔离性 进程之间互不影响 D Durability 持久性 永久的保存数据(三)操作
先定义开始一个事务,然后对数据作修改操作,这时如果提交(commit),这些修改就永久地保存下来,如果回退(rollback),数据库管理系统将放弃所有修改而回到开始事务时的状态
1、设置默认不提交 setAutoCommit(false);
2、操作完成,手动提交 commit(); 3、失败回滚 rollback();public void transfer(Account guo, Account gu,BigDecimal money) { Connection con = null; PreparedStatement psta = null; try { con = JDBCUtilPro.getCon(); //设置不自动提交事务 con.setAutoCommit(false); String sql = "update account set money = ? where name = ?"; psta = con.prepareStatement(sql); psta.setBigDecimal(1,balance(guo.getName()).subtract(money)); psta.setString(2, guo.getName()); psta.execute(); psta.setBigDecimal(1, balance(gu.getName()).add(money)); psta.setString(2, gu.getName()); psta.execute(); //设置为手动提交事务 con.commit(); } catch (Exception e) { try { //如果操作失败,事务回滚 con.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally { JDBCUtilPro.closeIO(psta, con, null); } }
四、连接池
(一)概念
dataSource
通过连接池获得连接对象
(二)实现方式
- DBCP: Spring推荐的
- C3P0: Hibernate推荐的
- Druid:阿里推荐的
(三)通过BasicDataSourceFactory工厂拿到连接
public class DBCPUtilPro { //拿到配置文件 public static Properties p = new Properties(); public static DataSource ds = null; static{ try { p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties")); //通过BasicDataSourceFactory工厂拿到连接 ds = BasicDataSourceFactory.createDataSource(p); }catch (Exception e) { e.printStackTrace(); } } // 拿到连接对象 public static Connection getCon() { Connection con = null; try { con = ds.getConnection(); } catch (Exception e) { e.printStackTrace(); } return con; }
注意事项:
在jdbc.properties里的属性名称必需要工厂的对应上
diverClassName = com.mysql.jdbc.Driverurl = jdbc:mysql://localhost:3306/mysqlday10.17username = rootpassword = 123456
五、MySQL安全模式
(一)概念
设置安全参数:如果update语句,没有加where限制条件,不许改
(二)范围
只针对当前会话有效:SET (session) SQL_SAFE_UPDATES=1; 缺省session
只针对设置全局有效:SET global SQL_SAFE_UPDATES=1;发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月21日 09时22分41秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
final 在 java 中的作用
2021-05-15
Unity-PlasticSCM usage
2021-05-15
python安装和配置(win10)
2021-05-15
光猫,路由器,机顶盒
2021-05-15
智力扣(4)——三角扣
2021-05-15
智力扣(12)——金线锁梯
2021-05-15
智力扣(13)——回字环
2021-05-15