




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第十二章,JDBC数据库编程(一),掌握JDBC的工作原理 掌握如何获取数据库的连接 掌握如何插入数据 掌握如何查询数据 掌握如何删除数据 掌握如何修改数据,本章目标,数据库访问技术简介,客户机/服务器 应用程序,数据库编程,问题1:应用程序中的SQL语句如何传到数据库中执行,数据库,发送 SQL 语句,检索查询结果,问题2:数据库的执行结果如何返回到应用程序中,解决方案:应用程序和数据库之间必须建立一条通道,提供SQL语句的发送和执行结果的返回 建立通道的方式 ODBC:开放式数据库连接 JDBC:JAVA 数据库连接应用程序接口,数据库访问技术简介,ODBC的功能 连接数据库 不同的数据库,连接方式是不同的,就像安装不同品牌的打印机需要安装相应的驱动程序才能正常工作。ODBC类似于数据库的万能驱动,可以和多种数据库连接,Access,dBase,SQL,Oracle等,ODBC应用,数据库,ODBC应用图解,客户机/服务器 GUI应用程序,ODBC (开放式数据库连接) (Microsoft 提供),插 入,删 除,修 改,应用程序编程接口,查 询,JAVA编程中的ODBC使用 JAVA应用程序无法和ODBC直接连接,SUN公司提供JDBC-ODBC桥接驱动类,完成JAVA应用程序和ODBC的连接 程序流程如图,JDBC-ODBC应用,JDBC-ODBC桥,Java 应用程序,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“); Connection 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.getText(); 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 = 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 != 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 API的调用,转换为对另一组数据库连接API的调用,在个人开发与测试中,可以使用。 优点:可以访问所有ODBC可以访问的数据库 缺点:执行效率低、功能不够强大,不适合存取大量数据,并且不是纯JAVA驱动,影响程序的跨平台执行,JDBC直连,为了解决JDBC-ODBC桥连的弊端,在JAVA数据库编程中通常采用JDBC直连的方式访问数据库 实现原理:数据库厂商提供纯JAVA的JDBC驱动程序,开发者在应用程序中只需通过调用JDBC API 建立应用程序到数据库的连接 优点: 驱动由数据库厂商提供,匹配性能更好 无需ODBC转发,执行效率高,Sql Server,Oracle,JDBC API,JDBC 驱动,JDBC 驱动,Java 应用程序,JDBC直连应用图解,代替了ODBC,SQL厂商提供,Oracle厂商提供,JDBC驱动,JDBC驱动是数据库厂商提供的,在数据库编程中,用到哪种数据库就需要在应用程序中添加相应的驱动程序 以SQL 2000数据库为例,SQL 2000提供的JDBC驱动包含三个jar文件,如果应用程序连接SQL 2000数据,则需要将这三个jar文件导入应用程序中,JDBC驱动导入步骤,工具 | 库,新建库 | 重名名库(例:sql2000) | 确定 添加jar文件,将三个jar文件分别添加到新建库中,JDBC驱动导入步骤,JDBC驱动导入步骤,右击库 | 添加库 选择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 = null; 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(“) 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.createStatement(); 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) JOptionPane.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;/注意添加的包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 = “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.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 /*将查询到的结果放到表中*/ 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(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;/结果集 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 = “select * from studentinfo “; /执行查询 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(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(SQLExcep
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水利水电三类人员ABC考试试题及答案
- 北京钢材销售知识培训课件
- 交行银行面试题及答案
- 利润分配考试题及答案
- 台州船员考试试题及答案
- 脑波协调测试题及答案
- 乳品理化考试题及答案
- 2025年公路水运工程施工企业安全生产管理人员考试试题(200题)(含答案)
- 2025年VTE预防及护理考题及答案
- 2025年全国安全生产月活动《安全知识》竞赛答题活动试题库(含答案)
- 私密艾灸培训课件
- 招标书和投标书范本
- 国家开发银行生源地信用助学贷款预申请表
- 火龙罐联合耳穴压豆治疗失眠个案护理
- 动词的时态、语态和主谓一致
- 平面设计表现技法(手绘·数字化)全套完整教学课件
- 2023年基层卫生岗位练兵和技能竞赛试题及答案全科医疗组
- 心肺复苏及AED的使用
- 中国石油大学工程流体力学教案
- 真空带式干燥机3Q验证文件模板
- YC/T 507-2014烟草测土配方施肥工作规程
评论
0/150
提交评论