数据库系统是由数据库、数据库管理系统和应用系统、数据库管理员构成。数据库管理系统简称DBMS,是数据库系统的关键组成部分,包括数据库定义、数据查询、数据维护等。而JDBC技术是连接数据库与应用程序的纽带。使用JDBC技术访问数据库可达到查找满足条件的记录,或者向数据库添加、修改、删除数据。
1.JDBC技术简介
①数据库
数据库是一种存储结构,它允许使用各种格式输入、处理和检索数据,不必在每次需要数据的时候重新输入它们。
数据库的主要特点:
②JDBC-ODBC技术介绍
JDBC是一种用于执行SQL语句的Java API(Application ProgrammingInterface,应用程序设计接口)。是连接数据库和Java应用程序的一个纽带。JDBC-ODBC桥是一个JDBC驱动程序。完成了从JDBC操作到ODBC操作之间的转换工作。由于ODBC技术被广泛地使用,因此Java利用JDBC-ODBC桥可访问几乎所有的数据库。下面介绍一种通过JDBC-ODBC桥连接数据库的方法,通过这种方法无须手动配置ODBC数据源,而是采用默认的ODBC数据源,步骤:
1.首先加载JDBC-ODBC桥的驱动程序,代码:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Class类是java.lang包中的一个类,通过该类的静态方法forName()可加载sun.jdbc.odbc包中的jdbcOdbcDriver类来建立JDBC-ODBC桥连接器。
2.使用java.sql包中的Connection接口,并通过DriverManager类的静态方法getConnection()创建连接对象,代码:Connection conn=DriverManager.getConnection("jdbc:odbc:数据源名字","user name","password");
注:数据源名称必须是配置成功的,否则不会连接成功。
3.向数据库发送SQL语句。使用Statement接口声明一个SQL语句对象,并通过刚才创建的连接数据库对象conn的createStatement()方法创建这个SQL对象,代码:Statement sql=conn.createStatement();
JDBC-ODBC桥作为连接数据库的过渡性技术,现在已经不被Java技术广泛应用,现在广泛应用的是JDBC技术。但并不表示JDBC-ODBC桥技术已经被淘汰。JDBC-ODBC桥作为sun.jdbc.odbc包与JDK一起自动安装,不需要特殊配置。
③JDBC中常用的类和接口
JDBC制定了统一的访问各类关系数据库的标准接口,为各个数据库厂商提供了标准接口的实现。JDBC并不能直接访问数据库,需要依赖与数据库厂商提供的JDBC驱动程序。
DriverManager类:
DriverManager类用来管理数据库中的所有驱动程序。是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接。此外,DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪信息的显示等事务,DriverManager类中的方法都是静态方法,所以在程序中无须对它进行实例化,直接通过类名就可以调用,DriverManager类的常用方法:
Connection接口:
Connection接口代表与特定的数据库的连接。要对数据表中数据进行操作,首先要获取数据库连接。Connection实例就像在应用程序与数据库之间开通了一条渠道。
可通过DriverManager类的getConnection()方法获取Connection实例,Connection接口的常用方法:
Statement接口:
Statement实例用于在已经建立连接的基础上向数据库发送SQL语句。该接口用来执行静态的SQL语句。例如,执行INSERT、UPDATE、DELETE语句,可调用该接口的executeUpdate()方法,执行SELECT语句,可调用该接口的executeQuery()方法。
Statement实例可以通过Connection实例的createStatement()方法获取。Statement接口的常用方法:
PreparedStatement接口:
PreparedStatement接口继承Statement,用于执行动态的SQL语句,通过PreparedStatement实例执行的SQL语句,将被预编译并保存到PreparedStatement实例中。从而可以反复地执行该SQL语句。可以通过Connection类的preparedStatement()方法获取PreparedStatement对象。
PreparedStatement接口的常用方法:
ResultSet接口:
ResultSet接口类似于一张数据表,用来暂时存放数据库查询操作所获得的结果集。ResultSet实例具有指向当前数据行的指针。指针开始的位置在查询结果集第一条记录的前面。在获取查询结果集时,可通过next()方法将指针向下移。如果存在下一行该方法返回true,否则返回false。
ResultSet接口提供了从当前行检索不同类型值的getXXX()方法,通过该方法的不同重载形式,可实现分别通过列的索引编号和列的名称检索列值。此外,该接口提供了一组更新方法updateXXX(),可通过列的索引编号和列的名称,更新当前行的指定列。但是该方法并未将操作同步到数据库中,需要执行updateRow()或insertRow()方法完成同步操作,ResultSet接口的常用方法:
2.数据库连接
如果需要访问数据库,首先要加载数据库驱动,数据库驱动只需在第一次访问数据库时加载一次。然后在每次访问数据库时创建一个Connection实例,获取数据库连接,这样就可以执行操作数据库的SQL语句。最后在完成数据库操作时,释放与数据库的连接。
①加载数据库驱动
Java加载数据库驱动的方法是调用Class类的静态方法forName(),语法:Class.forName(String driverManager)
forName()方法参数指定要加载的数据库驱动,加载成功,会将加载的驱动类注册给DriverManager;如果加载失败,则会抛出ClassNotFoundException异常。
②创建数据库连接
在进行数据库操作时,只需要第一次访问数据库时加载数据库驱动。然后每次访问数据时,创建一个Connection对象。之后执行操作数据库的SQL语句。可通过DriverManager类的getConnection()方法,创建Connection实例。
方法声明:public static Connection getConnection(String url,Stringuser,String password)throws SQLE xception
参数说明:url表示指定数据库的url。user表示指定数据库的用户名。password表示指定数据库的密码。
JDBC的一个很大的优势就是截断了应用程序和底层数据库之间的联系。通过修改数据库的驱动和URL信息及其相关的驱动文件,就可以更换数据库。各种常见数据库的驱动和URL:
③向数据库发送SQL语句
建立数据库连接的目的是与数据库进行通信,实现方式为执行SQL语句,但Connection实例并不能执行SQL语句。此时需要通过Connection接口的createStatement()方法获取Statement对象。
④获取查询结果集
Statement接口的executeUpdate()方法或executeQuery()方法,可以执行SQL语句,executeUpdate()方法用于执行数据的插入、修改或删除操作。返回影响数据库记录的条数。executeQuery()方法用于执行SELECT查询语句,将返回一个ResultSet型的结果集。通过遍历查询结果集的内容,才可获取SQL语句执行的查询结果。
ResultSet对象具有指向当前数据行的光标。最初,光标被置于第一行之前。可以通过该对象的next()方法将光标移动到下一行;如果在ResultSet对象没有下一行时,next()方法返回false。所以可以在while循环使用next()方法迭代结果集。
ResultSet对象的getXXX()方法,可获取查询结果集中数据,由于ResultSet中保存的数据,以表的形式,因此可通过使用getXXX()方法,指定列的序号与列的名称来获取数据。
⑤关闭连接
在进行数据库访问时,Connection、Statement、ResultSet实例都会占用一定的系统资源。因此在每次访问数据库后,及时的释放这些对象占用的资源是一个很好的编程习惯。Connection、Statement、ResultSet实例都提供了close()方法用于释放对象占用的数据库和JDBC资源。
如果通过DriverManager类的getConnection()方法获取的Connection实例,那么通过关闭Connection实例,即可同时关闭Statement实例与ResultSet实例。当采用数据库连接池时,close()方法并没有释放Connection实例,而是将其放入连接池中,又可被其他连接调用。此时,如果没有调用Statement与ResultSet实例的close()方法。它们在Connection中会越来越多,虽然JVM(Java虚拟机)会定时的清理缓存,但当数据库连接达到一定数量时,清理不够及时,则会严重影响数据库和计算机的运行速度。