Java数据库编程第4章.ppt
,第四章 JDBC,回顾,增加数据:insert更新数据:update删除数据:delete/truncate/drop查询数据:表别名、列别名排除重复数据:distinct限定行数:top n percent单条件选择操作多条件选择操作范围查询(between.and、in、like)处理空值:where 字段 is not null数据排序:order by 字段 desc,目标,数据库应用程序与持久层概念,JDBC概述及使用,使用Connection、Statement和PreparedStatement,使用结果集(ResultSet),为什么需要JDBC,JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力,Java应用程序,JDBC,JDBC,JSP/Servlet,客户端,数据库服务器,应用服务器,数据库服务器,客户端,JDBC概述,为什么要使用JDBCSQL语句能够直接访问数据库,但是在JAVA中谁来操作SQL语句?什么是JDBCJava DataBase Connectivity是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成。通过这些类和接口,JDBC把SQL语句发送给不同类型的数据库进行处理并接收处理结果JDBC两大类对Java开发人员而言是API,对数据库提供商而言是接口面向开发人员:作为API,JDBC为程序开发提供标准的接口面向数据库厂商:作为接口,让数据库厂商按标准方法来实现数据库连接与操作(数据库驱动程序),JDBC应用程序工作原理,JAVA企业应用与持久层,JDBC的四种驱动程序,JDBC-ODBC Bridge JDBC-ODBC桥由SUN公司提供通用的驱动,能访问各种数据库,但效率极低native-API partly-Java driver本地库Java驱动程序,外层是java,底层可能是c,c+执行效率高,客户端必须安装本地驱动,维护不方便net-protocal all-Java driver(JDBC Proxy)网络协议纯Java驱动程序(通用)客户端不必安装本地库,使用方便,但性能相对较低native-protocol all-Java driver本地协议完全Java驱动程序将JDBC调用转化为特定数据库的网络协议,效率很高,JDBC驱动 5-1,JDBC驱动由数据库厂商提供在个人开发与测试中,可以使用JDBC-ODBC桥连方式在生产型开发中,推荐使用纯Java驱动方式,DB Server,DBServer,JDBC API,JDBC Driver Manager,纯Java 驱动,JDBCODBC桥,Java 应用程序,ODBC,JDBC驱动 5-2,桥连将对JDBC API的调用,转换为对另一组数据库连接API的调用优点:可以访问所有ODBC可以访问的数据库缺点:执行效率低、功能不够强大,JDBC-ODBC桥,Java 应用程序,JDBC API,ODBC API,ODBC层,DBServer,JDBC驱动 5-3,使用JDBC-ODBC进行桥连1、在控制面板ODBC数据源系统DSN中配置数据源2、编程,通过桥连方式与数据库建立连接,-语法-Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection con=DriverManager.getConnection(jdbc:odbc:news,sa,sa);,JDBC-ODBC桥驱动类的完全限定类名,数据源名称,演示:配置ODBC数据源,JDBC驱动 5-4,纯Java驱动由JDBC驱动直接访问数据库优点:100%Java,快又可跨平台缺点:访问不同的数据库需要下载专用的JDBC驱动,JDBC 驱动,Java 应用程序,JDBC API,DBServer,JDBC的常见API,JDBC驱动程序管理器,它是JDBC体系结构的支柱,主要作用是把Java应用程序连接到JDBC驱动程序上,然后退出,定义到数据库的连接,主要用于创建Statement对象,执行SQL语句的接口,通过相关方法执行静态的SQL语句,类用于检查并报告用JDBC操作数据库时的各种异常,接收某查询SQL查询语句所返回的结果集对象,预编译的SQL语句,结合参数可以大大提高JDBC的执行效率,执行存储过程,JDBC开发步骤,加载驱动程序创建一个连接对象创建声明语句对象执行SQL语句使用声明语句对象的executeUpdate(sql)方法完成增删改操作使用声明语句对象的executeQuery(sql)方法获得结果集对象关闭各种对象,JDBC程序的工作模板,try Class.forName(JDBC驱动类);catch(ClassNotFoundException e)System.out.println(无法找到驱动类);try Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码);Statement stmt=con.createStatement();ResultSet rs=stmt.executeQuery(SELECT a,b,c FROM Table1);while(rs.next()int x=rs.getInt(a);String s=rs.getString(b);float f=rs.getFloat(c);con.close();catch(SQLException e)e.printStackTrace();,获得数据库连接,发送Sql语句,处理结果,注册JDBC驱动,JDBC URL用来标识数据库,必须处理的异常,释放资源,必须处理的异常,演示一,使用JDBC查询数据使用Class.forName加载驱动程序使用DriverManager创建一个连接对象使用连接对象创建声明语句对象使用语句对象的executeQuery(sql)方法获得结果集对象,使用后立即关闭操作结果集对象关闭声明语句对象关闭数据库的连接,演示:使用JDBC查询数据,使用Class.forName加载驱动程序.try String driver=“com.microsoft.sqlserver.jdbc.SQLServerDriver”;Class.forName(driver);catch(ClassNotFoundException e)e.printStackTrace();,演示:使用JDBC查询数据,使用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查询数据,使用语句对象的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中的游标自由移动,Jdbc2.1提供的新功能resultSet中的游标可以自由移动,移到第一条,最后一条,上一条,下一条,移到指定的行都可以。stat=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);set=stat.executeQuery(select*from products);,使用resultSet对象更新数据,Jdbc2.1提供的新功能可以在resultSet对象更新数据set.updateString(2,c);set.updateRow();set.moveToInsertRow();set.updateString(2,);set.updateString(3,);set.updateInt(4,3);set.updateInt(5,3);set.insertRow();set.absolute(2);set.deleteRow();,演示二,演示:使用JDBC增加数据使用Class.forName加载驱动程序使用DriverManager创建一个连接对象使用连接对象创建声明语句对象使用声明语句对象的executeUpdate(sql)方法完成增删改操作关闭声明语句对象关闭数据库的连接,演示:使用JDBC增加数据,使用Class.forName加载驱动程序.try String driver=“com.microsoft.sqlserver.jdbc.SQLServerDriver”;Class.forName(driver);catch(ClassNotFoundException e)e.printStackTrace();,演示:使用JDBC增加数据,使用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增加数据,使用连接对象创建声明语句对象Connection conn=DriverManager.getConnection(url,user,password);/创建语句对象=连接对象.create.Statement st=conn.createStatement();使用语句对象的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、加载驱动程序Class.forName(driver)2、创建一个连接对象Connection conn=DriverManager.getConnection(url,user,password);3、使用连接对象创建声明语句对象Statement st=conn.createStatement();4、操作数据或查询数据st.executeUpdate(sql);ResultSet rs=st.executeQuery(sql);5、依次关闭各种对象rs.close();st.close();conn.close();,PreparedStatement,PreparedStatement接口(预编译的 SQL 语句),Statement 接口,当SQL语句将运行多次时,尽量使用PreparedStatement,以便提高运行效率,PreparedStatement 接口继承 Statement接口PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率,使用PreparedStatement插入数据,public class NewsFirstTitleDB2 public static void main(String args)Connection con=null;PreparedStatement pStatement=null;try SimpleDateFormat hmFromat=new SimpleDateFormat(yyyy-MM-dd hh:mm:ss);con=ConnectionManager.getConnection();String strSql=insert into FirstLevelTitle values(?,?,?,?);pStatement=con.prepareStatement(strSql);pStatement.setInt(1,1);pStatement.setString(2,军事);pStatement.setString(3,管理员);pStatement.setString(4,hmFromat.format(new Date();pStatement.executeUpdate();catch(SQLException sqlE)sqlE.printStackTrace();finally ConnectionManager.closeStatement(pStatement);ConnectionManager.closeConnection(con);,参数化的查询语句,设置每个?参数的值,列号从1开始,执行sql语句,检索自动生成的关键字,Jdbc3.0提供的新功能stat=conn.createStatement();stat.executeUpdate(insert into Products values(苹果,水果类,3.5,1000),Statement.RETURN_GENERATED_KEYS);set=stat.getGeneratedKeys();if(set.next()System.out.println(set.getInt(1);,新增加jdbc数据类型,Java.sql.Types.DataLink提供外部资源的访问或URL通过getURL()访问Java.sql.Types.Boolean和bit类型等同通过getBealean()访问,小结,数据库应用程序与持久层概念JDBC概述JDBC使用步骤使用Statement和PrepareStatement使用结果集,实训:访问SQLServer,连接SQLServer在查询分析器中创建表在JAVA完成数据的增加、修改和删除在JAVA完成数据的查询和显示,