




已阅读5页,还剩62页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲教师 李青TELmail LKJ0986 信息技术学院 JAVA编程 第10章主要内容 1 JDBC概述2 JDBC预备知识3 连接数据库4 JDBC编程实例 10 1JDBC概述 JDBC即Java数据库连接 JavaDatabaseConnectivity 它由一组用Java语言编写的类和接口组成 JDBC为数据库及其工具开发人员提供了一个标准的API 使他们能够用纯JavaAPI来编写数据库应用程序 Jdbc的结构 Jdbc有两种接口 分别是面向开发人员的JDBCAPI和面向低层的JDBCDriverAPI JDBC的结构 JDBCAPI是一系列的接口 他使得应用程序能够进行数据库联接 执行SQL语句 并且得到返回结果 JDBC的结构 Java sql DriverManager用来装载驱动程序 并且为创建新的数据库联接提供支持 Java sql Connection完成对某一指定数据库的联接Java sql Statement在一个给定的连接中作为SQL执行声明的容器 他包含了两个重要的子类型 Java sql PreparedSatement用于执行预编译的sql声明Java sql CallableStatement用于执行数据库中存储过程的调用Java sql ResultSet对于给定声明取得结果的途径 JDBCDriverinterface 是面向驱动程序开发商的接口 每一个驱动程序都必须提供对于java sql Connection java sql Statement java sql PreparedStatement java sql ResultSet等主要接口的实现方法 Java sql DriverManager需要装载驱动程序时 每个驱动程序需要提供一个能实现java sql Driver接口的类 例如 sun jdbc odbc JdbcOdbcDrivercom microsoft jdbc sqlserver SQLServerDriver JDBC驱动程序的类型 重要 Jdbc odbc桥Native apipartly javadriver本地java驱动程序 将jdbc调用转换为对数据库客户端API的调用Net protocolall javaDriver Jdbcproxy 将jdbc调用转换为独立于特定数据库的网络协议 完全java驱动程序Native protocolall javadriver将JDBC调用转换为特定数据库的网络协议 完全Java驱动程序 数据库厂商专用的 网络协议搭配的 数据库应用模型 Jbbc各接口之间的关系 10 2JDBC预备知识 SQL是英文Structuredquerylanguage的缩写 意思为结构化查询语言 SQL语言的主要功能就是同各种数据库建立联系 进行沟通 主要包括select insert update delete create以及drop在内的标准SQL命令被用来完成几乎所有的数据库操作 10 2 1SQL语句的基本内容 1 数据表 一个典型的关系型数据库通常由一个或多个数据表组成 数据库中的所有数据或信息都被保存在这些数据表中 数据库中的每一个表都有惟一的表名 数据表由行和列组成 其中每一列 又称字段 包括了该列名称 数据类型以及列的属性等信息 而行则包含这些列的具体数据的记录 2 数据查询 Select语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据 Select语句的语法格式如下 selectcolumn1 column2 fromtablename wherecondition Select语句中位于Select关键词之后的列名用来决定哪些列将作为查询结果返回 用户可以按照自己的需要选择任意列 还可以使用通配符 来设定返回表格中的所有列 语句中位于from关键词之后的表名用来决定将要进行查询操作的数据表 where可选句用来规定哪些数据值或哪些行将被作为查询结果返回或显示 3 创建数据表 SQL语言中的createtable语句被用来建立新的数据表 createtable语句的使用格式如下 createtabletablename column1datatype column2datatype 使用SQL语句创建的数据表及表中的列的名称必须以字母开头 后面可以使用字母 数字或下划线 名称的长度不能超过30个字符 4 向数据表中插入数据 SQL语言使用insert语句向数据表中插入或添加新的数据行 insert语句的使用格式如下 Insertintotablename first column last column Values first value last value SQL语言使用update语句更新或修改符合规定条件的记录 update语句的使用格式为 updatetablenamesetcolumnname newvalue nextcolumn newvalue2 wherecolumnnameOPERATORvalue and orcolumnOPERATORvalue 5 更新记录 6 删除记录 SQL语言使用delete语句删除数据表中的行或记录 delete语句格式如下 deleteformtablenamewherecolumnnameOPERATORvalue and orOPERATORvalue 在SQL语言中使用droptable命令删除某个数据表以及该表中的所有记录 droptable命令的使用格式如下 droptabletablename 7 删除数据表 10 2 2JDBCAPI介绍 JDBCAPI所有的类和接口都集中在Java sql和Javax sql这两个包中 它的功能主要针对的是基本数据库编程服务 如生成连接 执行语句以及准备语句和运行批处理查询等 也有一些其他的高级功能 一般编写JDBC程序编写步骤 10 3连接数据库 Connection对象代表与数据库的连接 连接过程包括所执行的SQL语句和在该连接上所返回的结果 一个应用程序可与单个数据库有一个或多个连接 或者可与许多数据库有连接 10 3 1打开连接 与数据库建立连接的标准方法是调用DriverManager getConnection方法 该方法接受含有某个URL的字符串 比如 显示如何打开一个与位于URL jdbc odbc wombat 的数据库的连接 所用的用户标识符为 oboy 口令为 12Java Stringurl jdbc odbc wombat Connectioncon DriverManager getConnection url oboy 12Java URL 统一资源定位符 提供在Internet上定位资源所需的信息 URL的第一部份指定了访问信息所用的协议 后面总是跟着冒号 URL的其余部份 冒号后面的 给出了数据资源所处位置的有关信息 比如 10 3 2URL的一般用法 JDBCURL提供了一种标识数据库的方法 可以使相应的驱动程序能识别该数据库并与之建立连接 JDBC的作用是提供某些约定 驱动程序编程员在构造他们的JDBCURL时应该遵循这些约定 10 3 3JDBCURL JDBCURL的标准语法如下所示 它由三部分组成 各部分间用冒号分隔 jdbc 子协议odbc是一种特殊情况 它是为用于指定ODBC风格的数据资源名称的URL而保留的 并具有下列特性 允许在子名称 数据资源名称 后面指定任意多个属性值 odbc子协议的完整语法为 jdbc odbc 10 3 4odbc子协议 驱动程序编程员可保留某个名称以将之用作JDBCURL的子协议名 当DriverManager类将此名称加到已注册的驱动程序清单中时 为之保留该名称的驱动程序应能识别该名称并与它所标识的数据库建立连接 例如 odbc是为JDBC ODBC桥而保留的 10 3 5注册子协议 SQL语句连接一旦建立 就可用来向它所涉及的数据库传送SQL语句 JDBC对可被发送的SQL语句类型不加任何限制 这就提供了很大的灵活性 即允许使用特定的数据库语句或甚至于非SQL语句 10 3 6发送SQL语句 JDBC提供了三个类 用于向数据库发送SQL语句 1 Statement 由方法createStatement所创建 Statement对象用于发送简单的SQL语句 2 PreparedStatement 由方法prepareStatement所创建 3 CallableStatement 由方法prepareCall所创建 不同Connection方法来创建不同类型的SQL语句 createStatement方法用于 简单的SQL语句 不带参数 prepareStatement方法用于 带一个或多个IN参数 经常被执行的简单SQL语句prepareCall方法用于 调用已储存过程 10 4JDBC编程实例 通过JDBC访问数据库 建立连接所有Jdbc程序的第一步都是与数据库建立连接 用户得到一个java sql Connection的对象加载驱动程序 通过设置Java属性中的sql driver来制定驱动程序列表 使用Class forName 显式加载驱动程序 例如Class forName sun jdbc odbc JdbcOdbcDriver 加载了sun公司提供的jdbc odbc桥驱动程序 由驱动程序负责向DriverManager登记 在数据库连接时 DriverManager将试图使用此驱动程序 Class forName com microsoft jdbc sqlserver SQLServerDriver 加载SqlServer的驱动程序 与数据库的连接 建立连接指定数据库连接的url 数据源的位置使用DriverManager getConnection url 例如 Stringurl jdbc odbc datasource 或者 jdbc microsoft sqlserver server name 1433 Connectionconn DriverManager getConnection url 或者 Connectionconn DriverManager getConnection Stringurl Stringuser Stringpassword 了解数据库中的信息 在和数据库建立连接后 就可以获得有关数据源的各种信息 表 列 数据类型 存储过程等 这些信息通过DatabaseMetaData类的对象上实现的 DatabaseMetaDatadbma conn getMetaData 其中提供了很多方法获取数据源的各个方面的信息 这些方法中 有一些用字符串匹配搜索模式作为参数 匹配单个字符 匹配0个或多个字符 一个值为null的JavaString可以与任何字符串匹配 对某些方法 有些驱动程序可能不支持 会产生一个SQLException意外 了解数据库中的信息 基本信息getURL getUserName isReadOnly getDatabaseProduceName j getDriverName getDriverVersion 其他getTables getColumns getIndexInfo 查询数据库 Statement 创建Statement用户执行sql语句 Statementstmt conn createStatement 执行查询语句Stringsql select fromcustomer ResultSetrs stmt executeQuery sql executeQuery 一般用于执行一个sql语句 返回一个结果集 execute 方法返回多个结果集 一个Statement对象在同一时间只能打开一个结果集 对第二个结果集的打开隐含着对第一个结果集的关闭 关闭Statement stmt close Insert简单的例子 Connectioncon DriverManager getConnection conURL 使用SQL命令insert插入三条顾客纪录到表中Statements con createStatement Stringr1 insertintoconsumervalues 00001 王明 360 Stringr2 insertintoconsumervalues 00002 高强 728 Stringr3 insertintoconsumervalues 00003 李丽 1182 s executeUpdate r1 s executeUpdate r2 s executeUpdate r3 s close con close 查询数据库 PreparedStatement Statement对象在每次执行sql语句时都将语句传给数据库 在多次执行同一个语句时 效率比较低 可以使用PreparedStatement 使用数据库的预编译功能 速度可以提高很多 PreparedStatement对象的sql语句可以接受参数 每次执行时可以传递不同的参数 但使用prepared语句 在进行数据库调用之前 应用程序就会将该语句送到数据库 数据库对其进行解释 并创建一个查询计划 所谓查询计划 就是数据库执行相关查询的一个蓝图 每当有SQL语句被送到数据库时 就会建立一个相应的查询计划 并按照这个计划来执行查询操作 采用prepared语句的形式来发送SQL语句 将容许数据库对相应的语句仅建立一次查询计划 JDBC提供了PreparedStatement类来处理preparedSQL语句 PreparedStatement类是Statement类的子类 与Statement相比PreparedStatement增加了在执行SQL调用之前 将输入参数绑定到SQL调用中的功能 所谓绑定参数 是指它容许将相关参数转换为Java数据类型 当需要在同一个数据库表中完成一组记录的更新时 使用PreparedStatement类是一个很好的选择 比如 如果需要一次更新多条顾客的购物金额记录时 查询数据库 PreparedStatement 创建Stringsql select fromcustomerwhereage PreparedStatementpstmt conn prepareStatement sql 执行pstmt setInt 1 30 ResultSet pstmt executeQuery 关闭Pstmt close 例如 原来的做法 Statementstm con createStatement inti consumer为一个对象数组for i 0 i consumer length i stm executeUpdate updateconsumer settotalmoney consumer i getMoney whereid consumer i getID mit stm close con close 采用预编译PreparedStatementpstm con prepareStatement updateconsumersettotalmoney Whereid inti consumer作为一个对象数组for i 0 i consumer length i pstm setString 1 consumer i getMongy pstm setString 2 consumer i getID pstm execute mit pstm close con close 查询数据库 CallableStatement 用于执行存储过程创建 Connection的对象又一个方法prepareCall 可以创建一个CallableStatement对象 参数格式是 callprocedureName 其中procedureName是存储过程的名称 比如存储过程的名称叫Qurey1 CallableStatementcstmt conn prepareCall callQuery1 执行ResultSetrs cstmt executeQuery 关闭cstmt close 检索结果集 前面讲了如何执行sql语句 返回了ResultSet类的对象 这里讲如何对ResultSet对象进行处理ResultSet的基本处理方法ResultSet对象包括一个由查询语句返回的一个表 这个表中包含所有的查询结果 按照行和列进行处理 ResultSet对象维持一个指向当前行的指针 最初 这个指针指向第一行之前 ResultSet类的next 方法使这个指针移向下一行 第一次 使用next 方法 将指针指向结果集的第一行 next方法的返回值是一个boolean值 若为true 则成功移向下一行 若返回false则没有下一行 getXXX方法可以从某一列中获得结果 其中XXX是jdbc中的java数据类型 如getInt 需要制定检索的列 或名称 检索结果集 Statementstmt conn createStatement Stringsql selecta b cfrommytable ResultSetrs stmt executeQuery sql While rs next inti rs getInt 1 Strings rs getString a byteb rs getBytes 3 数据转换 ResultSet结果集中Sql类型和java数据类型之间的转换比如结果集中 某一列的数据是varchar 30 就可以使用getString 参数 方法获取值 比如在SQLServer数据库中 数据类型bit有两个值1 0 在结果集中 可以用getBoolean 参数 获取 参照表15 1 数据类型转换表 读取较长的值 如何读取longvarchar longvarbinary的值getString getBytes有长度限制 Statement中的setMaxFieldSize设置 ResultSet的对象可以从数据上返回java io InputStream 获得流后应立即读取 执行next方法后 流将关闭 获取的方法有getBinaryStream getAsciiStream getUnicodeStream getCharacterStream 例子 Statementstmt conn createStatement Stringsql selectxfrommytable ResultSetrs stmt executeQuery Bytebuff newbyte 4096 While r next InputStreamis rs getAssicStream for intsize is read buff if size 0 break 获取结果集的信息ResultsetMetaData 可以获取结果集中的列的名称 数据类型等 ResultsetMetaDatarsmd rs getMetaData getColumnCount getColumnName intcolumn getColumnType intcolumn 返回int值getColumnTypeName intcolumn 返回字符串isReadOnly intcolumn isNullable intcolumn 更新数据库 包括修改 更新和删除记录 创建和删除表 以及增加和删除列 对应于数据库的insert update delete create drop等 对数据库的更新操作也是通过Statement对象完成的 不使用executeQuery 方法 使用executeUpdate 方法 executeUpdate的返回值是它影响的记录的行数 更新数据库 例如Stringsql updateCustomersetaddress Peking wherelastname Li inti Stmt executeUpdate sql 返回更新的行数 参数的输入和输出 Jdbc允许在要执行的sql语句中设置参数 用 代表参数需要使用PreparedStatement CallableStatement 用setXXX 方法给参数赋值 XXX是jdbc数据类型 第一个参数是位置是1 第二个参数的位置是2CallableStatement可以设置输出参数例子 预编译的例子 conn DriverManager getConnection url 带参数的sql语句sql insertinto公司 公司名称 地址 城市 邮政编码 国家 values 使用PreparedStatement 可以接收输入参数pstmt conn prepareStatement sql 根据参数的位置 设置参数的值pstmt setString 1 company pstmt setString 2 address pstmt setString 3 city pstmt setString 4 postcode pstmt setString 5 state 执行插入操作count pstmt executeUpdate System out println 插入的记录数 count 删除的例子 intcount 0 Stringwhere where公司编号 1 try 装载驱动程序Class forName sun jdbc odbc JdbcOdbcDriver 数据库的URLurl jdbc odbc contact 获取数据库连接conn DriverManager getConnection url 创建SQL声明stmt conn createStatement if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民用燃气安全培训教材课件
- 民爆安全检查课件
- 民法知识培训班课件
- 打包机操作考试题及答案
- 常德市中考试卷及答案
- 民族风格课件
- 电子信息产业新质生产力
- 农业新质生产力宣传片
- 新质生产力:理论与实践
- 民族服装主题课件
- 2025-2026学年人教版PEP英语二年级上册教学计划(三篇)
- 2025年秋季学期教科版二年级上册科学教学计划(三篇)
- 买家赎楼签协议签合同
- (2025年标准)整容医师聘用协议书
- 煤矿机电考试试题及答案
- 2025至2030年中国虹膜识别市场深度调查分析及投资前景研究预测报告
- 《3-6岁幼儿学习与发展指南》试题及答案
- (2025年标准)合作办厂简单协议书
- 2025年新职工院感防控及传染病防治知识培训试题及答案
- 2025-2026学年人教版(2024)初中信息科技七年级(全一册)教学计划及进度表(第一学期)
- 2025年公安局招聘警务辅助人员考试笔试试题(含答案)
评论
0/150
提交评论