《Java数据库编程1.ppt》由会员分享,可在线阅读,更多相关《Java数据库编程1.ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Hands-On实训教程系列第十二章JDBC数据库编程(一)Hands-On实训教程系列掌握JDBC的工作原理掌握如何获取数据库的连接掌握如何插入数据掌握如何查询数据掌握如何删除数据掌握如何修改数据本章目标Hands-On实训教程系列数据库访问技术简介 客户机客户机/服务器服务器应用程序应用程序 数据库编程数据库编程问题问题1 1:应用程序中的:应用程序中的SQLSQL语句如何传到数据库中执行语句如何传到数据库中执行数据数据库库发送发送 SQL 语句语句检索查询结果检索查询结果 问题问题2 2:数据库的执行结果如何返回到应用程序中:数据库的执行结果如何返回到应用程序中Hands-On实训教程系
2、列解决方案:应用程序和数据库之间必须建立一条通道,提供SQL语句的发送和执行结果的返回建立通道的方式ODBC:开放式数据库连接JDBC:JAVA数据库连接应用程序接口数据库访问技术简介Hands-On实训教程系列ODBC的功能连接数据库不同的数据库,连接方式是不同的,就像安装不同品牌的打印机需要安装相应的驱动程序才能正常工作。ODBC类似于数据库的万能驱动,可以和多种数据库连接,Access,dBase,SQL,Oracle等ODBC应用Hands-On实训教程系列数据库数据库ODBC应用图解客户机客户机/服务器服务器 GUI应用程序应用程序ODBC(开放式数据库连接)(开放式数据库连接)(M
3、icrosoft 提供)提供)插插 入入删删 除除修修 改改应用程序编程接口应用程序编程接口 查查 询询 Hands-On实训教程系列JAVA编程中的ODBC使用JAVA应用程序无法和ODBC直接连接,SUN公司提供JDBC-ODBC桥接驱动类,完成JAVA应用程序和ODBC的连接程序流程如图JDBC-ODBC应用JDBC-ODBC桥桥Java 应用程序应用程序 JDBC APIODBC APIODBC层层DBDBServerServerHands-On实训教程系列JDBC-ODBC应用示例ODBC连接数据库(配置数据源)实质:为数据库添加ODBC驱动操作步骤控制面板-管理工具-数据源(ODB
4、C)添加用户DSN选择SQLSERVERHands-On实训教程系列创建数据源数据源名称:studentodbc描述:学生数据库服务器:.(当前服务器)JDBC-ODBC应用示例Hands-On实训教程系列更改默认的数据库:选择进行连接的数据库JDBC-ODBC应用示例Hands-On实训教程系列编程,通过桥连方式与数据库建立连接JDBC-ODBC应用示例Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection con=DriverManager.getConnection(jdbc:odbc:studentodbc,sa,“sql2008)
5、;JDBC-ODBC桥驱动桥驱动类的完全限定类名类的完全限定类名数据源名称数据源名称用户名用户名密码密码注意:在JAVA数据库编程中需要打SP3或SP4补丁Hands-On实训教程系列JDBC-ODBC代码示例Connectioncon=null;Statementstmt=null;introw=0;/获取GUI信息StringstuID=stuIDTextField.getText();StringstuName=stuNameTextField.getText();StringstuDepart=(String)departComboBox.getSelectedItem();Strin
6、gstuClass=(String)classComboBox.getSelectedItem();/检测if(stuID.equals()|stuName.equals()JOptionPane.showMessageDialog(this,请填写完整);return;elsetry/注册桥接驱动Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/建立与数据源的连接con=DriverManager.getConnection(jdbc:odbc:studentodbc,sa,sql2008);/创建执行语句,拼接字符串Stringinsertsql=i
7、nsertstudentinfovalues(+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();elseJOptionPane.showMessageDialog
8、(this,添加失败);catch(Exceptionex)ex.printStackTrace();finallytrycon.close();/关闭连接catch(Exceptionex)ex.printStackTrace();Hands-On实训教程系列JDBC-ODBC总结JDBC-ODBC桥连将对JDBCAPI的调用,转换为对另一组数据库连接API的调用,在个人开发与测试中,可以使用。优点:可以访问所有ODBC可以访问的数据库缺点:执行效率低、功能不够强大,不适合存取大量数据,并且不是纯JAVA驱动,影响程序的跨平台执行Hands-On实训教程系列JDBC直连为了解决JDBC-OD
9、BC桥连的弊端,在JAVA数据库编程中通常采用JDBC直连的方式访问数据库实现原理:数据库厂商提供纯JAVA的JDBC驱动程序,开发者在应用程序中只需通过调用JDBCAPI 建立应用程序到数据库的连接优点:驱动由数据库厂商提供,匹配性能更好无需ODBC转发,执行效率高Hands-On实训教程系列Sql ServerOracleJDBC API JDBC 驱动驱动 JDBC 驱动驱动 Java应用程序 JDBC直连应用图解代替了ODBCSQL厂商提供Oracle厂商提供Hands-On实训教程系列JDBC驱动JDBC驱动是数据库厂商提供的,在数据库编程中,用到哪种数据库就需要在应用程序中添加相应
10、的驱动程序以SQL2000数据库为例,SQL2000提供的JDBC驱动包含三个jar文件,如果应用程序连接SQL2000数据,则需要将这三个jar文件导入应用程序中Hands-On实训教程系列JDBC驱动导入步骤工具|库Hands-On实训教程系列新建库|重名名库(例:sql2000)|确定添加jar文件,将三个jar文件分别添加到新建库中JDBC驱动导入步骤Hands-On实训教程系列JDBC驱动导入步骤Hands-On实训教程系列右击库|添加库选择sql2000JDBC驱动导入步骤Hands-On实训教程系列JDBCAPIJDBCAPI可做三件事:与数据库建立连接、执行SQL语句、处理结果
11、ConnectionDriverManagerStatementResultSet DriverManager:依据数据库的不同,管理:依据数据库的不同,管理JDBC驱动驱动 Connection:负责连接数据库并担任传送数据的任务:负责连接数据库并担任传送数据的任务 Statement:由由 Connection 产生、负责执行产生、负责执行SQL语句语句 ResultSet:负责保存:负责保存Statement执行后所产生的查询结果执行后所产生的查询结果客户端客户端数据库服务器数据库服务器1234Hands-On实训教程系列数据库访问案例增加数据:Connectioncon=null;St
12、atementstmt=null;introw=0;/获取GUI信息StringstuID=stuIDTextField.getText();StringstuName=stuNameTextField.getText();StringstuDepart=(String)departComboBox.getSelectedItem();StringstuClass=(String)classComboBox.getSelectedItem();/检测if(stuID.equals()|stuName.equals()JOptionPane.showMessageDialog(this,请填写完
13、整);return;elsetry/注册直连驱动Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);/建立连接Stringurl=jdbc:microsoft:sqlserver:/localhost:1433;databasename=JDBC_STU;con=DriverManager.getConnection(url,sa,sql2008);/创建执行语句,拼接字符串stmt=con.createStatement();Stringinsertsql=insertintostudentinfovalues(+stuID
14、+,+stuName+,+stuDepart+,+stuClass+);/发送sql语句row=stmt.executeUpdate(insertsql);if(row!=0)JOptionPane.showMessageDialog(this,添加成功);stuIDTextField.setText();stuNameTextField.setText();catch(SQLExceptionex)JOptionPane.showMessageDialog(this,添加失败);stuIDTextField.setText();stuNameTextField.setText();catch
15、(Exceptionex)ex.printStackTrace();finallytrycon.close();/关闭连接catch(Exceptionex)ex.printStackTrace();Hands-On实训教程系列数据库访问案例查询数据:根据某个值查询/*从数据库中查询记录并显示在表中*/Connectioncon=null;Statementstmt=null;/注意添加的包sql包ResultSetrs=null;/结果集try/注册驱动Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);/创建连接Strin
16、gurl=jdbc:microsoft:sqlserver:/localhost:1433;databasename=JDBC_STU;con=DriverManager.getConnection(url,sa,sql2008);/创建执行对象stmt=con.createStatement();/创建查询语句StringquerySql=select*fromstudentinfowherestuName=+stuNameTextField.getText()+;/执行查询rs=stmt.executeQuery(querySql);/将结果放到ArrayList中ArrayListstu
17、List=newArrayList();/从结果集中获取数据while(rs.next()StringstuID=rs.getString(1);/结果集列从1开始StringstuName=rs.getString(2);StringstuDepartment=rs.getString(3);StringstuClass=rs.getString(4);/组合对象Studentstu=newStudent(stuID,stuName,stuDepartment,stuClass);stuList.add(stu);/添加到ArrayList中/判断结果if(stuList.isEmpty()
18、JOptionPane.showMessageDialog(this,没有该学生的信息);stuNameTextField.setText();return;else/*将查询到的结果放到表中*/DefaultTableModeldtm=(DefaultTableModel)stuTable.getModel();while(dtm.getRowCount()0)dtm.removeRow(0);/创建Vector集合将查寻结果放到Vector中for(Studentstu:stuList)Vectorrowvc=newVector();rowvc.add(stu.getStuID();row
19、vc.add(stu.getStuName();rowvc.add(stu.getStuDepartment();rowvc.add(stu.getStuClass();/将数据添加到表中dtm.addRow(rowvc);catch(SQLExceptionex)ex.printStackTrace();catch(Exceptionex)ex.printStackTrace();finallytrycon.close();catch(Exceptionex)ex.printStackTrace();Hands-On实训教程系列数据库访问案例查询全部/*从数据库中查询记录并显示在表中*/Co
20、nnectioncon=null;Statementstmt=null;/注意添加的包sql包ResultSetrs=null;/结果集try/注册驱动Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);/创建连接Stringurl=jdbc:microsoft:sqlserver:/localhost:1433;databasename=JDBC_STU;con=DriverManager.getConnection(url,sa,sql2008);/创建执行对象stmt=con.createStatement();/创建查
21、询语句StringquerySql=select*fromstudentinfo;/执行查询rs=stmt.executeQuery(querySql);/将结果放到ArrayList中ArrayListstuList=newArrayList();/从结果集中获取数据while(rs.next()StringstuID=rs.getString(1);/结果集列从1开始StringstuName=rs.getString(2);StringstuDepartment=rs.getString(3);StringstuClass=rs.getString(4);/组合对象Studentstu=
22、newStudent(stuID,stuName,stuDepartment,stuClass);stuList.add(stu);/添加到ArrayList中/*将查询到的结果放到表中*/DefaultTableModeldtm=(DefaultTableModel)stuTable.getModel();while(dtm.getRowCount()0)dtm.removeRow(0);/创建Vector集合将查寻结果放到Vector中for(Studentstu:stuList)Vectorrowvc=newVector();rowvc.add(stu.getStuID();rowvc.
23、add(stu.getStuName();rowvc.add(stu.getStuDepartment();rowvc.add(stu.getStuClass();/将数据添加到表中dtm.addRow(rowvc);catch(SQLExceptionex)JOptionPane.showMessageDialog(this,“数据库中没有信息);catch(Exceptionex)ex.printStackTrace();finallytrycon.close();catch(Exceptionex)ex.printStackTrace();Hands-On实训教程系列数据库访问步骤注册驱
24、动Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);创建连接Stringurl=jdbc:microsoft:sqlserver:/localhost:1433;databasename=数据库名;Stringuser=sa;/用户名Stringpwd=sql2008;/密码Connectioncon=DriverManager.getConnection(url,user,pwd);创建执行对象Statementstmt=con.createStatement();操作数据库stmt.executeUpdate(sql语句
25、);/增、删、改操作ResultSetrs=stmt.executeQuery(sql语句);/查询,返回结果集Hands-On实训教程系列JDBCAPI常用方法Connection接口负责连接数据库并创建执行对象方法摘要具体作用createStatement()创建一个Statement对象来将SQL语句发送到数据库。prepareStatement(Stringsql)创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库。prepareCall(Stringsql)创建一个CallableStatement对象来调用数据库存储过程close()断开连接,释放此C
26、onnection对象的数据库和JDBC资源,Hands-On实训教程系列Statement接口用于执行静态SQL语句并返回它所生成结果的对象。方法摘要具体作用executeQuery(Stringsql)执行给定的SQL查询语句,该语句返回ResultSet结果集executeUpdate(Stringsql)执行给定SQL语句,该语句可能为INSERT、UPDATE或DELETE语句,或者不返回任何内容的SQL语句。close()立即释放此Statement对象的数据库和JDBC资源,而不是等待该对象自动关闭时发生此操作。JDBCAPI常用方法Hands-On实训教程系列JDBCAPI常用方法ResultSet:方法摘要具体作用booleannext()throwsSQLException将光标从当前位置向前移一行XxxgetXxx(intcolumnIndex)throwsSQLExceptionXxx是数据类型,获取结果集中指定列的值,列从1开始。根据列的数据类型使用相应的getXxx方法voidclose()throwsSQLException释放此ResultSet对象的数据库和JDBC资源Hands-On实训教程系列总结数据库编程的执行流程访问数据库的技术ODBCJDBCJDBC-ODBC桥连的步骤和特点JDBC直连的步骤和特点JDBCAPI常用方法