数据库中存储数据,java中对数据进行操作,这就需要建立java和数据库中的连接,目前个人用过两种,JDBC连接数据库和hibernate,hibernate的诞生是为了实现对数据库操作更广泛的统一和更好的移植性,更好的实现跨数据库操作,而hibernate也是对JDBC的再封装,所以对JDBC的了解非常有必要。
JDBC
JAVA DATABASE CONNECTIVITY,从字面意义看,就知道是java语言访问数据库的一种标准规范,是一套API。
其实它是一组标准的java语言的接口和类,目的是为了更方便的访问不同类型的数据库,是通过接口和实现分离的思想来设计java数据库编程的框架,
这里我们可以看到java.sql,而所谓的接口和实现分离的接口就在这里。
但不得不说JDBC只是一种低级接口,所以之后才有了hibernate,所谓“低级接口”的意思就是说,它能够直接调用SQL,也就是说我们可以通过sql语句将数据库的数据取出来,而之后出现的hibernate则基于这个的基础上有了发展,就是映射出一个新的对象,然后再进行操作的时候可以直接对对象进行操作,而不像JDBC里面我们取出数据来之后自己再合成对象。
说说JDBC的基本用法:
1、加载数据库驱动;
JDBC数据库驱动据说有四种,但是一直没有看明白究竟啥意思,就说说使用方法吧
通常是将一个驱动的jar包拷入工程,然后在java语言中利用Class.forName()进行加载;
2、建立数据库连接;
Connection conn=DriveManager.getConnection(url,"","");
DriveManager是一个实现类,是设计模式中的工厂模式体现,在DriveManager工厂中有一个方法getDriver(String url),通过这个方法可以得到驱动程序对象,这个方法是各个数据库厂商按照JDBC规范设计的数据库驱动程序包里的类中静态实现的,而Connection是一个控制数据库连接对象的接口,是通过Drivermanager工厂中的getConnection(String URL)方法来实现的,而URL则就是用来确定数据库类型的
3、发送SQL语句;
pstm=conn.prepareStatement(sql);
实际上Connection提供了三个类用来发送sql语句,其中
Statement有方法createStatement()方法来获取,这一种通常用来发送简单的SQL语句;
PrepareStatement是有方法prepareStatement()来获取的,是继承与statement的,所以它具有statement的功能,但是又高于statement,因为它是对于sql语句进行预编译的,效率上要更高一些;
CallableStatement是有方法prepareCall()获取的,它是继承于prepareStatement的,它继承了PrepareStatement中带一个活多个In参数的方法,还增加了处理OUT参数和INOUT参数的方法,通常用来调用已存储的过程
4、执行SQL语句,得到结果集;
以Statement为例,其它两个都是继承于它的,肯定也会有它的方法。
Statement提供了三种执行SQL语句的方法,execute()、executeQuery()和executeUpdate(),具体执行哪个方法还要看sql语句。
通常excuteQuery通常用于产生单个结果集的语句,而excuteUpdate()则多用于执行insert、update、delete方法,它的返回值是一个整数,是受影响的行数,而drop和create方法则返回0
5、关闭数据库连接
所以说也就总结为JDBC的功能可以总结为三件事:创建数据库连接、发送可执行语句并获取执行结果
发一个神图,也算是我当年uml入门的图