《华南理工大学java语言程序设计进阶篇课件》由会员分享,可在线阅读,更多相关《华南理工大学java语言程序设计进阶篇课件(31页珍藏版)》请在金锄头文库上搜索。
1、第第25章章Java数据库程序设计数据库程序设计1学习目标学习目标o理解数据理解数据库库和数据和数据库库管理系管理系统统的概念的概念(25.2节节).o理解关系数据模型:关系数据理解关系数据模型:关系数据结结构、构、约约束和束和语语言言(25.2节节).o使用使用SQL创创建和建和删删除表,并除表,并检检索和修改数据索和修改数据(25.3节节).o熟悉熟悉JDBC应应用程序接口用程序接口(25.4节节).o学会使用学会使用JDBC安装安装驱动驱动器、器、连连接数据接数据库库、执执行行语语句和句和处处理理结结果集果集(25.4节节).o使用使用预备语预备语句句执执行行预编译预编译的的SQL语语句
2、句(25.5节节).o利用利用Connection接口接口处处理事理事务务(25.6节节).o使用使用DatabaseMetaData和和ResultSetMetaData接口接口检检索数据索数据库库元数据元数据(25.7节节Optional).o用批模式用批模式执执行行SQL语语句句(25.8节节,Optional).o处处理可理可滚动滚动和可更新的和可更新的结结果集果集(25.9节节,Optional).o用用JDBC存存储储和和检检索索图图像像(25.10节节,Optional).2关系数据库系统关系数据库系统e.g.,Access,MySQL,Oracle,andMSSQLServer
3、3数据库应用系统数据库应用系统4关系数据库和关系数据模型关系数据库和关系数据模型现在,大多数数据在,大多数数据库系系统是以关系数据模型是以关系数据模型为基基础的的关系数据关系数据库系系统。关系数据模型有三个要素:关系数据模型有三个要素:结构、构、完整性和完整性和语言言oStructure 定定义了数据的表示了数据的表示 oIntegrity 提供提供对数据的数据的约束束 oLanguage 提供了提供了访问和操和操纵数据的手段数据的手段5关系结构关系结构关系数据关系数据库由由一个关系集一个关系集组成。一个关系成。一个关系有两部分:有两部分:语义和和该语义的一个的一个实例例.语义定定义一个关系,
4、而一个关系,而实例是例是该关系在关系在给定事件的内容定事件的内容。一个关系的。一个关系的实例例实际上是一个没有重复行的表格。上是一个没有重复行的表格。我我们通常称一个关系通常称一个关系为关系或表格关系或表格。6课程课程Course表表7表格和文件表格和文件注注:一个表格或关系与一个文件不同。一个表格或关系与一个文件不同。大多数关系大多数关系数据数据库系系统在一个文件中存在一个文件中存储多个表多个表8一个一个简单SQL语句句实例例o创建表 o删除表除表o描述表描述表o选择o插入插入o删除除o更新更新ocreatetableStudent(ossnchar(9),ofirstNamevarchar
5、(25),omichar(1),olastNamevarchar(25),obirthDatedate,ostreetvarchar(25),ophonechar(11),ozipCodechar(5),odeptIdchar(4),oprimarykey(ssn)o);9o创建表创建表o删除表o描述表描述表o选择选择o插入插入o删除删除o更新更新odroptableEnrollment;odroptableCourse;odroptableStudent;10o创建表创建表o删除表删除表o描述表o选择选择o插入插入o删除删除o更新更新odescribeCourse;-Oracle11o创建表
6、创建表o删除表删除表o描述表描述表o选择o插入插入o删除删除o更新更新oselectfirstName,mi,lastNameofromStudentowheredeptId=CS;oselectfirstName,mi,lastNameofromStudentowheredeptId=CSandzipCode=31411;oselect*ofromStudentowheredeptId=CSandzipCode=31411;12o创建表创建表o删除表删除表o描述表描述表o选择选择o插入o删除删除o更新更新oinsertintoCourse(courseId,subjectId,courseN
7、umber,title)ovalues(11113,CSCI,3720,DatabaseSystems,3);13o创建表创建表o删除表删除表o描述表描述表o选择选择o插入插入o删除o更新更新odeleteCourseowheretitle=DatabaseSystem;14o创建表创建表o删除表删除表o描述表描述表o选择选择o插入插入o删除删除o更新oupdateCourseosetnumOfCredits=4owheretitle=DatabaseSystems;15MySQLonetstartmysql/netstopmysqlomysqlurootpsaoshowdatabases;o
8、use*;oshowtables;oCgb2312oselect*fromaccount;16JDBC结构结构17JDBC接口接口装载驱动装载驱动器器建立连接建立连接创建和执创建和执行语句行语句处理结果处理结果集集18装装载驱动器的器的语句句:Class.forName(JDBCDriverClass);驱动器是一个器是一个类,例如,例如:数据数据库驱动器器类SourceAccesssun.jdbc.odbc.JdbcOdbcDriver包含在包含在JDK中中MySQLcom.mysql.jdbc.Driver本本书的配套网站的配套网站Oracleoracle.jdbc.driver.Orac
9、leDriver本本书的配套网站的配套网站Access的的JDBC-ODBC驱动器捆器捆绑在在JDK中中MySQLJDBC驱动器包含在器包含在mysqljdbc.jar中中OracleJDBC驱动器包含在器包含在classes12.jar中中使用使用MySQL和和OracleJDBC驱动器必器必须加加载mysqljdbc.jar和和classes12.jar到到classpath中,在中,在Windows中使用如下的中使用如下的DOS命命令令:classpath=%classpath%;c:bookmysqljdbc.jar;c:bookclasses12.jar装载驱动器装载驱动器建立建立连
10、接接创建和执行创建和执行语句语句处理结果集处理结果集19装载驱动器装载驱动器建立建立连接接创建和执行创建和执行语句语句处理结果集处理结果集Connectionconnection=DriverManager.getConnection(databaseURL);DatabaseURLPatternAccessjdbc:odbc:dataSourceMySQLjdbc:mysql:/hostname/dbnameOraclejdbc:oracle:thin:hostname:port#:oracleDBSIDExamples:ForAccess:Connectionconnection=Driv
11、erManager.getConnection(jdbc:odbc:ExampleMDBDataSource);ForMySQL:Connectionconnection=DriverManager.getConnection(jdbc:mysql:/localhost/test);ForOracle:Connectionconnection=DriverManager.getConnection(jdbc:oracle:thin:liang.armstrong.edu:1521:orcl,scott,tiger);20装载驱动器装载驱动器建立连接建立连接创建和建和执行行语句句处理结果集处理结
12、果集创建建语句句:Statementstatement=connection.createStatement();执行行语句句(forupdate,delete,insert):statement.executeUpdate(createtableTemp(col1char(5),col2char(5);执行行语句句(forselect):/SelectthecolumnsfromtheStudenttableResultSetresultSet=statement.executeQuery(selectfirstName,mi,lastNamefromStudentwherelastName
13、+=Smith);21装载驱动器装载驱动器建立连接建立连接创建和执行语创建和执行语句句处理理结果集果集执行行语句句(forselect):/SelectthecolumnsfromtheStudenttableResultSetresultSet=stmt.executeQuery(selectfirstName,mi,lastNamefromStudentwherelastName+=Smith);处理理结果集果集(forselect):/Iteratethroughtheresultandprintthestudentnameswhile(resultSet.next()System.ou
14、t.println(resultSet.getString(1)+resultSet.getString(2)+.+resultSet.getString(3);22importjava.sql.*;publicclassSimpleJdbcpublicstaticvoidmain(Stringargs)throwsSQLException,ClassNotFoundException/LoadtheJDBCdriverClass.forName(com.mysql.jdbc.Driver);System.out.println(Driverloaded);/Establishaconnect
15、ionConnectionconnection=DriverManager.getConnection(jdbc:mysql:/localhost/test);System.out.println(Databaseconnected);/CreateastatementStatementstatement=connection.createStatement();/ExecuteastatementResultSetresultSet=statement.executeQuery(selectfirstName,mi,lastNamefromStudentwherelastName+=Smit
16、h);/Iteratethroughtheresultandprintthestudentnameswhile(resultSet.next()System.out.println(resultSet.getString(1)+t+resultSet.getString(2)+t+resultSet.getString(3);/Closetheconnectionconnection.close();23处理语句处理语句o一旦建立了一个到具体数据库的连接,就可以用这一旦建立了一个到具体数据库的连接,就可以用这个连接把程序的个连接把程序的SQL语句发送到数据库。语句发送到数据库。oJDBC提供多
17、种接口来发送语句给数据库提供多种接口来发送语句给数据库nStatement,nPreparedStatement,nCallableStatement24处理语句流程图处理语句流程图25execute,executeQuery和和executeUpdate方法方法执行行SQL语句的方法是句的方法是execute,executeQuery,和和executeUpdate,每个方法,每个方法接受接受一个一个SQL语句的字符串作句的字符串作为参数。参数。该串串传送到数送到数据据库上上执行。如果行。如果执行行产生多个生多个结果集、多个更新数果集、多个更新数或或结果集和更新数的果集和更新数的组合,合,应
18、使用使用execute方法。方法。26如果如果执行生成行生成单个个结果集如一个果集如一个SQL选择语句,句,应使用使用executeQuery。如果是。如果是单一更新数一更新数或没有更新数的或没有更新数的语句句结果,如果,如SQLINSERT,DELETE,UPDATE或或DDL语句,使用句,使用executeUpdate方法。方法。27准准备语句接口句接口PreparedStatementoPreparedStatement接口被用来执行动态接口被用来执行动态SQL语句语句和和带带IN参数的参数的SQL存储过程。存储过程。这些这些SQL语句和存储过程语句和存储过程是预编译的,重复执行时效率高
19、是预编译的,重复执行时效率高。Statementpstmt=connection.prepareStatement(insertintoStudent(firstName,mi,lastName)+values(?,?,?);pstmt.setString(1,“29”);28检索元数据检索元数据o数据库元数据时标识数据自身的信息。数据库元数据时标识数据自身的信息。JDBC提供了提供了DatabaseMetaData接口,可以获取数据库范围的信息;接口,可以获取数据库范围的信息;还提供了还提供了ResultSetMetaData接口,用于获取具体接口,用于获取具体ResultSet的信息。的信
20、息。o超过超过100个方法,可分为三组:个方法,可分为三组:n检索一般信息,检索一般信息,n查询数据库能力,查询数据库能力,n获取对象描述。获取对象描述。29检索元数据检索元数据o一般信息包括一般信息包括URL,用户名用户名,产品名称产品名称,版本号版本号,驱动器名驱动器名称称,驱动器版本号驱动器版本号,可用功能和可用功能和,可用数据类型等。可用数据类型等。o数据库能力的一个例子是,数据库是否支持数据库能力的一个例子是,数据库是否支持GROUPBY运算符,带加列选项的运算符,带加列选项的ALTERTABLE命令,是否支持命令,是否支持entry-level或全部或全部ANSI92SQL语法。语
21、法。o获取对象描述,如数据库对象:获取对象描述,如数据库对象:表、视图和过程表、视图和过程30批量更新批量更新为为了提高效率,了提高效率,JDBC2引入批更新方式,用于引入批更新方式,用于处处理非理非SELECT的的SQL命令。批命令。批更新由一个非更新由一个非SELECT的的SQL命令序列命令序列组组成。成。这这些命令收集成一批,然后一起提些命令收集成一批,然后一起提交到数据交到数据库库。Statementstatement=conn.createStatement();/AddSQLcommandstothebatchstatement.addBatch(createtableT(C1integer,C2varchar(15);statement.addBatch(insertintoTvalues(100,Smith);statement.addBatch(insertintoTvalues(200,Jones);/Executethebatchintcount=statement.executeBatch();executeBatch() 方法返回一个计数器的数组,每个计数器统计 SQL 命令影响的行数。 第一个计数器返回 0 ,因为它是一个 DDL 命令。其他计数器均为1,因为只有一行受影响31