JDBC流程,返回主键,分页,事务,数据源

本文详细介绍了使用JDBC进行数据库操作的步骤,包括注册MySQL驱动,获取连接,创建SQL执行器,执行DML和DQL语句,处理结果集,关闭资源。还涉及到PreparedStatement的使用以防止SQL注入,以及事务管理的概念和特性,如ACID属性和事务隔离级别。此外,提到了数据源作为DriverManager.getConnection的替代方案,以及分页查询和资源加载的方法。
摘要由CSDN通过智能技术生成

1:注册驱动(指挥部)Class.ForName("com.mysql.cj.jdbc.Driver")

2:获取链接(造桥)DriverManager.getConnection()

3:创建SQL执行器con.createStatement()

4:执行SQL语句,返回结果集sta.executeQuery(sql)

5:对结果进行处理while(rs.next()){int id = rs.getInt("id")}

6:关闭资源.close()

Example:

添加:

1:驱动注册

2:获取连接

Connection con = getConnection();

3:创建执行器
String sql="insert into student(name,age,birth,email) values(?,?,?,?)";
PreparedStatement pst = con.prepareStatement(sql);
3.1//给占位符赋值
pst.setString(1,"etoak");
pst.setInt(2,111);
pst.setDate(3,new java.sql.Date(new java.util.Date().getTime()));
pst.setString(4,"etoak@qq.com");
//执行SQL
int count = pst.executeUpdate();
System.out.println(count);
修改/删除:

1:注册驱动

2:获取连接

Connection con = getConnection();
//delete  from xxx where id=?

3:创建执行器
String sql="update student set name=?,age=?,birth=?,email=? where id=?";
PreparedStatement pst = con.prepareStatement(sql);
3.1//给占位符赋值
pst.setString(1,"etoak");
pst.setInt(2,111);
pst.setDate(3,new java.sql.Date(new java.util.Date().getTime()));
pst.setString(4,"etoak@qq.com");
pst.setInt(5,1);
//4:执行SQL,返回结果
int count = pst.executeUpdate();
System.out.println(count);

Tip:

DML:增删改使用executeUpdate()

DQL:查使用executeQuery()

返回主键:

1:主键是数字类型

开关:

PreparedStatement pst = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS)

ResultSet keys = pst.getGenaratedKeys()

while(keys.next()){

        int id = keys.getInt(1)

        System.out.println(id)

}

同一个连接下查询:

PreparedStatement pst = con.prepareStatement(sql)

int count = pst.executeUpdate()

pst = con.prapareStatement("select last_insert_id()")

2:主键是字符串类型

先生成主键------>再添加主键

分页:

假分页:按需显示数据(滚动结果集,preparedStatement三参数)

真分页:limit/rownum

int pageNumber=当前页

int pageSize=每页记录数

int start = (pageNumber-1)*pageSize

Others:

1:获取资源加载

从当前Test.class这个类所在的目录开始寻找:从包内开始找

TestCon.class.getResourceAsStream("../../../db.properties")

获取类加载器:从包外开始找

TestCon.class.getClassLoader().getResourceAStream("db.properties")

2:Statement和PreparedStatement的区别

PreparedStatement extends Statement

        1:PreparedStatement:预编译,当创建这个对象时,就会把该SQL语句发送到数据库编译保存,参数以?占位符的形式存在,执行时只需要给占位符复制即可

        2:避免SQL注入

事务:

概念上:多条SQL语句为一个执行单元

特征:ACID

原子性,一致性,隔离性,持久性

多个事务相互影响的问题:脏读,不可重复读,幻读

隔离级别:读已提交,读未提交,可重复读,串行化

事务应用场景:

入职:emp+emp1

转账:A-100,B+100

清空购物车:支付->生成订单->通知卖家->生成操作日志->清空购物车

添加学生携带照片:添加学生->返回主键->添加照片

JDBC控制事务:

1:先禁用setAutoCommit(false)

2:提交commit()

3:回滚rollback()

数据源:

第二步DriverManager.getConnection的替代(JDK1.4之后)

数据源:JDK标准

资源池:解决方案

apache-commons-DBCP:产品

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值