版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LOGO1模版来源于网络,禁止用于商业用途WEB 数据库操作J2EE框架及应用开发技术之LOGO2第一节正文目标与重点目标与重点目标:JSP中使用JDBC访问数据库重点:JDBC组件技术的基本结构与原理 掌握JDBC访问数据库的基本步骤 掌握JDBC的常用接口和方法LOGO3第一节正文 JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力Java应用程序应用程序JDBCJDBCJSP/Servlet客户端客户端数据库服务器数据库服务器应用服务器应用服务器数据库服务器数据库服务器客户端客户端JDBCJDBC简介简介LOGO4第一节正文 JDBC API DriverManager
2、类 Connection接口 Statement接口 ResultSet接口 DriverManager 作用:载入各种不同的JDBC驱动 JDBC 驱动 作用:负责连接各种不同的数据库JDBC API JDBC Driver Manager JDBC 驱动驱动 JDBC 驱动驱动 Java 应用程序应用程序 JDBCJDBC常用接口常用接口LOGO5第一节正文 JDBC API可做三件事:与数据库建立连接、执行SQL 语句、处理结果ConnectionDriverManagerStatementResultSet DriverManager :依据数据库的不同,管理:依据数据库的不同,管理J
3、DBC驱动驱动 Connection :负责连接数据库并担任传送数据的任务:负责连接数据库并担任传送数据的任务 Statement :由由 Connection 产生、负责执行产生、负责执行SQL语句语句 ResultSet:负责保存:负责保存Statement执行后所产生的查询结果执行后所产生的查询结果客户端客户端数据库服务器数据库服务器1234LOGO6JDBC简介l JDBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构成的API。l J2SE的一部分,由java.sql, javax.sql包组成。LOGO7ODBC数据库数据库客户机/
4、服务器 GUI应用程序ODBC(开放式数据库连接)(Microsoft 提供)插 入删 除修 改应用程序编程接口 查询 LOGO8JDBCJDBC(Java 数据库连接)(sun公司提供)Java 应用程序编程接口Java应用程序数据库数据库 插 入修 改删 除查询 LOGO9JDBC驱动的类型JDBC 驱动程序的类型 JDBC-ODBC桥驱动程序及桥驱动程序及ODBC驱动程序驱动程序 本地本地API部分部分Java驱动程序驱动程序 JDBC-Net 纯纯Java驱动程序驱动程序 本地协议纯本地协议纯Java驱动程序驱动程序 LOGO10JDBC体系结构 Java 程序 JDBC 驱动程序数据
5、库数据库SQL 命令 结果 LOGO11JDBC体系结构应用层应用层 Driver StatementResultSet Connection 各接口驱动层驱动层 LOGO12JDBC APIJDBC API由两个部分组成:l 一个是核心的API,其类包路径为java.sql,这是J2SE的一部分,它具有可滚动的结果集,批量更新的实现类;l 二是扩展的API,其类包路径为javax.sql,这是J2EE的一部分。LOGO13JDBCJDBC APIAPI(常用)(常用)l java.sql.DriverManager:完成驱动程序的装载和建立新的数据库连接。 l java.sql.Connec
6、tion:表示对某一指定数据库的连接。 l java.sql.Statement:管理在一指定数据库连接上的SQL语句的执行。 l java.sql.ResultSet:一个select语句的执行结果。l java.sql.PreparedStatement:继承了Statement接口,用于对预编译的SQL语句的执行。l java.sql.CallableStatement:继承了Statement接口,用于对一个数据库存储过程的执行。l java.sql.SQLException:处理数据库访问时的出错信息。 LOGO14Connection对象l通过Connection连接对象可以获取S
7、tatement语句对象,或者PreparedStatement语句对象;l通过Statement或PreparedStatement语句对象就可以对数据库进行查询和更新操作;LOGO15Connection对象(续)lConnection常用的方法有以下几种。close():完成关闭连接。:完成关闭连接。commit() :完成提交。:完成提交。rollback() :完成回滚。:完成回滚。LOGO16Connection对象(续)l createStatement():该方法返回Statement对象。l prepareStatement(String sql):参数sql是执行 SQL的
8、语句,该方法返回PrepareStatement对象。l setAutoCommit(Boolean autoCommit):参数autoCommit表示是否自动提交,该方法用于设置自动提交。LOGO17Statement对象l 执行操作数据库的过程是,通过Connection连接对象获取Statement对象,再通过Statement对象执行相关读取或更新操作。l Statement对象还有两种具体实现,分别为PreparedStatement和CallableStatement。l PreparedStatement主要是用来预编译SQL语句,这个对象主要是为了提高程序效率;l Calla
9、bleStatement继承了PreparedStatement接口,用于执行存储过程。LOGO18Statement对象l Statement对象是通过Connection对象的createStatement()方法来创建的。对于不是频繁查询记录的应用而言,使用Statement对象是一个合适的做法,因为它不必像PreparedStatement对象一样,需要预编译。Statement对象的创建过程如下所示:LOGO19Statement对象String URL = String URL = jdbc:mysql:/localhost:3306/bank?username=root&
10、password=rootjdbc:mysql:/localhost:3306/bank?username=root&password=rootConnection conn=DriverManager.getConnection(URL);Connection conn=DriverManager.getConnection(URL);/获取到数据库的连接对象。Statement st = conn. createStatement();Statement st = conn. createStatement();/获取Statement语句对象。LOGO20Statement对象的
11、常用方法lStatement对象的常用方法如下。 close():完成关闭Statement。 executeQuery(String sql):参数sql表示查询SQL语句,该方法返回ResultSet对象。LOGO21Statement对象的常用方法l executeUpdate(String sql):参数sql表示操作SQL语句,该方法返回更新的行数。l execute(String sql):参数sql表示操作SQL语句,该方法返回一个boolean值,表明是否返回了ResultSet对象。l getResultSet():该方法返回ResultSet对象,通常与execute配合使
12、用。LOGO22Statement常用方法举例1. . executeQueryexecuteQuery()()方法 主要是用来执行查询命令,返回一个ResultSet对象,代码如下所示:String sql = “select * from user”;ResultSet rs = statement.executeQuery(sql); 这个示例代码是查询user表的所有数据。LOGO23 2. execute()方法 主要是用来执行一般的SQL命令,包括增删改查以及数据定义,返回一个布尔值,它显示了是否返回一个查询结果集ResultSet对象,查询user表的所有数据代码如下所示: St
13、ring sql = “select String sql = “select * * from user”; from user”; boolean value = statement. execute(sql);boolean value = statement. execute(sql); ResultSetResultSet rs=statement.getResultSet();rs=statement.getResultSet();LOGO24使用PreparedStatement对象PreparedStatement接口(预编译的 SQL 语句)PreparedStatement
14、 用于提高运行时效率执行 PreparedStatement 对象比执行 Statement 对象快Statement 接口接口LOGO25PreparedStatement 对象l PreparedStatement对象是通过Connection对象的prepareStatement ()方法来创建。l PrepareStatement(String sql)方法的参数需要输入所要执行的SQL语句。l 该SQL语句可以是一个参数化的SQL语句,且参数位置用“?”代替,然后根据参数的序号位置,分别调用不同类型的set方法将参数值动态输入。l 如:String sql=“select * fro
15、m users where userid=?”LOGO26l PreparedStatement是预编译的。l 所谓预编译,就是在创建语句对象时,将SQL执行语句一起进行编译,然后写入缓存,只保留参数动态输入。这样在执行相同的数据库操作时(如查询某条记录的信息),不必总是对查询SQL命令进行编译,而只是修改相应的参数,例如根据某个标识查询记录,就能获得查询结果,达到了提高效率的目的。PreparedStatement 对象LOGO27l PreperedStatement(从Statement扩展而来)相对Statement的优点:1.没有SQL注入的问题。2.Statement会使数据库频繁
16、编译SQL,可能造成数据库缓冲区溢出。3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。 LOGO28PreparedStatement对象的常用方法l close():该方法完成关闭Statement。l executeQuery():该方法输出ResultSet对象。l executeUpdate():该方法输出数据更新的行数。LOGO29l execute():该方法输出boolean值,表明是否返回了ResultSet对象。l setBoolean(int paramIndex, boolean x):参数paramInd
17、ex表示所传递的参数序号,参数x表示传递的是布尔类型参数值。l setByte(int paramIndex, byte x):参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个字节型参数值。PreparedStatement对象的常用方法LOGO30l setShort(int paramIndex, short x):参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个短整型参数值。l setInt(int paramIndex, int x) :参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个整型参数值。Prepar
18、edStatement对象的常用方法LOGO31l setLong(int paramIndex, long x) :参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个长整型参数值。l setFloat(int paramIndex, float x) :参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个浮点型参数值。PreparedStatement对象的常用方法LOGO32l setDouble(int paramIndex, double x) :参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个双精度型参数值。l
19、setBytes(int paramIndex, byte x) :参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个字节数字参数值。PreparedStatement对象的常用方法LOGO33l setDate(int paramIndex, java.sql.Date x) :参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个日期类型参数值。l setTime(int paramIndex, java.sql.Time x) :参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个时间参数值。PreparedStateme
20、nt对象的常用方法LOGO34lsetObject(int paramIndex, Object x) :参数paramIndex表示所传递的参数序号,参数x表示该方法传递的参数值是一个对象。PreparedStatement对象的常用方法LOGO35ResultSet对象lResultSet对象用于保存数据库的查询结果集。lResultSet对象通常可以通过一个Statement对象,或PreparedStatement对象及一些其他子接口对象的executeQuery()方法获得。LOGO36ResultSet对象l 在JDBC1.0中,结果集只能单向的滚动,即调用ResultSet的ne
21、xt()方法,使游标向后一行记录滚动。所谓滚动,指的是游标在记录行中的定位。l 在JDBC2.0中,扩展了上述滚动功能。使得滚动方式更加灵活和可操控。例如,JDBC2.0增加了前滚,即游标向当前记录的前一行滚动,及向某一指定的记录行跳转等。LOGO37结果集q ResultSet 对象完全依赖于 Statement 对象和 Connection 对象q 每次执行 SQL 语句时,都会用新的结果重写结果集q 当相关的 Statement 关闭时,ResultSet 对象会自动关闭Next( )get()此方法将光标从当前位置下移一行 从 ResultSet 对象返回数据 LOGO38q 它演示对
22、当前行的处理q 使用 next() 方法时,记录是按顺序处理的q 必须按照数据返回的顺序处理每行中的数据ResultSet rset = stmt.getResultSet();while(rset.next() String dept_name = rset.getString(1);LOGO39q 演示对当前列的处理q 使用 get() 方法可以直接访问列Statement stmt = con.createStatement();stmt.executeQuery(Select emp_id, fname from Employee);ResultSet rset = stmt.getR
23、esultSet();while(rset.next() String employeeid = rset.getString (1);q 以下代码显示值 1 被作为参数传递给 getString() 方法, 这实际上指列 emp_id 的索引LOGO40JDBC访问步骤开 始导入 java.sql包 加载并注册驱动程序创建一个 Connection 对象创建一个 Statement 对象执行语句关闭ResultSet 对象关闭Statement对象关闭连接结 束使用ResultSet对象LOGO41注册驱动l Class.forName(“com.mysql.jdbc.Driver”);推荐
24、这种方式,不会对具体的驱动类产生依赖。l DriverManager.registerDriver(com.mysql.jdbc.Driver);会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。l System.setProperty(“jdbc.drivers”, “driver1:driver2”);虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。 l 驱动类型(四种类型)LOGO42建立连接(Connection)lConnection conn = DriverManager.getConnection(url, user, passwo
25、rd);lurl格式:JDBC:子协议:子名称/主机名:端口/数据库名?属性名=属性值&luser,password可以用“属性名=属性值”方式告诉数据库;l其他参数如:useUnicode=true&characterEncoding=GBK。LOGO43创建执行SQL的语句l 使用Statement对象 String sql=select * from table_name where col_name=value”; Statement st = conn.createStatement(); st.executeQuery(sql);l 使用PreparedStatem
26、ent对象String sql = “select * from table_name where col_name=?”; PreparedStatement ps = onn.preparedStatement(sql); ps.setString(1, “col_value”); ps.executeQuery();LOGO44处理执行结果(ResultSet)ResultSet rs = statement.executeQuery(sql);while(rs.next()rs.getString(“col_name”);rs.getInt(“col_name”);/LOGO45释放资
27、源l 释放ResultSet, Statement,Connection.l 数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。l Connection的使用原则是尽量晚创建,尽量早的释放。LOGO46使用Statement进行数据库操作SQL 查询字符串 executeQuery() 方法 作为参数传递ResultSet 返回查询数据SELECT name, email, phone FROM colleagues;使用 SQL 语句,查询可编写为:String str = SELECT emp_id, lnam
28、e, fname FROM colleagues;Statement stmt = con.createStatement();ResultSet rset = stmt.executeQuery(str);使用 JDBC 编写此查询,则代码为:Statement接口接口LOGO47基本的CRUD(创建、读取、更新、删除) l 模板代码 Connection conn = null;Statement st=null;ResultSet rs = null; /查询时需要try /获得Connection/创建Statement/处理查询结果ResultSetcatch(Exception e
29、) /处理异常 finally /释放资源ResultSet, Statement,ConnectionLOGO48创建l 增加对应SQL的INSERT,返回增加成功的行(记录)数 conn = getConnection();/获取数据库连接Statement st = conn.createStatement();String sql=“insert into user(name, age,regist_date )” + “values(name, 10, now()”;int i = st.executeUpdate(sql);/i为插入的记录数LOGO49读 取l 读取(查询)对应S
30、QL的SELECT,返回查询结果conn = getConnection();Statement st = conn.createStatement();String sql = select id, name, age,regist_date from user;ResultSet rs = st.executeQuery(sql);while (rs.next() System.out.print(rs.getInt(id) + tt );System.out.print(rs.getString(name) + tt );System.out.print(rs.getInt(age) +
31、 tt );System.out.print(rs.getTimestamp(regist_date) + tt );System.out.println(); /换行LOGO50更 新l 更新(修改)对应SQL的UPDATE,返回被修改的行(记录)数 conn = getConnection();Statement st = conn.createStatement();String sql=“update person set name=new name”;int i = st.executeUpdate(sql);/i为符合条件的记录数LOGO51删除l 删除对应SQL的DELETE,返
32、回被删除的行(记录)数 conn = getConnection();Statement st = conn.createStatement();String sql=“delete from user where id=1”;int i = st.executeUpdate(sql);/i为删掉的记录数LOGO52CRUD总结l 增、删、改用executeUpdate方法(或excute方法)来完成,返回整数(匹配的记录数),这类操作相对简单。l 查询用executeQuery方法(或excute方法)来完成,返回的是ResultSet对象,ResultSet中包含了查询的结果;查询相对与增
33、、删、改要复杂一些,因为有查询结果要处理。LOGO53实例:class Test public static void main(String args) try Class.forName(“com.mysql.jdbc.Driver”); System.out.println(“驱动加载成功!”); String url=“jdbc:mysql:/localhost:3306/stu”; String user=“root”; String pass=“123456”; Connection con=DriverManager.getConnection(url,user,pass); S
34、ystem.out.println(“已成功连接数据库!”); catch(Exception e) e.printStackTrace(); 注意:要使用注意:要使用JDBC API,必须将相应的,必须将相应的JDBC驱动程序包拷贝到应用程序的驱动程序包拷贝到应用程序的classpath指定的路径下指定的路径下LOGO54数据库操作举例:l假设在MySQL 中创建了一个名称为STU的数据库,数据库中有一张名称为users的表,结果如下:useridusername2012012John2012586MikeLOGO55数据库操作举例(续) 查询并输出users表中的所有数据。DBSelectTest1.java LOGO56 查询并输出用户ID为2012012的学生:DBSelectTest2.java LOGO57 插入用户ID为2012055,姓名为“王五”的学生:DBInsertTest.java LOGO58第一节正文获得数据库连接获得数据库连接发送发送Sql语句语句处理结果处理结果注册注册JDB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论