第18章JDBC编程第18章JDBC编程18.1数据库简介18.2JDBC基本概念18.3JDBC编程18.4JDBC-ODBC编程18.5JDBC编程进阶第18章JDBC编程18.1数据库简介关系型数据库关系型数据库是当前数据库的主流技术,常用的数据库有Oracle,SQLServer,DB2,SyBase等,其能保存数据本身和数据之间的关系,并提供强大的管理和查询功能。第18章JDBC编程18.1数据库简介SQL语言SQL(StructuredQueryLanguage)是使用关系模型的数据库语言,用于和各种数据库的连接,提供通用的数据管理和查询语言。其常用的指令有:select,insert,delete,update,create,drop第18章JDBC编程18.1数据库简介ODBCODBC(OpenDataBaseConnectivity)的含义是开放数据库连接,是微软公司开发的一套数据库系统应用程序接口规范,它支持应用程序以标准的ODBC函数和SQL语句操作各种不同的数据库。第18章JDBC编程应用程序驱动程序管理器Oracle驱动程序驱动程序驱动程序SQLServer其他数据库ODBC工作原理第18章JDBC编程18.2JDBC基本概念JDBC概述由于ODBC模型的成功,JDBC(JavaDataBaseConnectivity)也遵循了这个模型。应用程序首先和JDBC驱动程序管理器通信,由管理器来选择驱动程序访问数据库。第18章JDBC编程Java应用程序JDBC驱动程序管理器JDBC/ODBC桥供应商提供的JDBC驱动程序ODBC驱动程序数据库数据库JDBC工作原理第18章JDBC编程类型一:将JDBC翻译为ODBC,然后使用ODBC驱动程序和DB通信。注意:1、必须先安装ODBC驱动程序和配置ODBC数据源。2、仅当特定的数据库系统没有相应的JDBC驱动程序时使用。ApplicationSpaceJavaApplicationJDBC–ODBCBridgeDatabaseSQLCommandResultSetODBCDriverProprietaryProtocol第18章JDBC编程类型二:由部分Java程序和部分本地代码组成,用于和数据库的API进行通信。(JDBC中的命令被转换为本地库中的方法)注意:需要先安装和特定数据库操作的方法。ApplicationSpaceJavaApplicationType2JDBCDriverDatabaseSQLCommandResultSetNativeDatabaseLibraryProprietaryProtocol第18章JDBC编程类型三:纯Java程序,它使用一种与具体数据库无关的协议将数据库请求发送给一个中间件服务器,然后由它把该请求翻译为特定的数据库协议,并发送给数据库系统,从数据库系统获得的结果先发送给中间件服务器,并进而返回给应用程序。ApplicationSpaceJavaApplicationType3JDBCDriverDatabaseSQLCommandResultSetMiddlewareSpaceProprietaryProtocolJDBCDriver第18章JDBC编程类型四:纯Java的驱动程序,直接与特定的数据库系统通信。直接将JDBC命令转换为数据库系统的本地协议。没有中间的转换,提高了数据库的访问性能。ApplicationSpaceJavaApplicationType4JDBCDriverDatabaseSQLCommandUsingProprietaryProtocolResultSetUsingProprietaryProtocol第18章JDBC编程18.2JDBC基本概念JDBC基本概念DriverManager:负责选取数据库驱动程序和建立新的数据库连接。Driver(由驱动程序开发商提供):将应用程序的API请求转换为特定的数据库请求。第18章JDBC编程18.2JDBC基本概念Connection:将应用程序连接到特定的数据库Statement(PreparedStatement):在一个给定的连接中,用于执行一个静态(动态)的数据库SQL语句。ResultSet(可以没有,如在执行更新操作后):SQL语句执行完后,返回的数据结果集(包括行、列)第18章JDBC编程DriverManagerConnectionStatementResultSetDriverDatabaseCreatesCreatesCreatesSQLResult(tuples)EstablishLinktoDBJDBC的工作流程第18章JDBC编程18.3JDBC编程JDBC编程的基本步骤①加载驱动程序:Class.forName(“driverName”);②建立数据库连接:con=DriverManager.getConnection(“jdbc:xxx:datasource”,“用户名”,“密码”);第18章JDBC编程18.3JDBC编程③提交查询:stmt=con.createStatement();rs=stmt.executeQuery(“Select*frommyTable”);④处理结果集:while(rs.next()){name=rs.getString(“name”);“String”为数据类型}第18章JDBC编程【例题18-1】查询演示publicclassDBSelectDemo{publicstaticvoidmain(String[]args){Connectionconn=null;Statementstmt;ResultSetrs;try{Stringsql=select*fromarchive;18.3JDBC编程第18章JDBC编程//加载驱动程序Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver);//建立连接conn=DriverManager.getConnection(jdbc:microsoft:sqlserver://localhost:1433;+DatabaseName=studentarchive,sa,);//建立声明stmt=conn.createStatement();//执行SQL,返回数据集rs=stmt.executeQuery(sql);第18章JDBC编程while(rs.next()){System.out.println(学号:+rs.getString(number)+姓名:+rs.getString(name));}rs.close();stmt.close();conn.close();}catch(Exceptione){System.out.println(e);}}}第18章JDBC编程程序运行结果:第18章JDBC编程【例题18-2】插入、更新和删除演示publicclassDBInsertUpdateDeleteDemo{publicstaticvoidmain(String[]args){Connectionconn=null;Statementstmt;ResultSetrs;try{Stringsql=select*fromdemo;18.3JDBC编程第18章JDBC编程//加载驱动程序Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);//建立连接conn=DriverManager.getConnection(jdbc:microsoft:sqlserver://localhost:1433;+DatabaseName=studentarchive,sa,);//建立声明stmt=conn.createStatement();stmt.executeUpdate(“deletefromdemo);第18章JDBC编程stmt.executeUpdate(insertintodemovalues('101','张三',18));stmt.executeUpdate(insertintodemovalues('102','李四',22));stmt.executeUpdate(insertintodemovalues('103','王五',34));//执行SQL,返回数据集rs=stmt.executeQuery(sql);display(rs);rs.close();stmt.executeUpdate(updatedemosetage=age+10);stmt.executeUpdate(deletefromdemowherenumber='102');System.out.println(更新、删除后:);第18章JDBC编程rs=stmt.executeQuery(sql);display(rs);rs.close();stmt.close();conn.close();}catch(Exceptione){System.out.println(e);}}第18章JDBC编程publicstaticvoiddisplay(ResultSetrs){try{while(rs.next()){System.out.println(学号:+rs.getString(number)+姓名:+rs.getString(name)+年龄:+rs.getString(3));}}catch(SQLExceptione){e.printStackTrace();}}}第18章JDBC编程程序运行结果:第18章JDBC编程18.3JDBC编程获取数据库元数据元数据(Meta-Data)也称为“关于数据的数据”,在关系型数据库中,元数据描述了所存储数据的结构及其他信息。利用JDBC也可以获取各种元数据,如表的数量和名称、表的结构和约束等。第18章JDBC编程【例题18-3】元数据演示publicclassDBMetaDataDemo{publicstaticvoidmain(String[]args){Connectionconn=null;Statementstmt;ResultSetrs;try{Stringsql=select*fromarchive;18.3JDBC编程第18章JDBC编程//加载驱动程序Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);//建立连接conn=DriverManager.getConnection(jdbc:microsoft:sqlserver://localhost:1433;+DatabaseName=studentarchive,sa,);DatabaseMetaDatadmd=conn.getMetaData();System.out.println(数据库名称:+dmd.getDatabaseProductName());System.out.println(数据库版本:+dmd.getDatabaseProductVersion());System.out.println(驱动程序:+dmd.getDriverName()+\n);第18章JDBC编程//建立声明stmt=conn.createStatement();//执行SQL,返回数据集rs=stmt.executeQuery(sql);ResultSetMetaDatarsmd=rs.getMetaData();intcount=rsmd.getColumnCount();System.out.println(列序号\t列名称\t\t数据类型);for(inti=1;i=count;i++){System.out.println(i+\t\t+rsmd.getColumnName(i)