Java DataBase Connectivity(Java语言连接数据库)
JDBC是SUN公司制定的一套接口(interface)、提供了一套接口。
因为每一个数据库的底层实现原理不一样、Oracle数据库有自己的原理、MySQL数据库也有自己的原理、每一个数据库产品都有自己独特的实现原理。
先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath中,
以上的配置是针对文本编辑器方式开发,使用IDEA工具的时候,不需要配置以上的环境变量。
第一步:注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌的数据库)
获取静态代码块执行,在静态代码块中获取驱动的注册
第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完之后一定要关闭)
需要三个参数,url 、userid、password
第三步:获取数据库操作对象(专门执行SQL语句的对象)
叫statement,createStatement
第四步:执行SQL语句(DQL DML)
执行DML语句用excute方法,返回Int类型,表示影响数据库的基本条数。
执行DQL语句用query和select,返回查询结果集,ResultSet。
第五步:处理查询结果集(只有当第四步执行的是Select语句的时候,才有这第五步的处理查询结果集)
While(rs.next()){}有数据返回true,没有数据返回false。通过.getString("")可以获取
第六步:释放资源(使用完资源之后一定要关闭资源,Java和数据库属于进程间的通信,开启之后一定要关闭。)
(1)打开 Open Module Settings
(2)点击Libraries
(3)点击+号和Java
(4) 选择路径
JDBC事务,它是自动提交的,只要执行任意一条DML语句,则自动提交一次,这是JDBC默认的行为,但是在实际的业务当中,通常都是N条DML语句共同联合才能完成的,必须保证他们这些DML语句在同一个事务中同时成功或失败。
所以我们加入了三行代码,将自动改为手动提交。
conn.setAutoCommit(false);
conn.commit();
conn.rollback();
Connection conn = null;
PreparedStatement ps = null;
try {
// 1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2、获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123");
// 3、获取预编译的数据库操作对象
String sql = "update t_user set loginName= ? where id= ? ";
ps.setString(1,"zhaoxioadong");
ps.setInt(2,1);
int count = ps.executeUpdate();
System.out.println(count);
// 重新给占位符传值
ps.setString(1,"liuyiming");
ps.setInt(2,2);
count = ps.executeUpdate();
System.out.println(count);
} catch (Exception e) {
e.printStackTrace();
}
这一行代码就表示了,我将zhaoxiaodong和liuyiming都更新了,它才能一起往数据库更新操作。
ename | jpb | sal | version |
|BLAKE| | |MANAGER| | |2850.00| | 1.1 |
事务1-->读取到版本号1.1
事务2-->读取到版本号1.1
其中事务1先修改了,修改之后看了版本号1.1,于是提交修改的数据,将版本号修改为1.2
其中事务2后修改的,修改之后准备提交的时候,发现版本号1.2,和它最初读的版本号不一致,回滚。
悲观锁:事务必须排队执行,数据锁住了,不允许并发。
乐观锁:支持并发,事务也不需要排队,只不过需要一个版本号。