JDBC连接数据库

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第七章JDBC连接数据库一.JDBC工作原理二.通过JDBC对数据库执行SQL语句三.基于数据源访问数据库四.高级开发技巧本章主要内容一.JDBC工作原理√二.通过JDBC对数据库执行SQL语句三.基于数据源访问数据库四.高级开发技巧JDBC为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。真正的数据库访问操作实现是由各自数据库厂商提供的。通常把厂商提供的特定于数据库的访问API称为数据库JDBC驱动程序。JDBC通过提供一个抽象的数据库接口,使得程序开发人员在编程时可以不用绑定在特定数据库厂商的API上,大大增加了应用程序的可移植性。在实际运行过程中程序代码通过JDBC访问数据库时,仍旧需要调用特定于数据库的访问API!!!JDBC接口层JDBC驱动层J2EE应用JDBCAPI数据库JDBC驱动程序数据库程序员开发Sun数据库厂商应用层JDBC访问数据库层次结构创建数据库连接,分为以下几步:首先注册数据库驱动程序,然后根据具体的JDBCURL地址,调用DriverManager对象的getConnection()来获取一个代表数据库连接的java.sql.connectuion对象。JDBCURL的格式如下:jdbc:子协议:数据库定位器。MySQL数据库:jdbc:mysql://机器名/数据库名Oracle数据库:jdbc:oracle:thin@机器名:端口名:数据库名给定具体的JDBCURL,获取数据库连接的方法是在DriverManager对象上调用getConnection()。这种方法有两种形式:DriverManager.getConnection(url)DriverManager.getConnection(url,user,password)其中第二种方式需要输入用户名和密码信息进行身份认证。程序7-1:test.jsp%@pagecontentType=text/html;charset=gb2312%%java.sql.Connectionconn;java.lang.StringstrConn;try{Class.forName(org.gjt.mm.mysql.Driver).newInstance();conn=java.sql.DriverManager.getConnection(jdbc:mysql://localhost/test,root,);%连接Mysql数据库成功!%}catch(java.sql.SQLExceptione){out.println(e.toString());}%数据库连接测试一.JDBC工作原理二.通过JDBC对数据库执行SQL语句√三.基于数据源访问数据库四.高级开发技巧java.sql.Statement对象代表一条发送到数据库执行的SQL语句。有三种Statement对象:Statement对象用于执行不带参数的简单SQL语句;PreparedStatement对象用于执行带或不带参数的预编译SQL语句;CallableStatement对象用于执行对数据库存储过程的调用。注意:继承了Statement接口中所有方法的PreparedStatement接口也有自己的executeQuery、executeUpdate和execute方法。Statement对象本身不包含SQL语句,因而必须给Statement.execute方法提供SQL语句作为参数。PreparedStatement对象并不将SQL语句作为参数提供给这些方法,因为它们已经包含预编译SQL语句。CallableStatement对象继承这些方法的PreparedStatement形式。对于这些方法的PreparedStatement或CallableStatement版本,使用查询参数将抛出SQLException。PreparedStatement实例包含已编译的SQL语句,这也是将其命名冠以“Prepared”的原因。包含于PreparedStatement对象中的SQL语句可具有一个或多个IN参数。IN参数的值在SQL语句创建时未被指定。相反的,该语句为每个IN参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前通过适当的setXXX()方法来提供。由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象。因此多次执行的SQL语句经常创建为PreparedStatement对象,以提高效率。一.JDBC工作原理二.通过JDBC对数据库执行SQL语句三.基于数据源访问数据库√四.高级开发技巧数据源是在JDBC2.0中引入的一个概念。在JDBC2.0扩展包中定义了javax.sql.DataSource接口来描述数据源的概念。如果用户希望建立一个数据库连接,通过查询在JNDI(JavaNamingandDirectoryInterface)服务中的数据源,可以从数据源中获取相应的数据库连接。这样程序开发人员就只需要获取一个逻辑名称,而不是数据库登录的具体细节,这样代码的移植能力就更强。属性名称属性数据类型描述databaseNameString数据库名称,即数据库的SIDdataSourceNameString数据源接口实现类的名称。descriptionString对数据源的描述。networkProtocolString和服务器通讯使用的网络协议名。passwordString用户登录密码。portNumberInt数据库服务器使用的端口,缺省值为1521。serverNameString数据库服务器名称。userString用户登录名。程序7-5:mysql-service.xml(片段)……mbeancode=org.jboss.resource.connectionmanager.RARDeploymentname=jboss.jca:service=LocalTxDS,name=MySqlDSattributename=JndiNameMySqlDS/attributeattributename=ManagedConnectionFactoryPropertiespropertiesconfig-propertyname=ConnectionURLtype=java.lang.Stringjdbc:mysql://localhost:3306/sample/config-propertyconfig-propertyname=DriverClasstype=java.lang.Stringorg.gjt.mm.mysql.Driver/config-property!--settheseonlyifyouwantonlydefaultlogins,notthroughJAAS--config-propertyname=UserNametype=java.lang.Stringroot/config-propertyconfig-propertyname=Passwordtype=java.lang.String/config-property/properties/attribute!--Belowhereareadvancedproperties--!--hack--dependsoptional-attribute-name=OldRarDeploymentjboss.jca:service=RARDeployment,name=JBossLocalTransactionJDBCWrapper/depends/mbean…….try{javax.naming.InitialContextctx=newjavax.naming.InitialContext();javax.sql.DataSourceds=(javax.sql.DataSource)ctx.lookup(java:/MySqlDS);conn=ds.getConnection();preparedStmt=conn.prepareStatement(selectcustomerid,address,phonefromcustomerwherefirstnamelike?);//设置参数Stringparm=request.getParameter(parm);preparedStmt.setString(1,%+parm+%);//执行Sql语句sqlRst=preparedStmt.executeQuery();%程序7-6:test2.jsp(片段)一.JDBC工作原理二.通过JDBC对数据库执行SQL语句三.基于数据源访问数据库四.高级开发技巧√BLOB字段的处理//执行Sql语句sqlRst=Stmt.executeQuery(SQLString);while(sqlRst.next()){java.sql.Blobblob=sqlRst.getBlob(data);byte[]ab=blob.getBytes(1,(int)blob.length());response.setContentType(image/gif);response.reset();op.write(ab);op.flush();op.close();}Stmt.close();conn.close();程序7-7:ShowImage.java(片段)分页显示代码片段%if(intPageCount0){sqlRst.absolute((intPage-1)*intPageSize+1);i=0;while(iintPageSize&&!sqlRst.isAfterLast()){Stringnames=sqlRst.getString(1);Stringpassword=sqlRst.getString(2);%trwidthtdwidth=50%%=names%/tdtdwidth=50%%=password%/tdtr%sqlRst.next();i++;}}%

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功