版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章JDBC连接数据库JDBC工作原理通过JDBC对数据库执行SQL语句基于数据源访问数据库高级开发技巧本章主要内容JDBC工作原理√通过JDBC对数据库执行SQL语句基于数据源访问数据库高级开发技巧JDBC为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。真正的数据库访问操作实现是由各自数据库厂商提供的。通常把厂商提供的特定于数据库的访问API称为数据库JDBC驱动程序。JDBC通过提供一个抽象的数据库接口,使得程序开发人员在编程时可以不用绑定在特定数据库厂商的API上,大大增加了应用程序的可移植性。在实际运行过程中程序代码通过JDBC访问数据库时,仍旧需要调用特定于数据库的访问API!!!JDBC访问数据库层次结构
要使服务器上的J2EE应用能够通过JDBC访问数据库,必须将JDBC驱动程序添加到应用服务器的JVM可以访问到的目录下。对于Jboss服务器,可以将数据库的JDBC驱动拷贝到Jboss安装目录下的server\all\lib子目录下。创建数据库连接,分为以下几步:首先注册数据库驱动程序。Class.forName(“org.git.mm.mysql.Driver”);然后根据具体的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.Connection
conn;java.lang.String
strConn;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接口注意:继承了Statement接口中所有方法的PreparedStatement
接口也有自己的executeQuery、executeUpdate
和execute方法。Statement对象本身不包含SQL语句,因而必须给Statement.execute
方法提供SQL语句作为参数。PreparedStatement
对象并不将SQL语句作为参数提供给这些方法,因为它们已经包含预编译SQL语句。CallableStatement
对象继承这些方法的PreparedStatement
形式。对于这些方法的PreparedStatement
或CallableStatement
版本,使用查询参数将抛出SQLException。PreparedStatement接口PreparedStatement
实例包含已编译的SQL语句,这也是将其命名冠以“Prepared”的原因。包含于PreparedStatement
对象中的SQL语句可具有一个或多个IN参数。IN参数的值在SQL语句创建时未被指定。相反的,该语句为每个IN参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前通过适当的setXXX()方法来提供。由于PreparedStatement
对象已预编译过,所以其执行速度要快于Statement对象。因此多次执行的SQL语句经常创建为PreparedStatement
对象,以提高效率。ResultSet接口ResultSet对象代表SQL语句的执行结果集,它包含符合SQL语句中条件的所有行。对于SQL语句执行结果的操作,实质上是对ResultSet对象的操作。Result维护指向其当前数据行的光标。每调用一次next()方法,光标向下移动一行,最初光标位于第一行之前。方法getxxx()提供了获取当前行中某列值的途径。Statement对象执行完毕后,将由Java垃圾收集程序自动关闭,而作为一种好的编程风格,应在不需要Statement对象时显示关闭。<%@pagecontentType="text/html;charset=gb2312"%><%java.sql.Connection
conn;java.lang.String
strConn;java.sql.Statement
sqlStmt;//语句对象java.sql.ResultSet
sqlRst;//结果集对象try{Class.forName("org.gjt.mm.mysql.Driver").newInstance();conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/sample","root","");sqlStmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);//执行Sql语句StringsqlQuery="selectcustomerid,address,phonefromcustomer";sqlRst=sqlStmt.executeQuery(sqlQuery);%><center>顾客信息表</center><tableborder="1"width="100%"bordercolorlight="#CC99FF"cellpadding="2"bordercolordark="#FFFFFF"cellspacing="0"><tr><tdalign="center"> ID</td><tdalign="center">地址</td><tdalign="center">电话</td></tr><%while(sqlRst.next()){//取得下一条记录%><tr><!--显示记录--><td><%=sqlRst.getString("customerid")%></td><td><%=newString(sqlRst.getString("address").getBytes("iso-8859-1"))%></td><td><%=sqlRst.getString("phone")%></td></tr><%}%></table><%//关闭结果集对象
sqlRst.close();
//关闭语句对象
sqlStmt.close();
//关闭数据库连接
conn.close();}catch(java.sql.SQLExceptione){out.println(e.toString());}%>执行带参数的SQL语句<!DOCTYPEHTMLPUBLIC"-//w3c//dtdhtml4.0transitional//en"><html><head><title>查询条件</title></head><bodybgcolor="#FFFFFF"><formaction="searchResult.jsp"method="post"><label>顾客姓氏:</label><inputname="parm"value=""></input><inputtype="submit"name="Submit2"value="提交"><inputtype="reset"name="Submit"value="清空"></form></body></html><%@pagecontentType="text/html;charset=gb2312"%><%java.sql.Connection
conn;java.lang.String
strConn;java.sql.PreparedStatement
preparedStmt;//语句对象java.sql.ResultSet
sqlRst;//结果集对象try{Class.forName("org.gjt.mm.mysql.Driver").newInstance();conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/sample","root","");preparedStmt=conn.prepareStatement("select
customerid,firstname,lastname,addressfromcustomerwherefirstnamelike?");Stringparm=request.getParameter("parm");preparedStmt.setString(1,"%"+parm+"%");sqlRst=preparedStmt.executeQuery();%><center>顾客信息表</center><tableborder="1"width="100%"bordercolorlight="#CC99FF"cellpadding="2"bordercolordark="#FFFFFF"cellspacing="0"><tr><tdalign="center"> ID</td><tdalign="center">地址</td><tdalign="center">姓名</td></tr><%while(sqlRst.next()){//取得下一条记录Stringname=newString(sqlRst.getString("firstname").getBytes("iso-8859-1"));name+=newString(sqlRst.getString("lastname").getBytes("iso-8859-1"));%><tr><!--显示记录--><td><%=sqlRst.getString("customerid")%></td><td><%=newString(sqlRst.getString("address").getBytes("iso-8859-1"))%></td><td><%=name%></td></tr><%}%></table><%//关闭结果集对象
sqlRst.close();//关闭语句对象
preparedStmt.close();//关闭数据库连接
conn.close();}catch(java.sql.SQLExceptione){out.println(e.toString());}%>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.RARDeployment"name="jboss.jca:service=LocalTxDS,name=MySqlDS"><attributename="JndiName">MySqlDS</attribute><attributename="ManagedConnectionFactoryProperties"><properties><config-propertyname="ConnectionURL"type="java.lang.String">jdbc:mysql://localhost:3306/sample</config-property><config-propertyname="DriverClass"type="java.lang.String">org.gjt.mm.mysql.Driver</config-property><!--settheseonlyifyouwantonlydefaultlogins,notthroughJAAS--><config-propertyname="UserName"type="java.lang.String">root</config-property><config-propertyname="Password"type="java.lang.String"></config-property></properties></attribute><dependsoptional-attribute-name="OldRarDeployment">jboss.jca:service=RARDeployment,name=JBoss
LocalTransactionJDBCWrapper</depends></mbean>…….try{javax.naming.InitialContext
ctx=new
javax.naming.InitialContext();
javax.sql.DataSource
ds=(javax.sql.DataSource)ctx.lookup("java:/MySqlDS");
conn=ds.getConnection();preparedStmt=conn.prepareStatement("select
customerid,address,phonefromcustomerwherefirstnamelike?");//设置参数Stringparm=request.getParameter("parm");preparedStmt.setString(1,"%"+parm+"%");//执行Sql语句sqlRst=prepar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 舟桥工安全知识宣贯能力考核试卷含答案
- 露天矿物开采辅助工岗前工作能力考核试卷含答案
- 2025-2026学年古诗说课稿《春望》
- 家用电子产品维修工跨界整合竞赛考核试卷含答案
- 2025-2026学年夜莺的歌声说课稿
- 2025-2026学年儿歌与童话说课稿
- 四川省资阳市2025-2026学年八年级上学期11月期中物理试题(含答案)
- 2026年稻谷种植行业市场运行态势报告及未来五至十年第二曲线与持续增长
- 2026年汽车新车零售行业趋势报告及未来五至十年新质生产力与高质量发展
- 档案管理总体方案
- 2026年秋国开电大形势与政策大作业答案
- 吸入性肺炎诊断和治疗中国专家共识(2025版)
- 2026年黑龙江省齐齐哈尔市中考英语试卷附答案
- 2027届新高考语文热点精准复习 古诗鉴赏:+比较鉴赏+知同辨异
- 职场动物进化手册
- 超星尔雅学习通《工程伦理(浙江大学)》2025章节测试答案
- 七年级上册英语阅读还原50题含答案
- 《干部履历表》(1999版电子版)
- 铁路机车车辆驾驶人员(J5类)考试题库大全-上(单选题)
- 生态文明建设理论与实践智慧树知到期末考试答案章节答案2024年东北林业大学
- 三级围岩爆破设计
评论
0/150
提交评论