一、jdbc链接mysql
1、将jar包导入项目
(1) 在工程下面创建一个文件夹 lib
(2)将数据库的驱动jar包赋值到lib下
(3)右击jar包 build path ——》 add build path
2、创建Driver接口变量
3、创建好连接数据库的基本信息
4、通过dirver.connet(url,info);得到数据库的连接对象
public static void open() throws Exception {
//1创建一个driver实现类的对象
Driver driver=new Driver();
//2.准备好链接数据库的基本信息
String url="jdbc:mysql://localhost:3306/test";
Properties info=new Properties();
info.put("user", "root");
info.put("password", "root");
//3调用driver接口 connect(url,info)获取数据库链接
Connection connection=(Connection) driver.connect(url, info);
System.out.println(connection);
}
二、创建一个通用的数据库打开程序
1.写出数据库配置文件 jdbc.properties 内容 包含 密码,用户名 url,等;
2.从修改jdbc配置文件的 要连接数据库的信息。
3.通过反射的方式获取dirver实现类的对象
4.通过dirver.connect()方法获取对象
public Connection getConnection() throws Exception{
String url=null;
String password=null;
String user=null;
String driverClass=null;
InputStream inStream=getClass().getClassLoader().getResourceAsStream("cn\\lw\\jdbc\\jdbc.properties");
Properties properties=new Properties();
properties.load(inStream);
url=properties.getProperty("url");
password=properties.getProperty("password");
user=properties.getProperty("user");
driverClass=properties.getProperty("driverClass");
//2.通过反射获取driver对象
System.out.println(url+password+user+driverClass);
Driver driver=(Driver) (Class.forName(driverClass).newInstance());
Properties info=new Properties();
info.put("user",user);
info.put("password",password);
Connection connection= (Connection)driver.connect(url, info);
return connection;
}
三、数据库事物
1.事物四大特性
(1)原子性 是指事物的所有操作要么成功,要么全部失败
例如:a有1000元向b也有1000元 a向b转账500元那么数据库要执行 两个操作
update account set balance=500 where name=‘a’;
update account set balance=1500 where name=‘b’;
假如没有原子性的话,则执行了第一条语句,然后异常失败了。则a的钱减了,但是b的钱没有增加
(2) 一致性
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
(3)隔离性
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
(4)持久性
持久性指的是事物一旦被提交,那么数据将被永久改变。
2.当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,在介绍数据库提供的各种隔离级别之前,我们先看看如果不考虑事务的隔离性,会发生的几种问题:
1 脏读:就是a线程插入了数据,在a线程没有提交,但是b线程却看到了a线程提交数据
2 不可重复读
不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
3,虚读(幻读)
幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。
四、事物的开始
1.先关闭自动提交
set @@autocommit=0;
2.开始事物(数据的增删改查)
3结束事物
结束事物只能通过 rollback 或者 commit来结束
commit是提交, rollback 是回滚。