Java数据库编程第4章.ppt
第四章JDBC回顾r增加数据:insertr更新数据:updater删除数据:delete/truncate/dropr查询数据:u表别名、列别名u排除重复数据:distinctu限定行数:topnpercentu单条件选择操作u多条件选择操作u范围查询(between.and、in、like)u处理空值:where字段isnotnullu数据排序:orderby字段desc目标数据库应用程序与持久层概念数据库应用程序与持久层概念JDBC概述及使用概述及使用使用使用Connection、Statement和和PreparedStatement使用结果集使用结果集(ResultSet)为什么需要JDBCrJDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力Java应用程序应用程序JDBCJDBCJSP/Servlet客户端客户端数据库服务器数据库服务器应用服务器应用服务器数据库服务器数据库服务器客户端客户端JDBC概述r为什么要使用JDBCSQL语句能够直接访问数据库,但是在JAVA中谁来操作SQL语句?r什么是JDBCuJavaDataBaseConnectivityu是一种用于执行SQL语句的JavaAPI,它由一组用Java语言编写的类和接口组成。通过这些类和接口,JDBC把SQL语句发送给不同类型的数据库进行处理并接收处理结果rJDBC两大类u对Java开发人员而言是API,对数据库提供商而言是接口u面向开发人员:作为API,JDBC为程序开发提供标准的接口u面向数据库厂商:作为接口,让数据库厂商按标准方法来实现数据库连接与操作(数据库驱动程序)JAVA企业应用与持久层JDBC的四种驱动程序rJDBC-ODBCBridgeuJDBC-ODBC桥u由SUN公司提供通用的驱动,能访问各种数据库,但效率极低rnative-APIpartly-Javadriveru本地库Java驱动程序,外层是java,底层可能是c,c+u执行效率高,客户端必须安装本地驱动,维护不方便rnet-protocalall-Javadriver(JDBCProxy)u网络协议纯Java驱动程序(通用)u客户端不必安装本地库,使用方便,但性能相对较低rnative-protocolall-Javadriveru本地协议完全Java驱动程序u将JDBC调用转化为特定数据库的网络协议,效率很高JDBC驱动5-1rJDBC驱动由数据库厂商提供r在个人开发与测试中,可以使用JDBC-ODBC桥连方式r在生产型开发中,推荐使用纯Java驱动方式DBDBServerServerDBDBServerServerJDBCAPIJDBCDriverManager纯纯Java驱动驱动JDBCODBC桥桥Java应用程序应用程序ODBCJDBC驱动5-2r桥连r将对JDBCAPI的调用,转换为对另一组数据库连接API的调用r优点:可以访问所有ODBC可以访问的数据库r缺点:执行效率低、功能不够强大JDBC-ODBC桥桥Java应用程序应用程序JDBCAPIODBCAPIODBC层层DBDBServerServerJDBC驱动5-3r使用JDBC-ODBC进行桥连1、在控制面板ODBC数据源系统DSN中配置数据源2、编程,通过桥连方式与数据库建立连接-语法语法-Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connectioncon=DriverManager.getConnection(jdbc:odbc:news,sa,sa);JDBC-ODBC桥驱动类桥驱动类的完全限定类名的完全限定类名数据源名称数据源名称演示:配置演示:配置ODBC数据源数据源JDBC驱动5-4r纯Java驱动r由JDBC驱动直接访问数据库r优点:100%Java,快又可跨平台r缺点:访问不同的数据库需要下载专用的JDBC驱动JDBC驱动驱动Java应用程序应用程序JDBCAPIDBDBServerServerJDBC的常见APIJDBC驱动程序管理器驱动程序管理器,它是它是JDBC体系结构的支柱,主要作用体系结构的支柱,主要作用是把是把Java应用程序连接到应用程序连接到JDBC驱动程序上,然后退出驱动程序上,然后退出定义到数据库的连接,主要用于创建定义到数据库的连接,主要用于创建Statement对象对象执行执行SQL语句的接口,通过相关方法执行静态的语句的接口,通过相关方法执行静态的SQL语句语句类用于检查并报告用类用于检查并报告用JDBC操作数据库时的各种异常操作数据库时的各种异常接收某查询接收某查询SQL查询语句所返回的结果集对象查询语句所返回的结果集对象预编译的预编译的SQL语句语句,结合参数可以大大提高结合参数可以大大提高JDBC的执行效率的执行效率执行存储过程执行存储过程JDBC开发步骤r加载驱动程序r创建一个连接对象r创建声明语句对象r执行SQL语句u使用声明语句对象的executeUpdate(sql)方法完成增删改操作u使用声明语句对象的executeQuery(sql)方法获得结果集对象r关闭各种对象JDBC程序的工作模板tryClass.forName(JDBC驱动类驱动类);catch(ClassNotFoundExceptione)System.out.println(无法找到驱动类无法找到驱动类);tryConnectioncon=DriverManager.getConnection(JDBCURL,数据库用户名数据库用户名,密码密码);Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery(SELECTa,b,cFROMTable1);while(rs.next()intx=rs.getInt(a);Strings=rs.getString(b);floatf=rs.getFloat(c);con.close();catch(SQLExceptione)e.printStackTrace();获得数据库连接获得数据库连接发送发送Sql语句语句处理结果处理结果注册注册JDBC驱动驱动JDBCURL用来标识数据库用来标识数据库必须处理的异常必须处理的异常释放资源释放资源必须处理的异常必须处理的异常演示一r使用JDBC查询数据u使用Class.forName加载驱动程序u使用DriverManager创建一个连接对象u使用连接对象创建声明语句对象u使用语句对象的executeQuery(sql)方法获得结果集对象,使用后立即关闭操作结果集对象u关闭声明语句对象u关闭数据库的连接演示:使用JDBC查询数据r使用Class.forName加载驱动程序.try String driver=“com.microsoft.sqlserver.jdbc.SQLServerDriver”;Class.forName(driver);catch(ClassNotFoundException e)e.printStackTrace();演示:使用JDBC查询数据r使用DriverManager创建一个连接对象String url=jdbc:sqlserver:/localhost:1433;databaseName=name;String user=sa;String password=;try Connection conn=DriverManager.getConnection(url,user,password);System.out.println(连接成功);conn.close();catch(SQLException e)System.out.println(连接失败);e.printStackTrace();演示:使用JDBC查询数据r使用语句对象的executeQuery(sql)方法获取并关闭结果集对象Connection conn=DriverManager.getConnection(url,user,password);/创建语句对象Statement st=conn.createStatement();/查询数据sql=select title_id,title,price from titles;ResultSet rs=st.executeQuery(sql);while(rs.next()String f1=rs.getString(1);String f2=rs.getString(title);String f3=rs.getString(3);System.out.println(“f1=”+f1+“,f2=”+f2+“+“,f3=”+f3);/逆向关闭rs.close();st.close();conn.close();resultSet中的游标自由移动rJdbc2.1提供的新功能rresultSet中的游标可以自由移动,移到第一条,最后一条,上一条,下一条,移到指定的行都可以。rstat=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);rset=stat.executeQuery(select*fromproducts);使用resultSet对象更新数据rJdbc2.1提供的新功能r可以在resultSet对象更新数据rset.updateString(2,c);rset.updateRow();rset.moveToInsertRow();rset.updateString(2,);rset.updateString(3,);rset.updateInt(4,3);rset.updateInt(5,3);rset.insertRow();rset.absolute(2);rset.deleteRow();演示二r演示:使用JDBC增加数据u使用Class.forName加载驱动程序u使用DriverManager创建一个连接对象u使用连接对象创建声明语句对象u使用声明语句对象的executeUpdate(sql)方法完成增删改操作u关闭声明语句对象u关闭数据库的连接演示:使用JDBC增加数据r使用Class.forName加载驱动程序.try String driver=“com.microsoft.sqlserver.jdbc.SQLServerDriver”;Class.forName(driver);catch(ClassNotFoundException e)e.printStackTrace();演示:使用JDBC增加数据r使用DriverManager创建一个连接对象String url=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=MyDB;String user=sa;String password=;try Connection conn=DriverManager.getConnection(url,user,password);System.out.println(连接成功);conn.close();catch(SQLException e)System.out.println(连接失败);e.printStackTrace();演示:使用JDBC增加数据r使用连接对象创建声明语句对象Connection conn=DriverManager.getConnection(url,user,password);/创建语句对象=连接对象.create.Statement st=conn.createStatement();r使用语句对象的executeUpdate(sql)方法操作数据/操作数据sql=insert into t_dept(d_no,d_name)values(60,lovo);st.executeUpdate(sql);System.out.println(操作成功);/逆向关闭st.close();conn.close();JDBC开发步骤小结1、加载驱动程序rClass.forName(driver)2、创建一个连接对象rConnectionconn=DriverManager.getConnection(url,user,password);3、使用连接对象创建声明语句对象rStatementst=conn.createStatement();4、操作数据或查询数据rst.executeUpdate(sql);rResultSetrs=st.executeQuery(sql);5、依次关闭各种对象rrs.close();rst.close();rconn.close();PreparedStatementPreparedStatement接口接口(预编译的预编译的SQL语句语句)Statement接口接口当当SQL语句将运行多次时,尽语句将运行多次时,尽量使用量使用PreparedStatement,以,以便提高运行效率便提高运行效率rPreparedStatement接口继承Statement接口rPreparedStatement比普通的Statement对象使用起来更加灵活,更有效率使用PreparedStatement插入数据publicclassNewsFirstTitleDB2publicstaticvoidmain(Stringargs)Connectioncon=null;PreparedStatementpStatement=null;trySimpleDateFormathmFromat=newSimpleDateFormat(yyyy-MM-ddhh:mm:ss);con=ConnectionManager.getConnection();StringstrSql=insertintoFirstLevelTitlevalues(?,?,?,?);pStatement=con.prepareStatement(strSql);pStatement.setInt(1,1);pStatement.setString(2,军事军事);pStatement.setString(3,管理员管理员);pStatement.setString(4,hmFromat.format(newDate();pStatement.executeUpdate();catch(SQLExceptionsqlE)sqlE.printStackTrace();finallyConnectionManager.closeStatement(pStatement);ConnectionManager.closeConnection(con);参数化的查询语句参数化的查询语句设置每个设置每个?参数的值,参数的值,列号从列号从1开始开始执行执行sql语句语句检索自动生成的关键字rJdbc3.0提供的新功能rstat=conn.createStatement();rstat.executeUpdate(insertintoProductsvalues(苹果,水果类,3.5,1000),Statement.RETURN_GENERATED_KEYS);rset=stat.getGeneratedKeys();rif(set.next()rSystem.out.println(set.getInt(1);新增加jdbc数据类型rJava.sql.Types.DataLinkr提供外部资源的访问或URLr通过getURL()访问rJava.sql.Types.Booleanr和bit类型等同r通过getBealean()访问小结r数据库应用程序与持久层概念rJDBC概述rJDBC使用步骤r使用Statement和PrepareStatementr使用结果集实训:访问SQLServerr连接SQLServerr在查询分析器中创建表r在JAVA完成数据的增加、修改和删除r在JAVA完成数据的查询和显示