




已阅读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连接方式的选择和数据库建立连接的常用两种方式是:建立JDBCODBC桥接器和加载纯Java数据库驱动程序为了便于教学,本章使用JDBCODBC桥接器方式和数据库建立连接,JDBCODBC桥接器的优点是: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桥接器。建立桥接器时可能发生异常,必须捕获这个异常,建立桥接器的代码是:tryClass.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异常:tryConnectioncon=DriverManager.getConnection(jdbc:odbc:myData,);catch(SQLExceptione),11.4查询操作,1向数据库发送SQL查询语句首先使用Statement声明一个SQL语句对象,然后让已创建的连接对象con调用方法createStatment()创建这个SQL语句对象,代码如下:tryStatementsql=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*FROMgoodsWHEREprice3000);之后立刻关闭连接:con.close();那么输出结果集中的数据的代码:while(rs.next()就无法执行。在前面的诸多例子,必须在操作结果集ResultSet的语句之后才执行关闭连接:con.close();,com.sun.rowset包提供了CachedRowSetImpl类,该类实现了CachedRowSe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF 2318-2025太阳电池量子效率测试仪校准规范
- 2025湖北襄阳市中医医院(襄阳市中医药研究所)招聘急需专业技术人才55人模拟试卷及参考答案详解一套
- 2025喀什地区两级法院机关招聘聘用制书记员(43人)考前自测高频考点模拟试题带答案详解
- 2025贵州铜仁市妇幼保健院引进专业技术人才考前自测高频考点模拟试题附答案详解(模拟题)
- 2025年六安阳光电力维修工程有限责任公司招聘85人考前自测高频考点模拟试题及参考答案详解
- 2025河南郑州高新区双桥社区卫生服务中心招聘3人考前自测高频考点模拟试题及答案详解(历年真题)
- 2025河南洛阳市东方人民医院招聘39人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025广东中山市西区集体资产经营有限公司招聘1人考前自测高频考点模拟试题及答案详解(网校专用)
- 2025贵州毕节医学高等专科学校第一批次“人才强市”暨高层次急需紧缺人才引进考前自测高频考点模拟试题带答案详解
- IL-6-IN-3-生命科学试剂-MCE
- 网络综合布线实用技术第3版任务3综合布线工程网络方案设计课件
- 电梯的基础知识培训讲义课件
- 我的家乡-美丽的余姚
- 急性胰腺炎 护理 常规课件
- 收益分成协议书
- 起重吊装安全施工方案(3篇)
- 现代物流设施与设备最全ppt完整版课件全套教学教程整本书电子教案
- 苗木供应实施方案及实施计划
- 七年级语文上册第2课济南的冬天阅读训练新人教版
- Q∕GDW 12075-2020 架空输电线路防鸟装置技术规范
- Q∕GDW 11612.1-2018 低压电力线高速载波通信互联互通技术规范 第1部分:总则
评论
0/150
提交评论