《Java数据库编程》PPT课件.ppt_第1页
《Java数据库编程》PPT课件.ppt_第2页
《Java数据库编程》PPT课件.ppt_第3页
《Java数据库编程》PPT课件.ppt_第4页
《Java数据库编程》PPT课件.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、,第十二章,JDBC数据库编程(一),掌握JDBC的工作原理 掌握如何获取数据库的连接 掌握如何插入数据 掌握如何查询数据 掌握如何删除数据 掌握如何修改数据,本章目标,数据库访问技术简介,客户机/服务器 应用程序,数据库编程,问题1:应用程序中的SQL语句如何传到数据库中执行,数据库,发送 SQL 语句,检索查询结果,问题2:数据库的执行结果如何返回到应用程序中,解决方案:应用程序和数据库之间必须建立一条通道,提供SQL语句的发送和执行结果的返回 建立通道的方式 ODBC:开放式数据库连接 JDBC:JAVA 数据库连接应用程序接口,数据库访问技术简介,ODBC的功能 连接数据库 不同的数据

2、库,连接方式是不同的,就像安装不同品牌的打印机需要安装相应的驱动程序才能正常工作。ODBC类似于数据库的万能驱动,可以和多种数据库连接,Access,dBase,SQL,Oracle等,ODBC应用,数据库,ODBC应用图解,客户机/服务器 GUI应用程序,ODBC (开放式数据库连接) (Microsoft 提供),插 入,删 除,修 改,应用程序编程接口,查 询,JAVA编程中的ODBC使用 JAVA应用程序无法和ODBC直接连接,SUN公司提供JDBC-ODBC桥接驱动类,完成JAVA应用程序和ODBC的连接 程序流程如图,JDBC-ODBC应用,JDBC-ODBC桥,Java 应用程序

3、,JDBC API,ODBC API,ODBC层,DB Server,JDBC-ODBC应用示例,ODBC连接数据库(配置数据源) 实质:为数据库添加ODBC驱动 操作步骤 控制面板-管理工具-数据源(ODBC) 添加用户DSN 选择SQL SERVER,创建数据源 数据源名称:studentodbc 描述:学生数据库 服务器:.(当前服务器),JDBC-ODBC应用示例,更改默认的数据库:选择进行连接的数据库,JDBC-ODBC应用示例,编程,通过桥连方式与数据库建立连接,JDBC-ODBC应用示例,Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); C

4、onnection con =DriverManager.getConnection(jdbc:odbc:studentodbc,sa,“sql2008);,JDBC-ODBC桥驱动类的完全限定类名,数据源名称,用户名,密码,注意:在JAVA数据库编程中需要打SP3或SP4补丁,JDBC-ODBC代码示例,Connection con = null; Statement stmt = null; int row = 0; /获取GUI信息 String stuID = stuIDTextField.getText(); String stuName = stuNameTextField.get

5、Text(); String stuDepart = (String) departComboBox.getSelectedItem(); String stuClass = (String) classComboBox.getSelectedItem(); /检测 if (stuID.equals() | stuName.equals() JOptionPane.showMessageDialog(this, 请填写完整); return; else try /注册桥接驱动 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); /建立与数据源的连接 con

6、 = DriverManager.getConnection(jdbc:odbc:studentodbc, sa, sql2008); /创建执行语句,拼接字符串 String insertsql = insert studentinfo values( + stuID + , + stuName + , + stuDepart + , + stuClass + ); System.out.println(insertsql);,stmt = con.createStatement(); /发送sql语句 row = stmt.executeUpdate(insertsql); if (row

7、 != 0) JOptionPane.showMessageDialog(this, 添加成功); stuIDTextField.setText(); stuNameTextField.setText(); else JOptionPane.showMessageDialog(this, 添加失败); catch (Exception ex) ex.printStackTrace(); finally try con.close();/关闭连接 catch (Exception ex) ex.printStackTrace(); ,JDBC-ODBC总结,JDBC-ODBC桥连 将对JDBC

8、API的调用,转换为对另一组数据库连接API的调用,在个人开发与测试中,可以使用。 优点:可以访问所有ODBC可以访问的数据库 缺点:执行效率低、功能不够强大,不适合存取大量数据,并且不是纯JAVA驱动,影响程序的跨平台执行,JDBC直连,为了解决JDBC-ODBC桥连的弊端,在JAVA数据库编程中通常采用JDBC直连的方式访问数据库 实现原理:数据库厂商提供纯JAVA的JDBC驱动程序,开发者在应用程序中只需通过调用JDBC API建立应用程序到数据库的连接 优点: 驱动由数据库厂商提供,匹配性能更好 无需ODBC转发,执行效率高,Sql Server,Oracle,JDBC API,JDB

9、C 驱动,JDBC 驱动,Java 应用程序,JDBC直连应用图解,代替了ODBC,SQL厂商提供,Oracle厂商提供,JDBC驱动,JDBC驱动是数据库厂商提供的,在数据库编程中,用到哪种数据库就需要在应用程序中添加相应的驱动程序 以SQL 2000数据库为例,SQL 2000提供的JDBC驱动包含三个jar文件,如果应用程序连接SQL 2000数据,则需要将这三个jar文件导入应用程序中,JDBC驱动导入步骤,工具 | 库,新建库 | 重名名库(例:sql2000) | 确定 添加jar文件,将三个jar文件分别添加到新建库中,JDBC驱动导入步骤,JDBC驱动导入步骤,右击库 | 添加

