




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章JDBC数据库操作 11 1MicrosoftAccess数据库管理系统 11 1 1建立数据库单击 开始 所有程序 MicrosoftOffice MicrosoftAccess 在新建数据库界面选择 空Access数据库 然后命名 保存新建的数据库 在这里我们命名的数据库是shop 保存在C ch11中 图11 1建立新Access的数据库 图11 2保存Access的数据库 11 1 2创建表 创建好数据库后 就可以在该数据库下建立若干个表 我们准备在shop数据库中创建名字为goods的表 在shop管理的 表 的界面上选择 使用设计器创建表 然后单击界面上的 设计 菜单 将出现相应的建表界面 我们建立的表是goods 该表的字段 属性 为 number 文本 name 文本 madeTime 日期 price 数字 双精度 其中 number 字段为主键 在该字段上单击鼠标右建来设置字段是否是主建 在shop管理的 表 的界面上 用鼠标双击已创建的goods表可以为该表添加记录 图11 3goods表及字段属性 图11 4向goods表添加记录 11 2JDBC 为了使Java编写的程序不依赖于具体的数据库 Java提供了专门用于操作数据库的API 即JDBC 我们经常使用JDBC进行如下的操作 与一个数据库建立连接 向已连接的数据库发送SQL语句 处理SQL语句返回的结果 11 3连接数据库 11 3 1连接方式的选择和数据库建立连接的常用两种方式是 建立JDBC ODBC桥接器和加载纯Java数据库驱动程序为了便于教学 本章使用JDBC ODBC桥接器方式和数据库建立连接 JDBC ODBC桥接器的优点是 ODBC OpenDataBaseConnectivity 是Microsoft引进的数据库连接技术 提供了数据库访问的通用平台 而且ODBC驱动程序被广泛的使用 建立这种桥接器后 使得JDBC有能力访问几乎所有类型的数据库 缺点是 使得应用程序依赖于ODBC 移植性较差 也就是说 应用程序所驻留的计算机必须提供ODBC 使用加载纯Java数据库驱动程序连接数据库的优点是不依赖平台 11 3 2建立JDBC ODBC桥接器 JDBC使用java lang包中的Class类建立JDBC ODBC桥接器 Class类通过调用它的静态方法forName加载sun jdbc odbc包中的JdbcOdbcDriver类建立JDBC ODBC桥接器 建立桥接器时可能发生异常 必须捕获这个异常 建立桥接器的代码是 try Class forName sun jdbc odbc JdbcOdbcDriver catch ClassNotFoundExceptione System out println e 11 3 3ODBC数据源 1 创建 修改或删除数据源选择 控制面板 管理工具 ODBC数据源 某些window xp系统 需选择 控制面板 性能和维护 管理工具 ODBC数据源 图11 7添加 修改或删除数据源 2 为数据源选择驱动程序在图11 7所示的界面上选择单击 添加 按钮 出现为新增的数据源选择驱动程序界面 图11 8为新增的数据源选择驱动程序 3 数据源名称及对应数据库的所在位置在图11 8界面单击完成按钮将出现设置数据源具体项目的对话框 图11 9设置数据源的名字和对应的数据库 11 3 4建立连接 编写连接数据库代码不会出现数据库的名称 只能出现数据源的名字 首先使用java sql包中的Connection类声明一个对象 然后再使用类DriverManager调用它的静态方法getConnection创建这个连接对象 Connectioncon DriverManager getConnection jdbc odbc 数据源名字 loginname password 假如没有为数据源设置loginname和password 那么连接形式是 Connectioncon DriverManager getConnection jdbc odbc 数据源名字 为了能和数据源myData交换数据 建立连接时应捕获SQLException异常 try Connectioncon DriverManager getConnection jdbc odbc myData catch SQLExceptione 11 4查询操作 1 向数据库发送SQL查询语句首先使用Statement声明一个SQL语句对象 然后让已创建的连接对象con调用方法createStatment 创建这个SQL语句对象 代码如下 try Statementsql con createStatement catch SQLExceptione 2 处理查询结果有了SQL语句对象后 这个对象就可以调用相应的方法实现对数据库中表的查询和修改 并将查询结果存放在一个ResultSet类声明的对象中 也就是说SQL查询语句对数据库的查询操作将返回一个ResultSet对象 ResultSet对象是以统一形式的列组织的数据行组成 ResultSet对象一次只能看到一个数据行 使用next 方法走到下一数据行 获得一行数据后 ResultSet对象可以使用getXxx方法获得字段值 将位置索引 第一列使用1 第二列使用2等等 或列名传递给getXxx方法的参数即可 11 4 1顺序查询 怎样知道一个表中有哪些字段呢 通过使用JDBC提供的API 可以在查询之前知道表中的字段的个数和名字 这有助于编写可复用的查询代码当创建好连接对象con之后 那么该连接对象调用getMetaData 方法可以返回一个DatabaseMetaData对象 例如 DatabaseMetaDatametadata con getMetaData Metadata对象再调用getColumns可以将表的字段信息以行列的形式存储在一个ResultSet对象中 例如 ResultSettableMessage metadata getColumns null null goods null 如果goods表有n个字段 tableMessage就刚好有n行 每行4列 每行分别含有和相应字段有关的信息 信息的次序为 数据库名 数据库扩展名 表名 字段名 tableMessage对象调用next方法使游标向下移动一行 游标的初始位置在第1行之前 然后tableMessage调用getXXX方法可以查看该行中列的信息 11 4 2控制游标 有时候需要在结果集中前后移动 显示结果集中某条记录或随机显示若干条记录等 这时 必须要返回一个可滚动的结果集 为了得到一个可滚动的结果集 需使用下述方法获得一个Statement对象 Statementstmt con createStatement inttype intconcurrency 然后 根据参数的type concurrency的取值情况 stmt返回相应类型的结果集 ResultSetre stmt executeQuery SQL语句 type的取值决定滚动方式 取值可以是 ResultSet TYPE FORWORD ONLY 结果集的游标只能向下滚动 ResultSet TYPE SCROLL INSENSITIVE 结果集的游标可以上下移动 当数据库变化时 当前结果集不变 ResultSet TYPE SCROLL SENSITIVE 返回可滚动的结果集 当数据库变化时 当前结果集同步改变 Concurrency取值决定是否可以用结果集更新数据库 Concurrency取值 ResultSet CONCUR READ ONLY 不能用结果集更新数据库中的表 ResultSet CONCUR UPDATABLE 能用结果集更新数据库中的表 滚动查询经常用到ResultSet的下述方法 publicbooleanprevious 将游标向上移动 该方法返回boolean型数据 当移到结果集第一行之前时返回false publicvoidbeforeFirst 将游标移动到结果集的初始位置 即在第一行之前 publicvoidafterLast 将游标移到结果集最后一行之后 publicvoidfirst 将游标移到结果集的第一行 publicvoidlast 将游标移到结果集的最后一行 publicbooleanisAfterLast 判断游标是否在最后一行之后 publicbooleanisBeforeFirst 判断游标是否在第一行之前publicbooleanifFirst 判断游标是否指向结果集的第一行 publicbooleanisLast 判断游标是否指向结果集的最后一行 publicintgetRow 得到当前游标所指行的行号 行号从1开始 如果结果集没有行 返回0publicbooleanabsolute introw 将游标移到参数row指定的行号 11 4 3条件查询 见例11 4 11 4 4排序查询 可以在SQL语句中使用ORDERBY子语句对记录排序 例如 按price排序查询的SQL语句 SELECT FROMgoodsORDERBYprice 11 4 5模糊查询 可以用SQL语句操作符LIKE进行模式般配 使用 代替零个或多个字符 用一个下划线 代替一个字符 用 abc 代替a b c中的任何一个 比如 下述语句查询商品名称中含有 电 或 箱 的记录 rs sql executeQuery SELECT FROMgoodsWHEREnameLIKE 电箱 11 5更新 添加与删除操作 Statement对象调用方法 publicintexecuteUpdate StringsqlStatement 通过参数sqlStatement指定的方式实现对数据库表中记录的更新 添加和删除操作 更新 添加和删除记录的SQL语法分别是 UPDATESET 新值WHEREINSERTINTO表 字段列表 VALUES 对应的具体的记录 或INSERTINTO表 VALUES 对应的具体的记录 DELETEFROMWHERE 11 6使用预处理语句 Java提供了更高效率的数据库操作机制 就是PreparedStatement对象 该对象被习惯地称作预处理语句对象 11 6 1预处理语句优点 如果应用程序能针对连接的数据库 事先就将SQL语句解释为数据库地层的内部命令 然后直接让数据库去执行这个命令 显然不仅减轻了数据库的负担 而且也提高了访问数据库的速度 对于JDBC 如果使用Connection和某个数据库建立了连接对象con 那么con就可以调用prepareStatement Stringsql 方法对参数sql指定的SQL语句进行预编译处理 生成该数据库地层的内部命令 并将该命令封装在PreparedStatement对象中 那么该对象调用下列方法都可以使得该地层内部命令被数据库执行 ResultSetexecuteQuery booleanexecute intexecuteUpdate 只要编译好了PreparedStatement对象 那么该对象可以随时地执行上述方法 显然提高了访问数据库的速度 11 6 2使用统配符 在对SQL进行预处理时可以使用统配符 来代替字段的值 只要在预处理语句执行之前再设置统配符所表示的具体值即可 例如 sql con prepareStatement SELECT FROMgoodsWHEREsalary 那么在sql对象执行之前 必须调用相应的方法设置统配符 代表的具体值 比如 sql setFloat 1 76 98 指定上述预处理SQL语句中统配符 代表的值是76 389 通配符按着它们在预处理SQL语句中从左到右依次出现的顺序分别被称做第1个 第2个 第m个统配符 比如 下列方法 voidsetFloat intparameterIndex intx 用来设置通配符的值 其中参数parameterIndex用来表示SQL语句中从左到右的第parameterIndex个统配符号 x是该统配符所代表的具体值 尽管sql con prepareStatement SELECT FROMgoodsWHEREprice sql setFloat 1 30 98 的功能等同于sql con prepareStatement SELECT FROMgoodsWHEREprice 30 98 但是 使用统配符可以使得应用程序更容易动态地改变SQL语句中关于字段值的条件 预处理语句设置统配符 的值的常用方法有 voidsetDate intparameterIndex Datex voidsetDouble intparameterIndex doublex voidsetFloat intparameterIndex floatx voidsetInt intparameterIndex intx voidsetLong intparameterIndex longx voidsetString intparameterIndex Stringx 11 7事务 11 7 1事务及处理事务由一组SQL语句组成 所谓事务处理是指 应用程序保证事务中的SQL语句要么全部都执行 要么一个都不执行 11 7 2JDBC事务处理步骤 和数据库建立一个连接对象后 比如con 那么con的提交模式是自动提交模式 即该连接对象con产生的Statement PreparedStatement对象 对数据库提交任何一个SQL语句操作都会立刻生效 使得数据库中的数据发生变化 这显然不能满足事物处理的要求 为了能进行事务处理 必须关闭con的这个默认设置 con对象首先调用setAutoCommit booleanautoCommit 方法 将参数autoCommit取值false来关闭默认设置 con setAutoCommit false 2 使用commit 方法con调用setAutoCommit false 后 con产生的Statement对象对数据库提交任何一个SQL语句操作都不会立刻生效 这样一来 就有机会让Statement对象 PreparedStatement对象 提交多个SQL语句 这些SQL语句就是一个事务 事务中的SQL语句不会立刻生效 直到连接对象con调用commit 方法 con调用commit 方法就是让事务中的SQL语句全部生效 3 使用rollback 方法con调用commit 方法进行事务处理时 只要事务中任何一个SQL语句没有生效 就抛出SQLException异常 在处理SQLException异常时 必须让con调用rollback 方法 其作用是 撤消事务中成功执行过的SQL语句对数据库数据所做的更新 插入或删除操作 即撤消引起数据发生变化的SQL语句操作 将数据库中的数据恢复到commi 方法执行之前的状态 11 8批处理 JDBC为Statement对象提供了批处理功能 即Statement对象调用executeBatch 方法可以一次执行多个SQL语句 只要事先让Statement对象调用addBatch Stringsql 方法将要执行的SQL语句添加到该对象中即可 在对若干个SQL进行批处理时 如果不允许批处理中的任何SQL语句执行失败 那么和前面讲解处理事务的情况相同 要事先关闭连接对象的自动提交模式 即将批处理作为一个事务来对待 否则批处理中成功执行的SQ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省杭州市下沙区重点达标名校2024-2025学年初三下学期入学摸底测试生物试题含解析
- 江苏省东台市第一中学2025年高三第七次月考含解析
- 西北政法大学《形势与政策8》2023-2024学年第一学期期末试卷
- 紫阳县2025年三年级数学第二学期期末教学质量检测试题含解析
- 潢川县2024-2025学年数学三下期末考试模拟试题含解析
- 吉林省普通高中联合体2025届高三考前热身适应性考试(一)物理试题含解析
- 上海邦德职业技术学院《兽医毒理学》2023-2024学年第二学期期末试卷
- 长春大学旅游学院《非遗手工技艺实践》2023-2024学年第二学期期末试卷
- 创业企业竞争分析重点基础知识点
- DB32/T+5095.3-2025+医防融合数据传输接口规范++第3部分:严重精神障碍
- 幼儿园故事课件:《胸有成竹》
- GB/T 43200-2023机器人一体化关节性能及试验方法
- 功率因素校正(PFC)电路-PFC的工作原理课件
- GB/T 10000-2023中国成年人人体尺寸
- 钢丝绳验收表
- 教科版六年级科学下册全套测试卷
- SIMTRADE外贸模拟实训报告
- 银行从业公司信贷
- 加快构建新发展格局是推动高质量发展的战略基点PPT高质量发展是全面建设社会主义现代化国家的首要任务PPT课件(带内容)
- GB/T 6075.3-2011机械振动在非旋转部件上测量评价机器的振动第3部分:额定功率大于15 kW额定转速在120 r/min至15 000 r/min之间的在现场测量的工业机器
- 粉红色春天古风水墨PPT模板
评论
0/150
提交评论