JDBC编程教程.docx
- 文档编号:4368584
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:86
- 大小:1.34MB
JDBC编程教程.docx
《JDBC编程教程.docx》由会员分享,可在线阅读,更多相关《JDBC编程教程.docx(86页珍藏版)》请在冰豆网上搜索。
JDBC编程教程
目录
目录1
第一部分JDBC简介2
1.1ODBC2
1.2JDBC2
1.3四种JDBC驱动类型3
第一代驱动:
JDBC-ODBC桥接驱动程序3
第二代驱动:
本地API驱动程序3
第三代驱动:
中间件驱动程序(网络协议驱动程序)3
第四代驱动:
本地纯Java驱动程序(推荐使用的一种类型)3
1.4应用程序、JDBCAPI、数据库驱动及数据库之间的关系图3
1.5JDBC进行数据库开发的接口3
1.6JDBC的工作流4
1.7JDBC访问数据库的六大步骤4
第二部分简单的JDBC编程及其简单封装4
2.1编写第一个JDBC程序4
2.2分析第一个jdbc程序的编写步骤5
2.3规范一点的jdbc程序6
作业6
第三部分JDBC编程的进一步封装及PreparedStatement预处理7
3.1使用properties配置文件进一步封装7
3.2使用xml文件进一步封装7
3.2.1xml相关知识介绍7
3.2.2使用DOM4J解析数据库的xml配置文件10
3.3PreparedStatement预处理13
第四部分全面掌握JDBC编程及其应用14
4.1简单理解一下三层架构14
4.2实现模拟用户的注册、登录、修改个人信息的程序14
作业16
4.3JDBC的事务处理17
4.4JDBC可滚动结果集介绍与使用18
4.5JDBC可更新的结果集介绍与使用18
4.6JDBC访问元数据19
4.7JDBC的批处理功能19
第一天
第一部分JDBC简介
在JDBC产生之前,主要是通过ODBC进行数据库的连接,因此介绍JDBC前,首先看看ODBC。
1.1ODBC
ODBC是OpenDatabaseConnect即开放式数据库互连的简称,它是由Microsoft公司于1991年提出的一个用于访问数据库的统一界面标准,是应用程序和数据库系统之间的中间件。
它通过使用相应的应用平台和所需的数据库对应的驱动程序与应用程序的交互实现对数据库的操作,避免了应用程序直接调用与数据库相关的操作,从而提高了数据库的独立性。
应用程序通过ODBC访问数据库的框图如下:
1.2JDBC
JDBC是JavaDatabaseConnectivity即Java数据库连接的简称,是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口使数据库开发人员能够用纯JavaAPI编写数据库应用程序。
同时,JDBC也是一个商标名,是一种规范。
应用程序通过JDBC访问数据库的框图如下:
JDBC的API有两个主要部分组成:
Java应用程序开发者的接口、JDBC驱动程序开发商实现的接口。
1.3四种JDBC驱动类型
第一代驱动:
JDBC-ODBC桥接驱动程序
由于ODBC产生的较早,所以早期的数据库都支持ODBC标准,而Java本身还不够强大,故当时各个厂商并未完全实现JDBC规范,只有通过JDBC-ODBC桥接器来与数据库通信;它每次都要把Java的调用转换成ODBC相关的协议、再与数据库通信,效率极其低下。
第二代驱动:
本地API驱动程序
本地API驱动,例如OCI驱动程序使用Java本地接口(JNI)把Java代码连接到数据库端API——为特定的平台和数据库编写的软件。
使用OracleOCI驱动程序要求必须安装标准的Oracle客户端软件并正确配置,Java通过JNI调用Oracle数据库中的数据。
显然,客户开发机器要求安装目标数据库的客户端程序,才能进行数据库访问;缺点:
每个客户机都要安装,过于麻烦!
第三代驱动:
中间件驱动程序(网络协议驱动程序)
实际上是根据三层结构建立的;JDBC先把对数据库的访问请求传递给网络上的中间件服务器,然后中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用传给数据库服务器,从而完成对数据库的访问。
第四代驱动:
本地纯Java驱动程序(推荐使用的一种类型)
通过数据库厂商提供的一个jar包来完成的。
1.4应用程序、JDBCAPI、数据库驱动及数据库之间的关系图
可见:
1)一个DriverManager可以管理多个Driver。
2)不同数据库的驱动程序是不同的。
1.5JDBC进行数据库开发的接口
1、JDBC进行数据库开发的接口主要在如下的两个包中(详见API文档)
1)java.sql.*:
主要功能的JDBC在Java2平台的标准版(J2SE)。
2)javax.sql.*:
扩展功能的Java2平台企业版(J2EE).
2、JDBC常用的几个接口和类
1)Driver;2)DriverManager;3)Connection;4)Statement;5)PreparedStatement;6)ResultSet;
7)DatabaseMetadata;8)ResultSetMetadata
1.6JDBC的工作流
从上述工作流我们不难得出如下的访问数据库的步骤
1.7JDBC访问数据库的六大步骤
第一步:
注册驱动
第二步:
创建连接(Connection)
第三步:
创建SQL语句(Statement)
第四步:
执行SQL语句,得到结果集(ResultSet)
第五步:
处理结果集
第六步:
释放资源
第二部分简单的JDBC编程及其简单封装
包的命名规范:
公司域名倒置.项目名称.模块名称.
例如:
2.1编写第一个JDBC程序
packagecn.edu.hzu.jdbc.day1;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.sql.Connection;
importjava.sql.Driver;
importjava.sql.DriverManager;
importjava.sql.SQLException;
publicclassTestJdbc1{
publicstaticvoidmain(String[]args)throwsSQLException,ClassNotFoundException{
//1、注册驱动
Driverdriver=neworacle.jdbc.driver.OracleDriver();
DriverManager.registerDriver(driver);
//2、创建连接(获得Connection对象)
Connectionconn=DriverManager.getConnection("jdbc:
oracle:
thin:
@localhost:
1521:
xe","root","root");
//3、创建SQL语句
Statementstmt=conn.createStatement();
//4、执行SQL语句,并返回结果集
ResultSetrs=stmt.executeQuery("selectstudentid,studentname,studentsexfromstudent");
//5、处理结果集
while(rs.next()){
System.out.println(rs.getObject
(1)+"\t"+rs.getObject
(2)+"\t"+rs.getObject(3));
}
//6、释放资源
rs.close();
stmt.close();
conn.close();
}
}
2.2分析第一个jdbc程序的编写步骤
1、三种注册驱动的方法
方法1
Driverdriver=neworacle.jdbc.driver.OracleDriver();
DriverManager.registerDriver(driver);
方法2:
System.setProperty("jdbc.drivers","oracle.jdbc.driver.OracleDriver:
com.jdbc.mysql.Driver");
方法3
Class.forName("oracle.jdbc.driver.OracleDriver");
2、对连接的处理
Stringurl="jdbc:
oracle:
thin:
@localhost:
1521:
xe";
Stringuser="root";
Stringpassword="root";
Connectionconn=DriverManager.getConnection(url,user,password);
3、释放资源
释放资源的顺序与创建的顺序正好相反,千万不要忘记了关闭连接,不然的话你的网站很快就会死掉的。
4、创建连接的时间尽量晚、释放资源要尽量的早。
2.3规范一点的jdbc程序
先创建一个工具类JdbcUtil,然后再在工具类的基础上进行jdbc连接数据库,详细内容参见文件JdbcUtil.java。
packagejdbc.utils;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
publicfinalclassJdbcUtil{
staticStringurl="jdbc:
oracle:
thin:
@localhost:
1521:
xe";
staticStringuser="root";
staticStringpassword="root";
publicJdbcUtil(){
}
static{
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
}
//创建连接
publicstaticConnectiongetConnection()throwsSQLException{
returnDriverManager.getConnection(url,user,password);
}
//释放资源
publicstaticvoidclose(ResultSetrs,Statementstmt,Connectionconn){
try{
if(rs!
=null)
rs.close();
}catch(SQLExceptione){
e.printStackTrace();
}finally{
try{
if(stmt!
=null)
stmt.close();
}catch(SQLExceptione){
e.printStackTrace();
}finally{
try{
if(conn!
=null)
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
}
}
publicstaticvoidclose(Objectobj){
if(objinstanceofResultSet){
try{
((ResultSet)obj).close();
}catch(SQLExceptione){
e.printStackTrace();
}
}elseif(objinstanceofStatement){
try{
((Statement)obj).close();
}catch(SQLExceptione){
e.printStackTrace();
}
}elseif(objinstanceofConnection){
try{
((Connection)obj).close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
}
}
作业
1、利用JdbcUtil类,完成对student表添加、更新和删除一条记录的程序。
2、用单例模式实现JdbcUtil工具类的封装。
MySQL的驱动名与URL
driverClassName=com.mysql.jdbc.Driver
url=jdbc:
mysql:
//localhost:
3306/epasys
2.4数据库连接池
1、创建连接池类,并提供得到连接和放回连接的方法等
packagehzu.jsj.day1.connpool;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
importjava.util.LinkedList;
publicclassDataConnectionPool{
privatestaticStringurl="jdbc:
oracle:
thin:
@localhost:
1521:
xe";
privatestaticStringuserName="root";
privatestaticStringpassword="root";
privatestaticintinitCount=5;
privatestaticintmaxCount=10;
privateintcurrentCount=0;
LinkedList
DataConnectionPool(){
try{
for(inti=1;i<=initCount;i++){
this.connectionsPool.addLast(this.createConnection());
this.currentCount++;
}
}catch(SQLExceptione){
thrownewExceptionInInitializerError(e);
}
}
privateConnectioncreateConnection()throwsSQLException{
returnDriverManager.getConnection(url,userName,password);
}
publicConnectiongetConnection()throwsSQLException{
synchronized(connectionsPool){
if(this.connectionsPool.size()>0)
returnthis.connectionsPool.removeFirst();
if(this.currentCount this.currentCount++; returnthis.createConnection(); } thrownewSQLException("已没有连接了! "); } } publicvoidclose(Connectionconn){ this.connectionsPool.addLast(conn); } } 2、工具类进行修改结果如下: packagehzu.jsj.day1.connpool; importjava.sql.Connection; importjava.sql.DriverManager; importjava.sql.ResultSet; importjava.sql.SQLException; importjava.sql.Statement; publicclassJdbcUtil{ privatestaticStringdriver="oracle.jdbc.driver.OracleDriver"; privatestaticDataConnectionPoolconnPool; privatestaticConnectionconn; privateJdbcUtil(){ } static{ try{ Class.forName(driver); connPool=newDataConnectionPool(); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } } publicstaticConnectiongetConnection()throwsSQLException{ conn=connPool.getConnection(); returnconn; } publicstaticvoidclose(){ connPool.close(conn); } publicstaticvoidmain(String[]args)throwsSQLException{ for(inti=1;i<12;i++) System.out.println(JdbcUtil.getConnection()); } } 3、工具类JdbcUtil的使用与原来一样没有什么变化,知识现在的JdbcUtil.close并没有真正的把连接关了,而是放回了数据库连接池。 第三部分JDBC工具类的进一步封装及PreparedStatement预处理 3.1基于properties配置文件的进一步封装 1、创建Dbconfig.properties文件,它是一个文本文件,以“key=value”的形式出现。 db_driver=oracle.jdbc.driver.OracleDriver db_url=jdbc: oracle: thin: @localhost: 1521: xe db_user=root db_password=root 2、创建ReadConfig类,用于读取Dbconfig.properties文件中的内容,再通过key获取value值。 要用到java.util.Properties类中的一些方法。 packagehzu.jsj.day2; importjava.io.IOException; importjava.util.Properties; publicclassReadConfig{ privatePropertiesproperty=newProperties(); privateStringpath="hzu/jsj/day2/Dbconfig.properties"; privatestaticReadConfigreadConfig=null; privateReadConfig(){ this.readConfig(); } privatevoidreadConfig(){ try{ property.load(ClassLoader.getSystemResourceAsStream(path)); }catch(IOExceptione){ e.printStackTrace(); } } publicStringgetValue(Stringkey){ returnproperty.getProperty(key); } publicstaticReadConfiggetIntance(){ if(readConfig==null){ synchronized(ReadConfig.class){ if(readConfig==null) readConfig=newReadConfig(); } } returnreadConfig; } publicstaticvoidmain(String[]args){ System.out.println(ReadConfig.getIntance().getValue("db_driver")); } } 3、创建数据库连接与关闭的JdbcUtil类,用于连接数据库和关闭连接。 packagehzu.jsj.day2; importjava.sql.Connection; importjava.sql.DriverManager; importjava.sql.ResultSet; importjava.sql.SQLException; importjava.sql.Statement; publicfinalclassJdbcUtil{ privatestaticStringdriver; privatestaticStringurl; privatestaticStringuserName; privatestaticStringpassword; privateJdbcUtil(){ } static{ try{ driver=ReadConfig.getIntance().getValue("db_driver"); url=ReadConfig.getIntance().getValue("db_url"); userName=ReadConfig.getIntance().getValue("username"); password=ReadConfig.getIntance().getValue("password"); Class.forName(driver); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JDBC 编程 教程