10、库 选择sql2000,JDBC驱动导入步骤,JDBC API,JDBC API可做三件事:与数据库建立连接、执行SQL 语句、处理结果,Connection,DriverManager,Statement,ResultSet,DriverManager :依据数据库的不同,管理JDBC驱动 Connection :负责连接数据库并担任传送数据的任务 Statement :由 Connection 产生、负责执行SQL语句 ResultSet:负责保存Statement执行后所产生的查询结果,客户端,数据库服务器,1,2,3,4,数据库访问案例,增加数据: Connection con = n

11、ull; Statement stmt = null; int row = 0; /获取GUI信息 String stuID = stuIDTextField.getText(); String stuName = stuNameTextField.getText(); String stuDepart = (String) departComboBox.getSelectedItem(); String stuClass = (String) classComboBox.getSelectedItem(); /检测 if (stuID.equals() | stuName.equals()

12、JOptionPane.showMessageDialog(this, 请填写完整); return; else try /注册直连驱动 Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); /建立连接 String url=jdbc:microsoft:sqlserver:/localhost:1433;databasename=JDBC_STU; con = DriverManager.getConnection(url,sa,sql2008); /创建执行语句,拼接字符串 stmt = con.createStateme

13、nt(); String insertsql = insert into studentinfo values( + stuID + , + stuName + , + stuDepart + , + stuClass + );,/发送sql语句 row = stmt.executeUpdate(insertsql); if (row != 0) JOptionPane.showMessageDialog(this, 添加成功); stuIDTextField.setText(); stuNameTextField.setText(); catch(SQLException ex) JOpti

14、onPane.showMessageDialog(this, 添加失败); stuIDTextField.setText(); stuNameTextField.setText(); catch (Exception ex) ex.printStackTrace(); finally try con.close();/关闭连接 catch (Exception ex) ex.printStackTrace(); ,数据库访问案例,查询数据:根据某个值查询 /*从数据库中查询记录并显示在表中*/ Connection con = null; Statement stmt = null;/注意添加

15、的包sql包 ResultSet rs = null;/结果集 try /注册驱动 Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); /创建连接 String url = jdbc:microsoft:sqlserver:/localhost:1433;databasename=JDBC_STU; con = DriverManager.getConnection(url, sa, sql2008); /创建执行对象 stmt = con.createStatement(); /创建查询语句 String querySql

16、 = select * from studentinfo where stuName= + stuNameTextField.getText() + ; /执行查询 rs = stmt.executeQuery(querySql); /将结果放到ArrayList中 ArrayList stuList = new ArrayList(); /从结果集中获取数据 while (rs.next() String stuID = rs.getString(1);/结果集列从1开始 String stuName = rs.getString(2); String stuDepartment = rs.

17、getString(3); String stuClass = rs.getString(4); /组合对象 Student stu = new Student(stuID, stuName, stuDepartment, stuClass); stuList.add(stu);/添加到ArrayList中 ,/判断结果 if(stuList.isEmpty() JOptionPane.showMessageDialog(this, 没有该学生的信息); stuNameTextField.setText(); return; else /*将查询到的结果放到表中*/ DefaultTableM

18、odel dtm = (DefaultTableModel) stuTable.getModel(); while (dtm.getRowCount() 0) dtm.removeRow(0); /创建Vector集合将查寻结果放到Vector中 for (Student stu : stuList) Vector rowvc = new Vector(); rowvc.add(stu.getStuID(); rowvc.add(stu.getStuName(); rowvc.add(stu.getStuDepartment(); rowvc.add(stu.getStuClass(); /将

19、数据添加到表中 dtm.addRow(rowvc); catch(SQLExceptionex) ex.printStackTrace(); catch (Exception ex) ex.printStackTrace(); finally try con.close(); catch (Exception ex) ex.printStackTrace(); ,数据库访问案例,查询全部 /*从数据库中查询记录并显示在表中*/ Connection con = null; Statement stmt = null;/注意添加的包sql包 ResultSet rs = null;/结果集 tr

20、y /注册驱动 Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); /创建连接 String url = jdbc:microsoft:sqlserver:/localhost:1433;databasename=JDBC_STU; con = DriverManager.getConnection(url, sa, sql2008); /创建执行对象 stmt = con.createStatement(); /创建查询语句 String querySql = select * from studentinfo ; /执行

21、查询 rs = stmt.executeQuery(querySql); /将结果放到ArrayList中 ArrayList stuList = new ArrayList(); /从结果集中获取数据 while (rs.next() String stuID = rs.getString(1);/结果集列从1开始 String stuName = rs.getString(2); String stuDepartment = rs.getString(3); String stuClass = rs.getString(4); /组合对象 Student stu = new Student

22、(stuID, stuName, stuDepartment, stuClass); stuList.add(stu);/添加到ArrayList中 ,/*将查询到的结果放到表中*/ DefaultTableModel dtm = (DefaultTableModel) stuTable.getModel(); while (dtm.getRowCount() 0) dtm.removeRow(0); /创建Vector集合将查寻结果放到Vector中 for (Student stu : stuList) Vector rowvc = new Vector(); rowvc.add(stu.getStuID(); rowvc.add(stu.getStuName(); rowvc.add(stu.getStuDepartment(); rowvc.add(stu.getStuClass(); /将数据添加到表中 dtm.addRow(rowvc); catch(SQLExcept

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论