版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,java数据库操作,计算机学院通信软件工程中心 张艳梅 ,2,本章目标,了解JDBC的概念及必要性 了解JDBC驱动程序类型 理解JDBC 程序的结构 运用JDBC进行数据库编程,3,JDBC,所有软件的发展,有一半和主从架构C/S相关。Java允许你建立平台无关的主从数据库应用程序。 数据库差异:Oracle、Informix、DB2、Sybase 获取数据库数据的逻辑:连接至数据库、建立指令、查询、看结果。 JDBC提供数据库驱动程序管理,帮助你设计通用的数据库查询程序。,4,数据库访问技术简介,客户机/服务器 应用程序,数据库编程,ODBC,JDBC,两个常用的API,数据库,执行
2、SQL 语句,检索查询结果,5,数据库,ODBC/JDBC,客户机/服务器 GUI应用程序,ODBC (开放式数据库连接) (Microsoft 提供) JDBC (Java 数据库连接) (sun公司提供),插 入,删 除,修 改,应用程序编程接口,查询,Java应用程序,6,JDBC 驱动程序的类型,JDBC 驱动程序 的类型,JDBC-ODBC桥驱动程序 JDBC-ODBC bridge plus ODBC driver,本地API部分Java驱动程序 Native-API partly-Java driver,JDBC-Net 纯Java驱动程序 Pure Java Driver fo
3、r Database Middleware,本地协议纯Java驱动程序 Direct-to-Database Pure Java Driver,7,JDBC 体系结构 2-1,Java 程序,JDBC 驱动程序,数据库,SQL 命令,结果,8,JDBC 体系结构 2-2,应用层,Driver,Statement,ResultSet,Connection,各接口,驱动层,9,java.sql 包 3-1,10,java.sql 包 3-2,11,java.sql 包 3-3,SQLException,/* * fooBar */ public void foobar() throws SQLEx
4、ception throw new SQLException(“刚引发了一个 SQLException ”); , try fooBar(); catch(SQLException ex) System.out.println(“已捕获一个 SQLException 异常!”); System.out.println(“消息: “ + ex.getMessage(); System.out.println(“错误代码: “ + ex.getErrorCode(); ,调用 fooBar,12,JDBC 程序访问数据库的步骤 2-1,开 始,导入 java.sql包,加载并注册驱动程序,创建一个
5、 Connection 对象,创建一个 Statement 对象,执行语句,关闭ResultSet 对象,关闭Statement对象,关闭连接,结 束,使用ResultSet对象,13,Friends 表的结构,JDBC 程序访问数据库的步骤 2-2,示例:演示访问数据库的各个步骤 在执行示例 1 中的程序之前,SQL Server 中应该存在一个 名为 friends 的表,14,/* 2005 Aptech Limited * 版权所有 */ import java.sql.SQLException; import java.sql.Connection; import java.sql.
6、DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 这个类演示访问数据库需遵循的各个步骤. * version 1.0, 2006 年 12 月 26 日 * author dong */ class Jdbctest /* 构造方法 */ protected Jdbctest() ,JDBC 程序访问数据库的步骤 2-2,15,/*这是 main 方法. */ public static void main(String args) try Class.forName(sun.jdbc.odbc.Jd
7、bcOdbcDriver); catch (ClassNotFoundException ce) System.out.println(ce); try String url = jdbc:odbc:test; Connection con = DriverManager.getConnection(url); Statement s = con.createStatement(); ResultSet rs = s.executeQuery(select * from friends); while (rs.next() System.out.print(rs.getString(1) +
8、t); System.out.print(rs.getString(2) + t); System.out.print(rs.getInt(3) + t); System.out.print(rs.getDate(4) + t); System.out.println( ); rs.close(); s.close(); con.close(); catch (SQLException ce) System.out.println(ce); ,16,JDBC 查询2-1,SQL 查询字符串,executeQuery() 方法,作为参数传递,ResultSet,返回查询数据,SELECT nam
9、e, email, phone FROM colleagues;,使用 SQL 语句,查询可编写为:,String str = SELECT emp_id, lname, fname FROM colleagues; Statement stmt = con.createStatement(); ResultSet rset = stmt.executeQuery(str);,使用 JDBC 编写此查询,则代码为:,Statement接口,17,JDBC 查询2-2,它演示 SQL 中 sum( ) 方法的用法,/* * Jdbctest2 */ import java.sql.SQLExce
10、ption; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 这个类演示 SQL 中 sum() 方法的用法 * version 1.0, 2005 年 8 月 26 日 * author Ben */ class Jdbctest2 /* 构造方法*/ protected Jdbctest2() ,18,/* 这是 main 方法*/ public static void main(String args) t
11、ry Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException ce) System.out.println(ce); try String url = jdbc:odbc:test; Connection con = DriverManager.getConnection(url); Statement s = con.createStatement(); ResultSet rs = s.executeQuery( select hiredate, sum(salary) from friends
12、group by hiredate); while (rs.next() System.out.print(rs.getDate(1) + t); System.out.print(rs.getInt(2) + t); System.out.println( ); rs.close; s.close(); con.close(); catch (SQLException ce) System.out.println(ce); ,19,它演示 SQL 中 INSERT 语句的用法,JDBC 插入数据实现,/* 这是 main 方法*/ public static void main(String
13、 args) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException ce) System.out.println(ce); try String url = jdbc:odbc:test; String str = INSERT INTO “ + friends(name,address,salary)“ + “VALUES(张三,北京 ,25690); Connection con = DriverManager.getConnection(url); Statement s = con.
14、createStatement(); int rowcount = s.executeUpdate(str); String str1 = select name, sum(salary) “ +from friends + group by name;,20,JDBC 删除和修改实现,它演示 SQL 中各种命令的用法,/* * Jdbc2 */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; /* 这这个类演示
15、 SQL 中命令的用法. * version 1.0, 2006 年 12 月 26 日 * author Ben */ class Jdbc2 /* 构造方法.*/ protected Jdbc2() ,public static void main(String args) Connection con; Statement stmt; String url; String sql; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException ce) System.out.println(ce
16、); try url = jdbc:odbc:test; con = DriverManager.getConnection(url); sql = Delete from friends where rtrim(name)like张三 ; System.out.println( ); stmt = con.createStatement(); stmt.executeUpdate(sql); System.out.println(张三 的记录已删除“); stmt.close(); con.close();,con = DriverManager.getConnection(url); sq
17、l = Update friends set address=青岛 where “ + rtrim(name) like 李四; ; System.out.println( ); stmt = con.createStatement(); stmt.executeUpdate(sql); stmt.close(); con.close(); System.out.println(李四的记录已更新); catch (SQLException ce) System.out.println(ce); ,21,PreparedStatement接口 3-1,PreparedStatement接口 (预
18、编译的 SQL 语句),PreparedStatement 用于提高运行时效率,执行 PreparedStatement 对象比执行 Statement 对象快,Statement 接口,22,PreparedStatement接口 3-2,它演示了PreparedStatement 的用法,/* * CourseAppl */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.Re
19、sultSet; import java.sql.PreparedStatement; /* 这个类演示 SQL 中 PreparedStatement 的用法*/ class CourseAppl private Connection con; private String url; private String serverName; private String portNumber; private String databaseName; private String userName; private String password; private String sql;,Cou
20、rseAppl() url = jdbc:microsoft:sqlserver:/; serverName = “localhost; portNumber = 1433; databaseName = “test; userName = “sa; password = “sa; private String getConnectionUrl() return url + serverName + : + portNumber + ;databaseName = + databaseName + ; private java.sql.Connection getConnection() tr
21、y Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); con = DriverManager.getConnection( getConnectionUrl(), userName, password); if (con != null) System.out.println(连接成功!); catch (Exception e) e.printStackTrace(); System.out.println(getConnection() 内的错误跟踪: + e.getMessage(); return con; ,pu
22、blic void display() try con = getConnection(); PreparedStatement pstmt = con.prepareStatement( UPDATE friends SET salary = ? WHERE name like ?); pstmt.setInt(1, 10000 ); pstmt.setString(2, 李四 ); pstmt.executeUpdate(); System.out.println(“记录已更新!); Statement s = con.createStatement(); String sql = SEL
23、ECT * FROM friends ; ResultSet rs = s.executeQuery(sql); while (rs.next() System.out.println( ); System.out.print(rs.getInt(1) + ); System.out.println(rs.getInt(5); catch (SQLException ce) System.out.println(ce); public static void main(String args) CourseAppl retObj = new CourseAppl(); retObj.displ
24、ay(); ,23,PreparedStatement 接口 3-3,它演示在基于条件的 SQL 查询中如何使用 PreparedStatement,其中条件在 IN 参数中给出,import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.PreparedStatement; /* 这个类演示在基于条件的 SQL 查询中使用 PreparedStatement*/ class Retrieve
25、Records private Connection con; private String url; private String serverName, portNumber, databaseName, userName; private String sql; RetrieveRecords() url = jdbc:microsoft:sqlserver:/; serverName = “localhost; portNumber = 1433; databaseName = “test; userName = “sa; password = “sa; ,private String
26、 getConnectionUrl() return url + serverName + : + portNumber + ;databaseName = + databaseName + ; private java.sql.Connection getConnection() try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); con = DriverManager.getConnection( getConnectionUrl(), userName, password); if (con != null)
27、System.out.println(连接成功!); catch (Exception e) e.printStackTrace(); System.out.println(“getConnection() 内的错误跟踪: + e.getMessage(); return con; ,public void display() try con = getConnection(); sql = select * from Friends where Salary ?; PreparedStatement pstmt = con.prepareStatement( sql, ResultSet.T
28、YPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); pstmt.setInt(1, 5000); ResultSet rs = pstmt.executeQuery(); while (rs.next() System.out.print(rs.getString(1) + t); System.out.print(rs.getString(2) + t); System.out.print(rs.getInt(3) + t); System.out.print(rs.getDate(4) + t); System.out.print(rs.g
29、etInt(5) + t); System.out.println( ); rs.close(); pstmt.close(); con.close(); catch (SQLException ce) System.out.println(ce); /* 这是 main 方法*/ public static void main(String args) RetrieveRecords retRec = new RetrieveRecords(); retRec.display(); ,24,使用结果集 3-1,ResultSet 对象完全依赖于 Statement对象和Connection
30、对象 每次执行 SQL 语句时,都会用新的结果重写结果集 当相关的 Statement 关闭时,ResultSet 对象会自动关闭,Next( ),get(),此方法将光标从 当前位置下移一行,从 ResultSet 对象返回数据,25,使用结果集 3-2,它演示对当前行的处理 使用 next() 方法时,记录是按顺序处理的 必须按照数据返回的顺序处理每行中的数据, ResultSet rset = stmt.getResultSet(); while(rset.next() String dept_name = rset.getString(1); ,26,使用结果集 3-3,演示对当前列的处理 使用 get() 方法可以直接访问列, Statement stmt = con.createStateme
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 副乳护理查房政策解读
- 除颤仪的考试试题及答案
- 2025年住房和城乡建设领域现场专业人员培训考试(土建施工员专业基础知识)题库及答案(海南临高)
- 2025年浙江建设工程质量检测人员考试结构检测经典试题及答案
- 2025年设备安装水暖施工员考试专业基础知识练习试题及答案
- 2026年口腔医学技术知识技能大赛
- 2026年学生卫生保健知识
- 2026年中医药健康文化知识角
- 2026年常见传染病防控知识培训
- 2026年知识与创新管理硕士
- 端午节父亲节双节主题班会课件
- 2026年高考政治时政热点(必背)
- 2025-2026学年度江苏省无锡市七年级下学期期末测试模拟卷(含答案)
- 2026云南文山州砚山县昌盛人力资源服务有限公司招聘工作人员1人笔试参考题库及答案详解
- 2026年中级银行从业资格之中级个人理财必刷题库带答案详解(能力提升)
- 城市公交车辆日常安全例检项目及流程
- 2026年陕西高速铁路投资有限公司招聘(5人)考试参考试题及答案解析
- 2025年辽宁高中学业水平合格性考试化学试卷真题(含答案详解)
- 滥用药物危害主题班会课件
- 2026年喷药机行业分析报告及未来发展趋势报告
- 2026年国企内部遴选工作人员笔试试题及答案解析
评论
0/150
提交评论