2020-09-27课堂笔记
主知识点
1.数据持久化
数据持久化可以简单理解为:将数据保存到数据库
数据在计算机中有一般有两个存储地,内存为暂存,因为电源关机就会数据丢失,如果需要反复使用,就要持久保存,实现持久化了
持久化技术封装了数据访问细节,为大部分业务逻辑提供面向对象的API。
- 通过持久化技术可以减少访问数据库数据次数,增加应用程序执行速度;
- 代码重用性高,能够完成大部分数据库操作;
- 松散耦合,使持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时只需修改配置文件而不用修改代码。
2.封装访问数据库的细节
通常我们将访问数据库的代码封装成一个DbUtill类,这个类包括注册驱动,连接数据库,关闭连接,然后通过调用这个工具类,实例化出一个con对象,用statement运行sql语句,实现对数据库的CRUD操作
- 1.注册驱动(只需要注册一次,最优先执行static)
- 2.创建连接
- 3.创建SQL脚本
- 4.创建statement执行器
- 5.执行SQL(CRUD)
- (可选)6.创建ResultSet结果集
- 7.关闭(先开后关原则)
注意:import java.sql;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/g_design", "root", "");
String sql="select * from s_admin where id=?";
//4.创建ststement执行器
//Statement st=con.createStatement();
PreparedStatement prst =con.prepareStatement(sql);//把sql传给数据库对象
prst.setInt(1, 1);
//执行
//ResultSet set=st.executeQuery(sql);
ResultSet set=prst.executeQuery();
while(set.next()) {
System.out.print(set.getInt("id")+"\t");
System.out.print(set.getString("name")+"\t");
System.out.print(set.getString("password")+"\t");
}
//关闭连接(先开后关原则)
set.close();
//st.close();
prst.close();
con.close();
3.事务
public class JBDCTest {
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException {
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false", "root", "root");
Statement statement=null;
//开启事务
Savepoint savepoint=null;
try {
connection.setAutoCommit(false);
String sql="insert into user (nickname,username,password) value('张三','zhangsan','123456')";
statement=connection.createStatement();
statement.executeUpdate(sql);
for(int i=0;i<10;i++)
{
if(i%3==0)
{
savepoint=connection.setSavepoint();
}
if(i==8)
{
int num=1/0;
}
sql="insert into user(nickname,username,password) value('李四"+i+"','lisi',123456)";
statement.executeUpdate(sql);
}
connection.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
connection.rollback(savepoint);
connection.commit();
}
finally{
statement.close();
connection.close();
}
}
}