收藏 分享(赏)

第七章-jdbc连接数据库.ppt

上传人:天天快乐 文档编号:1101264 上传时间:2018-06-11 格式:PPT 页数:37 大小:138.50KB
下载 相关 举报
第七章-jdbc连接数据库.ppt_第1页
第1页 / 共37页
第七章-jdbc连接数据库.ppt_第2页
第2页 / 共37页
第七章-jdbc连接数据库.ppt_第3页
第3页 / 共37页
第七章-jdbc连接数据库.ppt_第4页
第4页 / 共37页
第七章-jdbc连接数据库.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、第七章 JDBC连接数据库,JDBC工作原理 通过JDBC对数据库执行SQL语句 基于数据源访问数据库 高级开发技巧,本章主要内容,JDBC工作原理 通过JDBC对数据库执行SQL语句 基于数据源访问数据库 高级开发技巧,JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。真正的数据库访问操作实现是由各自数据库厂商提供的。通常把厂商提供的特定于数据库的访问API称为数据库JDBC驱动程序。JDBC通过提供一个抽象的数据库接口,使得程序开发人员在编程时可以不用绑定在特定数据库厂商的API上,大大增加了应用程序的可移植性。在实际运行

2、过程中程序代码通过JDBC访问数据库时,仍旧需要调用特定于数据库的访问API!,JDBC访问数据库层次结构,要使服务器上的J2EE应用能够通过JDBC访问数据库,必须将JDBC驱动程序添加到应用服务器的JVM可以访问到的目录下。对于tomcat服务器,可以将数据库的JDBC驱动拷贝到tomcat安装目录下的commonlib子目录下。,创建数据库连接,分为以下几步:首先注册数据库驱动程序。Class.forName(“org.git.mm.mysql.Driver”);然后根据具体的JDBC URL地址,调用DriverManager对象的getConnection()来获取一个代表数据库连接

3、的java.sql.connectuion对象。,JDBC URL 的格式如下:jdbc:子协议:数据库定位器。,MySQL数据库:jdbc:mysql:/机器名/数据库名Oracle数据库:jdbc:oracle:thin机器名:端口名:数据库名,给定具体的JDBC URL,获取数据库连接的方法是在DriverManager对象上调用getConnection()。这种方法有两种形式:DriverManager.getConnection(url)DriverManager.getConnection(url,user,password)其中第二种方式需要输入用户名和密码信息进行身份认证。,

4、程序71:test.jsp 连接Mysql数据库成功!,数据库连接测试,JDBC工作原理 通过JDBC对数据库执行SQL语句 基于数据源访问数据库 高级开发技巧,java.sql.Statement 对象代表一条发送到数据库执行的SQL语句。有三种 Statement 对象:Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库存储过程的调用。,Statement接口,注意:继承了Statement 接口中所有方法的 PreparedStateme

5、nt 接口也有自己的 executeQuery、executeUpdate 和 execute 方法。Statement 对象本身不包含 SQL 语句,因而必须给 Statement.execute 方法提供 SQL 语句作为参数。PreparedStatement 对象并不将 SQL 语句作为参数提供给这些方法,因为它们已经包含预编译 SQL 语句。CallableStatement 对象继承这些方法的 PreparedStatement 形式。对于这些方法的 PreparedStatement 或 CallableStatement 版本,使用查询参数将抛出 SQLException。,P

6、reparedStatement接口,PreparedStatement 实例包含已编译的 SQL 语句,这也是将其命名冠以“Prepared”的原因。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN 参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前通过适当的 setXXX() 方法来提供。 由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此多次执行的 SQL 语句经常创建为 PreparedS

7、tatement 对象,以提高效率。,ResultSet接口,ResultSet对象代表SQL语句的执行结果集,它包含符合SQL语句中条件的所有行。对于SQL语句执行结果的操作,实质上是对ResultSet对象的操作。Result维护指向其当前数据行的光标。每调用一次next()方法,光标向下移动一行,最初光标位于第一行之前。方法getxxx()提供了获取当前行中某列值的途径。Statement对象执行完毕后,将由Java垃圾收集程序自动关闭,而作为一种好的编程风格,应在不需要Statement对象时显示关闭。, ,顾客信息表 ID 地址 电话 ,执行带参数的SQL语句,查询条件顾客姓氏: ,

8、 ,顾客信息表 % ,JDBC工作原理 通过JDBC对数据库执行SQL语句 基于数据源访问数据库 高级开发技巧,数据源是在JDBC 2.0中引入的一个概念。在JDBC 2.0扩展包中定义了javax.sql.DataSource接口来描述数据源的概念。如果用户希望建立一个数据库连接,通过查询在JNDI(Java Naming and Directory Interface)服务中的数据源,可以从数据源中获取相应的数据库连接。这样程序开发人员就只需要获取一个逻辑名称,而不是数据库登录的具体细节,这样代码的移植能力就更强。,Server.xml(tomcat5.0) factory org.apa

9、che.catalina.users.MemoryUserDatabaseFactory , pathname conf/tomcat-users.xml maxWait 5000 maxActive 100 password 123 , url jdbc:mysql:/localhost:3306/dacop driverClassName com.mysql.jdbc.Driver maxIdle 2 username root ,Context.xml(tomcat6.0) WEB-INF/web.xml - -, ,Web.xml Oracle Datasource example j

10、dbc/mysql javax.sql.DataSource Container 注:1.在tomcat 5.5以后的版本不写也可以 2.驱动程序需放在服务器lib目录下,tryjavax.naming.InitialContext ctx = new javax.naming.InitialContext(); javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(java:/MySqlDS); conn = ds.getConnection();preparedStmt =conn.prepareStatement(sele

11、ct customerid,address,phone from customer where firstname like ? );/设置参数String parm= request.getParameter(parm);preparedStmt.setString(1, %+parm+%);/执行Sql语句 sqlRst=preparedStmt.executeQuery (); %,程序76:test2.jsp(片段),JDBC工作原理 通过JDBC对数据库执行SQL语句 基于数据源访问数据库 高级开发技巧,BLOB字段的处理,/执行Sql语句 sqlRst=Stmt.executeQu

12、ery ( SQLString); while(sqlRst.next()java.sql.Blob blob=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();,程序77:ShowImage.java(片段),/添加图片到数据库javax.naming.Initial

13、Context ctx = new javax.naming.InitialContext();javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(java:/MySqlDS); conn = ds.getConnection();String filelocation =request.getParameter(file);File files = new File(filelocation); FileInputStream fis=new FileInputStream(files); preparedStmt = co

14、nn.prepareStatement( INSERT INTO album (name,data) +VALUES (?, ?); /预编译SQL语句 preparedStmt.setString(1, request.getParameter(name); preparedStmt.setBinaryStream(2, fis,(int)files.length(); preparedStmt.executeUpdate(); fis.close(); preparedStmt.close (); conn.close();,分页显示代码片段,0)sqlRst.absolute(intPage-1) * intPageSize + 1);i = 0;while(i,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报