




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第12章 数据库编程基础,HuFuxiang,Chapter 12 Program of Database,预习与提问,1、说明字段(列)、记录(行)、表、数据库的关系。 2、在SQL Server2000数据库中,提供了哪些类型的字段? 3、如果要开发有多种题型的考试软件,对于试题文件和评分标准,理解的保存方法是什么?,12.1 JDBC的工作原理,一、什么是JDBC JDBCJava DataBase Connection,JAVA数据库连接的API(Application Progarm Interface-应用程序接口),它允许JAVA应用程序访问任何形式的表格化数据,包括SQL Se
2、rver和ACCESS、Excel等。 JDBC的主要特点:与任何关系数据库协同工作的原理相同,可以适用天任何关系数据库。,12.1 JDBC的工作原理,二、JDBC的工作过程 与数据源建立连接:通过DriverManager类建立与数据源的连接,这个连接作为数据操作的起点,也是连接会话事务操作的基础; 向数据库发出SQL命令:通过Statement类或者PreparedStatement类向数据源发送SQL命令,然后再调用类中的execute方法来执行SQL命令; 处理数据源返回的结果:对于DDL/DML操作,返回被修改的记录数,对于查询操作,返回结果集ResultSet,通过遍历结果集可以
3、获得所需的查询结果。,12.1 JDBC的工作原理,三、JDBC驱动程序的四种类型 JDBCODBC桥ODBC(开放数据库连接):通过ODBC驱动程序提供JDBC访问,缺点是必须加载到目标机器上,并且ODBC-JDBC转换影响效率。 本地API部分JAVA驱动程序:使用本地API与数据源通信,使用JAVA方法调用数据操作的API函数。缺点是必须在目标机器上存放本地代码,不同厂商提供的驱动程序可能不一致;,12.1 JDBC的工作原理,三、JDBC驱动程序的四种类型 JDBCNet纯JAVA驱动程序:将JDBC调用转化为DBMS独立网络协议,然后由服务器转化为DBMS协议。缺点是协议转换困难。
4、本地协议的纯JAVA驱动程序:全部是JAVA驱动程序,允许从JAVA客房端直接调用数据库服务器,不需要对客户端进行配置,只要注册相应的驱动程序即可,同时它全面继承JAVA的跨平台性和安全性,是最理想的驱动程序类型。,12.1 JDBC的工作原理,四、JDBC的两个概念 连接池:建立数据库连接需要较多的时间和资源,采用连接池方法后,可以保持若干已经建好的连接,需要进行数据通信时可以直接使用这些连接,以节省时间和资源。 事务操作:事务transcation,是对一个处理的全部操作过程,当所有步骤全部完成后,这个处理才算结束,否则必须回滚Rollback,即一旦某一步骤失败,则之前所有步骤都要撤销。
5、,12.2 SQLSever2000 for JDBC的安装与测试,一、必备软件/系统需求 数据库: sql server 2000; sql server 2000补丁:sql server 2000 sp3以上; java版本:jdk1.4以上。,12.2 SQLSever2000 for JDBC的安装与测试,一、软件安装 确认 sql server 2000和JDK可正常运行; 安装sql server 2000补丁SP3 安装sql server driver for jdbc ;默认的安装路径是: C:Program FilesMicrosoft SQL Server 2000 D
6、river for JDBC 安装sql server driver for jdbc补丁JDBC SP3。安装目录lib下的三个jar文件是JDBC驱动核心:msbase.jar,mssqlserver.jar,msutil.jar,12.2 SQLSever2000 for JDBC的安装与测试,二、配置 1、配置JCreator:将安装目录lib下的三个jar文件全部加为系统包。步骤是: 配置/选项/JDK配置文件; 选择JDK配置文件,编辑/添加/添加存档; 打开C:Program FilesMicrosoft SQL Server 2000 Driver for JDBClib文件夹
7、; 选择全部三个jar文件,即mssqlserver.jar, msbase.jar,msutil.jar; 打开/确定,12.2 SQLSever2000 for JDBC的安装与测试,二、配置 2、配置SQLServer2000:以Windows管理员身份启动机器,再设置SQL数据库的管理员和密码。步骤: 启动SQL Server2000服务管理器; 启动SQL Server2000企业管理器,右击SQL服务器名,“属性/安全性”,选择身份验证为“SQL Server和 Windows ”,其他不变; 系统若弹出对话框要输入管理员名称和密码,请全部输入“sa”,配置完成。 若没有出现输入管
8、理员名称和密码的对话框,则依次展开“服务器名/安全性/登录”,双击“sa”用户,输入密码为“sa”,确定,配置完成。,12.2 SQLSever2000 for JDBC的安装与测试,三、测试 1、正确结果:用JCreator打开文件Connet.java,编辑运行,如果出现以下结果,表明配置正常。,12.2 SQLSever2000 for JDBC的安装与测试,三、测试 2、错误结果:用JCreator打开文件SQLConnection.java,编辑运行,如果出现以下结果,表明配置错误。 System.Data.SqlClient.SqlException: 用户 sa 登录失败。原因:
9、 未与信任 SQL Server 连接相关联。 解决步骤:这一问题一般是由于SQL Server未集成Windows身份验证导致的,所以解决方案为: 1打开SQL Server企业管理器; 2选择服务器名称上右键选择“编辑SQL Server注册属性”,然后在对话框中选择“使用windows身份验证”; 3试一下,如果不行,再检查安全性设置是否正确,转下一步; 4同样右键,选择“属性”,然后打开“安全性”选项卡; 5在选项卡中,选择身份验证为“SQL Server和 Windows ”,其他不变。,12.2 SQLSever2000 for JDBC的安装与测试,三、测试 3、可能错误:JDB
10、C错误的原因一般有3个: (1)classpath有问题,一般出现在用JDK编辑运行时,用JCreator不会出现此现象; (2)sql server 2000 sp3 补丁没装; (3)用户权限问题: 是否是Windows管理员; 是否是sql server系统管理员sa; 管理员sa的密码是否是sa;,12.2 SQLSever2000 for JDBC的安装与测试,四、测试程序(Connet.java) public class Connet private java.sql.Connection con = null; private final String url = jdbc:m
11、icrosoft:sqlserver:/; private final String serverName= localhost; private final String portNumber = 1433; private final String databaseName= “pubs; private final String userName = sa; private final String password = sa; private final String selectMethod= cursor;,12.2 SQLSever2000 for JDBC的安装与测试,publ
12、ic Connet() private String getConnectionUrl() return url+serverName+:+portNumber+;databaseName=+databaseName+;selectMethod=+selectMethod+; private java.sql.Connection getConnection() try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); con = java.sql.DriverManager.getConnection(getConnec
13、tionUrl(),userName,password); if(con!=null) System.out.println(Connection Successful!); catch(Exception e) e.printStackTrace(); System.out.println(Error Trace in getConnection() : + e.getMessage(); return con; ,12.2 SQLSever2000 for JDBC的安装与测试,public void displayDbProperties() java.sql.DatabaseMetaD
14、ata dm = null; java.sql.ResultSet rs = null; try con= this.getConnection(); if(con!=null) dm = con.getMetaData(); System.out.println(Driver Information); System.out.println(tDriver Name: + dm.getDriverName(); System.out.println(tDriver Version: + dm.getDriverVersion (); System.out.println(nDatabase
15、Information ); System.out.println(tDatabase Name: + dm.getDatabaseProductName(); System.out.println(tDatabase Version: + dm.getDatabaseProductVersion(); System.out.println(Avalilable Catalogs ); rs = dm.getCatalogs(); while(rs.next() System.out.println(tcatalog: + rs.getString(1); rs.close(); rs = n
16、ull; closeConnection(); else System.out.println(Error: No active Connection); catch(Exception e) e.printStackTrace(); dm=null; ,12.2 SQLSever2000 for JDBC的安装与测试,private void closeConnection() try if(con!=null) con.close(); con=null; catch(Exception e) e.printStackTrace(); public static void main(Str
17、ing args) throws Exception Connet myDbTest = new Connet(); myDbTest.displayDbProperties(); ,12.3 JDBC的工作过程,一、JDBC的工作原理 JDBC是支持基本SQL数据库功能的一系列抽象的接口,最重要 的接口包括: Java.sql.Driver Manager(处理驱动的调入并且对产生新的数据库连接提供支持) Java.sql.Connection(代表对特定数据库的连接) Java.sql.Statement(代表一个特定的容器,对一个特定的数 据库执行SQL语句) Java.sql.Resu
18、ltSet(控制对一个特定语句的行数据的存取) 这些接口在不同的数据库功能模块的层次上提供了一个统一的用户界面,使得独立于数据库的Java应用程序开发成为可能,同时提供了多样化的数据库连接方式。JDBC的工作原理如下图:,12.3 JDBC的工作过程,一、JDBC的工作原理 JDBC的工作原理示意图(上图) JDBC与数据库的连接方式(下图),12.3 JDBC的工作过程,二、开 发JDBC 应 用 1.引入一个必要的类 2.加载JDBC驱动程序 3.标识数据源(URL、Username、Password) 4.分配一个Connection对象 5.分配一个Statement对象 6.使用该S
19、tatement对象执行检查 SQL语句 7.返回的ResultSet对象中检索数据类似于迭代器的操作 8.关闭ResultSet对象,关闭Statement对象,关闭Connection对象,12.3 JDBC的工作过程,二、开 发JDBC 应 用 1、装载驱动程序 通过JDBC来连接关系数据库,应用程序必须采取的第一个步骤是加载合适的JDBC驱动程序,并获得一个与该数据库的连接。用JDBC的DriverManager类实现。此类实现了java.sql.Driver接口。加载Driver接口并把它注册给DriverManager类有两种方法: (1)使用Class.forName()方法,一
20、般是:Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); (2)标识jdbc.drivers系统属性内的Driver类,12.3 JDBC的工作过程,2、建立连接 实现Connection接口的一个类对象(即一个Connection对象)代表一个与某个具体数据源的连接。Connection对象实际上是建立一个上下文环境,以便程序员能在它里面创建并执行SQl命令。 Connection databaseConnection = DriverManager.getConnection(sourceURL); 如:con=java
21、.sql.DriverManager.getConnection(getConnectionUrl(), userName, password); 这里的url一般是如下格式: jdbc:microsoft:sqlserver:/+serverName+:+portNumber+;databaseName=+databaseName+;selectMethod=+selectMethod,12.3 JDBC的工作过程,3、语句与结果集 Statement接口提供了执行SQL语句和检索结构的一种方法。由于Statement是一个接口,所以程序员不能直接创建一个Statement对象。通常创建这个
22、对象的方法是: Statement statement = connection.createStatement(); 当建成一个Statement对象之后,它提供一个工作空间供用户创建SQL查询,执行该查询,以及检索返回的任何结果,可以通过调用该Statement对象的下列执行方法来执行SQL查询: executeQuery()用于在单个ResultSet对象的数据库中检索出数据的SQL语句。 executeUpdate()执行不返回ResultSet对象的查询。它的返回值是一个整数(称为更新计数),它给出受到影响的行数。 execute()执行返回多个结果集,多个更新计数值或这两者组合的语
23、句。,12.3 JDBC的工作过程,3、语句与结果集 Statement接口提供了执行SQL语句和检索结构的一种方法。由于Statement是一个接口,所以程序员不能直接创建一个Statement对象。通常创建这个对象的方法是: Statement statement = connection.createStatement(); 当建成一个Statement对象之后,它提供一个工作空间供用户创建SQL查询,执行该查询,以及检索返回的任何结果,可以通过调用该Statement对象的下列执行方法来执行SQL查询: executeQuery()用于在单个ResultSet对象的数据库中检索出数据的
24、SQL语句。 executeUpdate()执行不返回ResultSet对象的查询。它的返回值是一个整数(称为更新计数),它给出受到影响的行数。 execute()执行返回多个结果集,多个更新计数值或这两者组合的语句。,12.3 JDBC的工作过程,4、应用举例 (1)下面的语句建立名为cx的Statement对象: Statement cx=con.creatStatement(); 在Statement对象上,可以使用execQuery方法执行查询语句。execQuery的参数是一个String对象,即一个SQL的Select语句。它的返回值是一个ResultSet类的对象。 Result
25、Set result=cx.execQuery(“SELECT * FROM A”) 该语句将在result中返回表A中的所有行。 对Result对象进处理后,才能将查询结果显示给用户。Result 对象包括一个由查询语句返回的一个表,这个表中包含所有的 查询结果。对Result对象的处理必须逐行,而对每一行中的各 个列,可以按任何顺序进行处理。Result类的getXXX方法可将 结果集中的SQL数据类型转换为Java数据类型。,12.3 JDBC的工作过程,4、应用举例 (2)对数据库中的记录可以进行修改、插入和删除操作,分别对应于SQL的Update、Insert 和Delete 操作。
26、 同Select语句类似,executeUpdate方法的参数是一个String对象,即要执行的SQL语句。它返回一个整数。对于修改、插入和删除操作,返回的是操作记录 的行数,对于不返回值的SQL语句,executeUpdate方法返回零。例: cx.executeUpdate=(“UPDATE A SET Code=5 WHERE DEPARTMENT=COMPUTER”),12.3 JDBC的工作过程,三、java.sql包的用法 1、主要接口: 软件包 java.sql提供使用 JavaTM编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 Java(TM)是Su
27、n公司的商标,标识了一系列在独立的和网络化的环境中创建并安全的运行程序的技术。 Array:SQL类型ARRAY,在 Java 编程语言中的映射关系。 CallableStatement:用于执行 SQL 存储过程的接口。 Connection:与特定数据库的连接(会话)。 DatabaseMetaData关于数据库的整体综合信息。 Driver:每个驱动程序类必须实现的接口。 ParameterMetaData可用于获取关于 PreparedStatement 对象中参数的类型和属性信息的对象。,12.3 JDBC的工作过程,三、java.sql包的用法 PreparedStatement表
28、示预编译的 SQL 语句的对象。 ResultSet表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 ResultSetMetaData可用于获取关于 ResultSet 对象中列的类型和属性信息的对象。 Savepoint保存点的表示形式,保存点是可以从 Connection.rollback 方法引用的当前事务中的点。 SQLData该接口用于 SQL 用户定义类型 (UDT) 到 Java 编程语言中类的自定义映射关系。 SQLInput一个输入流,它包含表示 SQL 结构化类型或 SQL 不同类型的实例的值组成的流。 SQLOutput用于将用户定义类型的属性写回数据库的输
29、出流。 Statement用于执行静态 SQL 语句并返回它所生成结果的对象。 Struct用于 SQL 结构化类型的 Java 编程语言中的标准映射关系。,12.3 JDBC的工作过程,三、java.sql包的用法 2、类,12.3 JDBC的工作过程,三、java.sql包的用法 3、异常,12.3 JDBC的工作过程,四、应用举例:向northwind数据库中的表categories插入2条记录 import java.sql.*; import .URL; public class insert public static void main(String args) String u
30、rl=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=northwind; String query=select * from categories; String query1=insert categories values(10,Hanbao,Sweet); String query2=insert categories values(11,Naicha,Coffee taste);,12.3 JDBC的工作过程,try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerD
31、river); Connection con=DriverManager.getConnection(url,sa,sa); Statement stmt=con.createStatement(); stmt.executeUpdate(query); stmt.executeUpdate(query1); stmt.executeUpdate(query2); stmt.close(); con.close(); catch(SQLException ex) catch(java.lang.Exception ex) ex.printStackTrace(); ,12.4 数据库综合应用,
32、首先用户在SQL Server 2000中手工建立一个数据库bookstore,所有参数均取默认值,然后编写Java程序在此数据库中建立一个表books,并实现对books表的管理,表包含的字段如表下所示:,12.4 SQL Server2000数据库应用,功能要求:能够实现建表、删除表、删除全部记录、删除指定记录、修改指定记录的内容、插入新记录和根据字段值插入记录等功能。 程序实现: import java.sql.*; public class DBTableManager /主类,用于表的管理 private static final String DRIVER_NAME = com.m
33、icrosoft.jdbc.sqlserver.SQLServerDriver; private static final String URL = jdbc:microsoft:sqlserver:/localhost:1433;User=sa;Password=sa;DatabaseName=bookstore;,12.4 SQL Server2000数据库应用,public void update(int id, String name, float price, String auth) /修改记录内容 try /?表示占位符,运行时将会被指定参数替换 Class.forName(co
34、m.microsoft.jdbc.sqlserver.SQLServerDriver); Connection conn = DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433;user=sa;passWord=sa;DatabaseName=bookstore); String update = Update books set bookName=?,bookPrice=?,bookauthor=? where bookId=?; PreparedStatement pstm = conn.prepareS
35、tatement(update); pstm.setString(1, name); /第1个参数,表示bookName pstm.setFloat(2, price); /第2个参数,表示bookPrice pstm.setString(3, auth); /第3个参数,表示author pstm.setInt(4, id); /第4个参数,表示bookID pstm.executeUpdate(); /执行更新操作 pstm.close(); conn.close(); catch (ClassNotFoundException e) e.printStackTrace(); catch
36、(SQLException e) e.printStackTrace(); ,12.4 SQL Server2000数据库应用,public void selectId(int id) /根据id号查询输出指定记录 try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); Connection conn = DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433;user=sa;password=sa;DatabaseName=booksto
37、re); String sql = select * from books where bookId=?; PreparedStatement pstm = conn.prepareStatement(sql); pstm.setInt(1, id); /替换第1个占位符,表示bookID ResultSet sr = pstm.executeQuery(); /建立结果集 while (sr.next() /逐一读出各记录的列,并存贮在变量中 int i = sr.getInt(bookId); String name = sr.getString(bookName); int price
38、= sr.getInt(bookPrice); String auth = sr.getString(bookauthor); System.out.printf(%8dt%8st%8dt%8srn, i, name, price, auth); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace(); ,12.4 SQL Server2000数据库应用,public void select() /查询输出表记录 try Class.forName(com.
39、microsoft.jdbc.sqlserver.SQLServerDriver); Connection conn = DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433;user=sa;password=sa;DatabaseName=bookstore); String select = select * from books; PreparedStatement ptsm = conn.prepareStatement(select); ResultSet rs = ptsm.executeQuery
40、();/ 记录器 while (rs.next() int id = rs.getInt(bookId); String name = rs.getString(bookName); int price = rs.getInt(bookPrice); String auth = rs.getString(author); System.out.printf(%8dt%8st%8dt%8srn, id, name, price, auth); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace(); ,12.4 SQL Server2000数据库应用,public
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省高安第二中学2025年高二物理第二学期期末教学质量检测试题含解析
- 冬季期末家长会课件
- 2025届江西省赣中南五校联考物理高一第二学期期末联考模拟试题含解析
- 2025版餐厅食品安全管理与经营风险防控合同
- 2025版汽车维修行业绿色环保服务合同
- 二零二五版财务软件定制开发及实施服务协议
- 二零二五年度生态农业园建设项目施工合同细则
- 二零二五年智能仓储物流包月运输合作协议
- 宝洁校园健康计划课件
- 二零二五年度工业产权互换项目实施合同范本
- 基于核心素养的单元整体教学设计
- 《看病歌诀》全文背诵版
- 影视剧后期制作合作协议
- 《浅析5G通信的军事应用》2300字
- 拖欠工程款上访信范文
- 2025四川成都市新都区事业单位招聘历年管理单位笔试遴选500模拟题附带答案详解
- 2024在用井口装置检验技术指南
- 2024年第一季度医疗安全(不良)事件分析报告
- 足下垂的原因及治疗方法
- 一级焊缝施工方案
- 2024年印度饲料原料行业状况及未来发展趋势报告
评论
0/150
提交评论