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

通过连接池获得连接对象

(二)实现方式

  1. DBCP: Spring推荐的
  2. C3P0: Hibernate推荐的
  3. 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;

上一篇:HTML和CSS
下一篇:JDBC入门

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月21日 09时22分41秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章