




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章Java与数据库操作,本章导读JDBC简介JDBC-ODBC桥接器查询操作更新、插入与删除操作用结果集更新表CachedRowSetImpl类预处理语句事务,12.1JDBC简介,JDBC(JavaDataBaseConnectivity)是Java运行平台的核心类库中的一部分,提供了访问数据库的API(应用程序接口),它由一些Java类和接口组成。使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库,我们经常使用JDBC进行如下的操作:与一个数据库建立连接。向已连接的数据库发送SQL语句。处理SQL语句返回的结果。,12.3JDBC-ODBC桥接器,JDBCODBC桥接器方式的机制是,应用程序只需建立JDBC和ODBC之间的连接,即所谓建立JDBCODBC桥接器,而和数据库的连接由ODBC去完成ODBC使用“数据源”来管理数据库,所以必须事先将某个数据库设置成ODBC所管理的一个数据源,应用程序只能请求和ODBC管理的数据源建立连接。,返回,JAVA应用程序使用JDBC-ODBC桥接器访问数据库的三个步骤:,建立JDBC-ODBC桥接器创建ODBC数据源与ODBC数据源建立连接,1、建立JDBC-ODBC桥接器,JDBC使用Java.lang包中的Class类建立JDBC桥接器。Class类通过调用它的静态方法forName()加载sun.jdbc.odbc包中的JdbcOdbcDriver类建立JDBD-ODBC桥接器。建立桥接器时可能会发生异常,必须捕获这个异常,建立桥接器的代码如下:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);,2、ODBC数据源,为了同数据库建立连接,首先要创建一个ODBC数据源。打开Windows中的控制面,对于WindowXP,选择“性能和维护”“管理工具”“数据源(ODBC)”;对于Window2000,选择“管理工具”“数据源(ODBC)”;,建立数据源的步骤,打开“数据源(ODBC)”将出现ODBC数据源管理器对话框在ODBC数据源管理器对话框中选择“用户DSN”,然后单击“添加”按钮,将出现安装数据源的驱动程序对话框,可以在选择列表中选择相应的驱动程序。在选择驱动程序对话框选择好驱动程序后,单击“完成”按钮,将出现创建数据源对话框,。在该对话框中,你需要为创建的数据源起一个名称,并为你创建的数据源选择一个数据库。,3、连接数据库,先使用java.sql包中的Connection类声明一个对象,然后使用类DriverManger调用它的静态方法getConnection()创建这个连接对象:Connectioncon=DriverManager.getConnection(jdbc:odbc:数据源名字,loginname,password);对于Access数据库不必为数据源设置loginname和password,那么连接形式如下:Connectioncon=DriverManager.getConnection(jdbc:odbc:数据源名字,);,12.4查询操作,应用程序与数据库建立连接后,就可以使用JDBC提供的API与数据库交互信息,如查询、修改和更新数据库中的表对象等。JDBC与数据库表进行交互的主要方式是使用SQL语句,JDBC提供的API可以将标准的SQL语句发送给数据库,实现与数据库的交互。具体操作步骤如下:,1、向数据库发送SQL查询语句。首先使用Statement声明一个SQL语句对象,然后让已创建的连接对象con调用方法createStatement()创建这个SQL语句对象,代码如下:tryStatementsql=con.createStatement();catch(SQLException),2、处理查询结果有了SQL语句对象后,这个对象就可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果放在一个ResultSet类声明的对象中,也就是说,SQL语句对对数据库的查询操作将返回一个ResultSet对象,该对象是以统一形式的列组织的数据行组成。如:ResultSetrs=sql.executeQuery(“SELECT*FROMmessage”);内存的结果集对象rs的列数和表message的列数相同。,ResultSet对象一次只能看到一个数据行,使用next()方法可以将游标移动到数据行,当游标移动到某数据行后,RsultSet对象使用get*()方法,并将位置索引或列名传递给该方法的参数,就可以获得该数据行中相应的列值。方法get*()就是getByte(intcolumnIndex),getDate(intcolumnIndex),getInt(intcolumnIndex),getDouble(intcolumnIndex),getString(intcolumnIndex),getLong(intcolumnIndex),getFloat(intcolumnIndex)等方法。其中参数也可以是String类型的列名。,1、顺序查询,在例12-1中,查询数据库student.mdb中message表里的全部记录,每条记录包含全部的字段值.,返回,结果集ResultSet对象调用next()方法,可以顺序查询表中的记录。结果集对象将游标最初定位在第一行的前面,第一次调用next()方法使游标移动到第一行,next()方法返回一个boolean型数据,当游标移动到最后一行之后返回false.,例15.1例15.2,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取值决定是否可以用结果集更新数据库,ResultSet.CONCUR_READ_ONLY不能用结果集更新数据库中的表。ResultSet.CONCUR_UPDATETABLE能用结果集更新数据库中的表。,在例12-2中,我们随机从结果集中取出3条记录,并计算3条记录的height(身高)的平均值,例15.3,3、排序查询,可以在SQL语句中使用ORDERBY子语句,对记录排序.,例15.4,4、模糊查询,可以用SQL语句操作符LIKE进行模式般配,使用“%”代替0个或多个字符,用一个下划线“_”代替1个字符。比如,下述语句查询姓氏是“王”的记录:rs=sql.executeQuery(SELECT*FROMstudentsWHERE姓名LIKE王%);,例15.5,5、随机查询,用Math类的静态方法random()可以产生一个大于0小于1的随机数,再用下述公式:inti=(int)(Math.random()*number);产生一个0到number之间的随机数,根据这个随机数将游标移动到相应的行,并输出该行记录.,例15.6,15.8更新、添加、删除记录,Statement对象调用方法:publicintexecuteUpdate(StringsqlStatement);通过参数sqlStatement指定的方式实现对数据库表中记录的字段值的更新.更新记录的SQL语法:UPDATESET=新值WHERE插入记录的SQL语法:INSERTINTO表(字段列表)VALUES(对应的具体的记录)或INSERTINTO表(VALUES(对应的具体的记录)删除记录的SQL语法:DELETEFROMWHERE,例15.7,15.9预处理语句,当向数据库发送一个SQL语句,比如“Select*Fromchengjibiao”,数据库库中的SQL解释器负责将把SQL语句生成地层的内部命令,然后执行该命令,完成有关的数据操作。如果不断地向数据库提交SQL语句势必增加数据库中SQL解释器的负担,影响执行的速度。如果应用程序能针对连接的数据库,事先就将SQL语句解释为数据库地层的内部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据库的速度。,对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么con就可以调用prepareStatement(Stringsql)方法对SQL语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用相应的方法都可以使得该地层的内部命令被数据库执行,15.10数据库访问中的套接字技术,利用套接字连接向服务器发送一个查询的条件,而服务器负责对数据库的查询,然后服务器再将查询的结果利用建立的套接字返回给客户端。,2.6用结果集更新数据库中的表,使用结果集更新数据库表中第n行记录中某列的值的步骤是:(1)结果集rs的游标移动到第n行rs.absolute(n);(2)结果集将第n行的p列的列值更新(3)更新数据库中的表最后,结果集调用updateRow()方法,用结果集中的第n行更新数据库表中的第n行记录。例12-4使用结果集对数据库中的message表进行了更新和插入操作,返回,CachedRowSetImpl对象可以保存ResultSet对象中的数据,而且CachedRowSetImpl对象不依赖Connnection对象,这意味着一旦把ResultSet对象中的数据保存到CachedRowSetImpl对象中后,就可以关闭和数据库的连接。例12-5使用CachedRowSetImpl对象保存数据库表的记录,返回,12.7CachedRowSetImpl类,12.8预处理语句,Connection连接对象con调用方法:对参数sql指定的SQL语句进行预编译处理,返回一个预处理语句:PreparedStatementpre=con.prepareStatement(Stringsql);例12-6使用预处理语句来查询数据库中表的全部记录例子12-7使用预处理语句向student.mdb数据库中的message表插入记录,12.9事务,事务由一组SQL语句组成,所谓事务处理是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。例子12-8使用了事务处理,将user表中number字段是“0001”的userMoney的值减少n,并将减少的n增加到字段是“0002”的userMoney属性值上。,12.10使用JTable组件操作表,例12-9使用JTable组件显示message表的记录、更新message表的记录、向message表插入记录。例12-9共有4个Java源文件,需分别保存编译,其中Example12_9.java是主类,6绘制圆弧圆弧就是某个椭圆的一部分。drawArc(intx,inty,intwidth,intheight,intstarAngle,intarcAngle)绘制圆弧fillArc(intx,inty,intwidth,intheight,intstarAngle,intarcAngle)填充圆弧x、y、width、heigth指定椭圆的位置和大小,参数starAngle和arcAngle的单位都是“度”。而起始角度的0度是3点钟的方位。参数starAngle,arcAngle表示从starAngle的角度开始逆时针或顺时针方向画arcAngle度的弧,当arcAngle是正值时为逆时针,否则为顺时针。starAngle的值可以是负值,例如-90度是6点的方位。,7绘制多边形drawPolygon(intxPoints,intyPoints,intnPoints)绘制多边形。fillPolygon(intxPoints,intyPoints,intnPoints)填充多边形。参数数组xPoint和yPoint组成多边形的顶点坐标,nPoints是顶点的数目。下面的例子7绘制了一些基本图形,返回,12.7JavaApplet中绘制图像,图像是矩形内的一组像素。需要指出的是,Java支持两种主要的图像格式:GIF(GraphicsInterchangFormat)、JPEG(JoinPhtographicExpertGroup)。Applet类提供了一个重要的方法:publicImagegetImage(URLurl,Stringname)这个方法返回可以被显示在屏幕上的Image对象的引用,即将URL地址中,文件名为name的文件加载的内存,并返回该内存的首地址。,有时我们想加载JavaApplet程序所在的服务器上的图像,那就必须要提供图像文件所在的URL的目录,例如:运行JavaApplet的URL所指的目录是:.200/java/。如果JavaApplet准备显示java目录中的图像,可以让JavaApplet调用从Applet继承的方法:publicURLgetCodeBase(),该方法返回一个URL对象,该对象包含JavaApplet所在的目录,例如,返回的URL对象含有的信息:.200/java。,返回,Applet还有一个类似的方法:publicURLgetDocumentBase(),该方法返回一个URL对象,该对象是嵌入JavaApplet的网页的URL,例如,返回的URL对象含有的信息:.200/java/like.html。学会使用下面的最基本的drawImage()方法,您可以很容易地使用另外的几个方法。publicbooleandrawImage(Imageimg,intx,inty,ImageObserverobserver):,参数img是被绘制的Image对象;x,y是要绘制指定图像的矩形的左上角所处的位置,observer是加载图像时的图像观察器。由于Applet类已经实现了ImageObserver接口,因此它可以作为加载图像时的图像观察器。将this作为最后一个参数传递给drawImage()便可将Applet对象传递过去,如:publicvoidpaint(Graphicsg)g.drawImage(img,0,3,this);,当我们使用drawImage(Imageimg,intx,inty,ImageObserverobserver)来绘制图像时,如果JavaApplet的宽或高设计的不合理,可能就会出现图像的某些部分未能绘制到JavaApplet中为了克服这个缺点,可以使用drawImage()的另一个方法:publicbooleandrawImage(Imageimg,intx,inty,intwidth,intheight,ImageObserverobserver)在矩形内绘制加载的图像。参数img是被绘制的Image对象;x,y是要绘制指定图像的矩形的左上角所处的位置,width和height指定矩形的宽和高,observer是加载图像时的图像观察器。,使用该方法时,不管原始图像的高和宽是多少,该图像会自动按比例调整自身大小以便适应目标区域的尺寸。如果你不想让图像有比例上的变化,在绘制之前可以通过Image类提供的方法获取被加载的图像的宽和高。如:img.getHeight(this);img.getWidth(this);这两个方法的参数是实现ImageObserver接口类创建的对象,Java所有组件已经实现了该接口,因此任何一个组件都可以作为图象观察器。下面的例子8绘制了两幅图像。,返回,12.8JavaApplet播放幻灯片和动画,HTML也可以将图片贴到网页上去,但在HTML中想播放幻灯片确实是一件不现实的事情,因为为了看幻灯片必须在多个网页间切换,这是件痛苦的事情。在下面这个JavaApplet
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 影响跨境电商增长的全球贸易壁垒分析
- 辽宁省辽西重点高中2025届高三下学期模拟预测试题 政治 含答案
- 统筹推进教师教育能力提升的背景意义及必要性
- 白酒行业创新驱动与转型路径
- 多元化学习模式在语文教学中的应用
- 国际儿童节课件4
- 智能健美操设备的设计与应用前景
- 新能源与抽水蓄能的综合利用方案
- 智游新纪元模板
- 电商节购物金融攻略
- 药品生产监督管理办法培训课件
- 口腔门诊纳入定点后医疗保障基金的预测性分析报告
- 血液科疾病常见症状护理培训课件
- 遣送押解方案
- 2024-2025年全国初中化学竞赛试卷及答案
- 废水处理作业风险点和安全防范应急措施
- 零星工程维修投标方案技术标
- 乡村医生从业管理条例全面解读
- 《软件工程》课程设计学校订购系统
- 财经素养知识考试题库(浓缩500题)
- 离婚协议书电子版标准模板10篇
评论
0/150
提交评论