2020-09-27课堂笔记

主知识点

1.数据持久化

数据持久化可以简单理解为:将数据保存到数据库
数据在计算机中有一般有两个存储地,内存为暂存,因为电源关机就会数据丢失,如果需要反复使用,就要持久保存,实现持久化了
持久化技术封装了数据访问细节,为大部分业务逻辑提供面向对象的API。

  1. 通过持久化技术可以减少访问数据库数据次数,增加应用程序执行速度;
  2. 代码重用性高,能够完成大部分数据库操作;
  3. 松散耦合,使持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时只需修改配置文件而不用修改代码。

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();
		    }
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值