新手小白学jdbc
什么是JDBC(本质是接口)?
JDBC:java database connectivity(java语言连接数据库)
JDBC准备工作(配置驱动)
为什么制定JDBC接口?
JDBC编程6步骤
第一步:注册驱动:告诉java程序,即将连接哪个数据库
第二步:获取连接:表示jvm的进程和数据库进程之间的通道打开,进程之间的通信很重要,使用完毕要记得关闭通道
第三步:获取数据库操作对象(专门执行sql语句的对象):
第四步:执行sql语句(DQL/DML)
第五步:处理查询结果集(如果不是select查询语句,则省略)
第六步:释放资源:java与数据库属于进程之间的通信,使用完毕记得关闭
实战例子
第一步:注册驱动
在java.sql包下有一个类DriverManager,其中有一个registerDriver方法注册驱动。
mysql驱动下的driver.class中有静态代码块,其中有上述的注册驱动的代码,因此,常用的注册驱动的方法是通过类加载即可执行:
第二步:获取连接
还是在DriverManager类下,有静态方法getConnection方法,用来获取连接。
第三步:获取数据库连接对象
在第二步我们拿到了连接connection,接下来通过调用connection的方法回去数据库连接对象
在java.sql包下有个接口Connection,其下有一个静态方法creatStatement,用来创建一个statement对象,用来将sql语句发送给数据库。
Statement statement = connection.createStatement();
第四步:执行sql语句
有了statement对象之后,statement类中有一个executeUpdate的方法,专门用来执行DML语句(insert 、delete 、 cretate),并返回一个int值,其返回值是该条语句所影响数据库中的记录条数。这里我们以插入一条语句为例,因此返回值应该为1
倘若执行查询select语句,使用executeQuery方法,来专门执行查询语句(select),其返回结果是查询结果集ResultSet
第五步:处理查询结果集
得到查询结果集后,如何将返回的查询结果集中的数据读取出来?
答:使用接口ResultSet下的方法next()来遍历结果集,其返回值为true或者false:若当前新的行有效,返回true;如果不存在下一行,返回false。
如何将一行中的数据读出来?
答:使用结果集ResultSet中有个getString(下标(列下标),jdbc中所有下标从1开始)方法,不管数据库中的数据类型是什么,都以String的类型取出。
此外,也可以用getInt()、getDouble()的方法以int或者double类型的形式取出查询结果集中的int或者double类型的数据。
第六步: 释放资源和连接
为了保证资源一定释放,在finally语句块中执行此步骤关闭资源。
处理结束后,需要将两个进程之间的链接释放掉,释放资源时,要遵循从小到大,从后往前,每个连接需要分别try catch释放。
释放顺序为:ResultSet>Statement>Connection
PreparedStatement与Statement的对比与使用
如何在JDBC中设置手动提交事务(默认自动提交事务)
首先,将自动提交事务关闭,通过Connection中的setAutoCommit(false)来关闭。
然后在一连串sql语句提交之后,手动提交 commit。
同时,一旦发生异常,为了安全性,我们需要回滚之前提交的所有sql语句,因此在异常处理catch处要回滚事务。