Java与数据库操作.ppt

上传人:牧羊曲112 文档编号:6509613 上传时间:2023-11-07 格式:PPT 页数:42 大小:242.49KB
返回 下载 相关 举报
Java与数据库操作.ppt_第1页
第1页 / 共42页
Java与数据库操作.ppt_第2页
第2页 / 共42页
Java与数据库操作.ppt_第3页
第3页 / 共42页
Java与数据库操作.ppt_第4页
第4页 / 共42页
Java与数据库操作.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《Java与数据库操作.ppt》由会员分享,可在线阅读,更多相关《Java与数据库操作.ppt(42页珍藏版)》请在三一办公上搜索。

1、第12章 Java 与数据库操作,本章导读JDBC简介JDBC-ODBC桥接器查询操作更新、插入与删除操作用结果集更新表CachedRowSetImpl类预处理语句事务,12.1 JDBC简介,JDBC(Java DataBase Connectivity)是Java运行平台的核心类库中的一部分,提供了访问数据库的API(应用程序接口),它由一些Java类和接口组成。使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库,我们经常使用JDBC进行如下的操作:与一个数据库建立连接。向已连接的数据库发送SQL语句。处理SQL语句返回的结果。,12.3 JDBC-ODB

2、C桥接器,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(

3、)加载包中的JdbcOdbcDriver类建立JDBD-ODBC桥接器。建立桥接器时可能会发生异常,必须捕获这个异常,建立桥接器的代码如下:);,2、ODBC数据源,为了同数据库建立连接,首先要创建一个ODBC数据源。打开Windows中的控制面,对于WindowXP,选择“性能和维护”“管理工具”“数据源(ODBC)”;对于Window2000,选择“管理工具”“数据源(ODBC)”;,建立数据源的步骤,打开“数据源(ODBC)”将出现ODBC数据源管理器对话框 在ODBC数据源管理器对话框中选择“用户DSN”,然后单击“添加”按钮,将出现安装数据源的驱动程序对话框,可以在选择列表中选择相应

4、的驱动程序。在选择驱动程序对话框选择好驱动程序后,单击“完成”按钮,将出现创建数据源对话框,。在该对话框中,你需要为创建的数据源起一个名称,并为你创建的数据源选择一个数据库。,3、连接数据库,先使用java.sql包中的Connection 类声明一个对象,然后使用类DriverManger调用它的静态方法getConnection()创建这个连接对象:Connection con=DriverManager.getConnection(jdbc:odbc:数据源名字,login name,password);对于Access数据库不必为数据源设置login name和 password,那么

5、连接形式如下:Connection con=DriverManager.getConnection(jdbc:odbc:数据源名字,);,12.4 查询操作,应用程序与数据库建立连接后,就可以使用JDBC提供的API与数据库交互信息,如查询、修改和更新数据库中的表对象等。JDBC与数据库表进行交互的主要方式是使用SQL语句,JDBC提供的API可以将标准的SQL语句发送给数据库,实现与数据库的交互。具体操作步骤如下:,1、向数据库发送SQL查询语句。首先使用Statement声明一个SQL语句对象,然后让已创建的连接对象con调用方法createStatement()创建这个SQL语句对象,代

6、码如下:tryStatement sql=con.createStatement();catch(SQLException),2、处理查询结果 有了SQL语句对象后,这个对象就可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果放在一个ResultSet类声明的对象中,也就是说,SQL语句对对数据库的查询操作将返回一个ResultSet对象,该对象是以统一形式的列组织的数据行组成。如:ResultSet rs=sql.executeQuery(“SELECT*FROM message”);内存的结果集对象rs的列数和表message的列数相同。,ResultSet对象一次只能看到一个数

7、据行,使用next()方法可以将游标移动到数据行,当游标移动到某数据行后,RsultSet对象使用get*()方法,并将位置索引或列名传递给该方法的参数,就可以获得该数据行中相应的列值。方法get*()就是getByte(int columnIndex),getDate(int columnIndex),getInt(int columnIndex),getDouble(int columnIndex),getString(int columnIndex),getLong(int columnIndex),getFloat(int columnIndex)等方法。其中参数也可以是String类

8、型的列名。,1、顺序查询,在例12-1中,查询数据库student.mdb中message表里的全部记录,每条记录包含全部的字段值.,返回,结果集ResultSet对象调用next()方法,可以顺序查询表中的记录。结果集对象将游标最初定位在第一行的前面,第一次调用next()方法使游标移动到第一行,next()方法返回一个boolean型数据,当游标移动到最后一行之后返回false.,例15.1 例15.2,2、可滚动结果集,为了得到一个可滚动的结果集,必须使用下述方法先获得一个Statement对象:Statement stmt=con.createStatement(int type,in

9、t concurrency);然后,根据参数的type、concurrency的取值情况,stmt返回相应类型的结果集:ResultSet re=stmt.executeQuery(SQL语句);,type的取值决定滚动方式,取值情况如下:,ResultSet.TYPE_FORWORD_ONLY 结果集的游标只能向下滚动。ResultSet.TYPE_SCROLL_INSENSITIVE 结果集的游标可以上下移动,当数据库变化时,当前结果集不变。ResultSet.TYPE_SCROLL_SENSITIVE 返回可滚动的结果集,当数据库变化时,当前结果集同步改变。,Concurrency 取值

10、决定是否可以用结果集更新数据库,ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表。ResultSet.CONCUR_UPDATETABLE 能用结果集更新数据库中的表。,在例12-2中,我们随机从结果集中取出3条记录,并计算3条记录的height(身高)的平均值,例15.3,3、排序查询,可以在SQL语句中使用ORDER BY子语句,对记录排序.,例15.4,4、模糊查询,可以用SQL语句操作符LIKE进行模式般配,使用“%”代替0个或多个字符,用一个下划线“_”代替1个字符。比如,下述语句查询姓氏是“王”的记录:rs=sql.executeQuery(SEL

11、ECT*FROM students WHERE 姓名 LIKE 王%);,例 15.5,5、随机查询,用Math类的静态方法random()可以产生一个大于0小于1的随机数,再用下述公式:int i=(int)(Math.random()*number);产生一个0到number之间的随机数,根据这个随机数将游标移动到相应的行,并输出该行记录.,例15.6,15.8 更新、添加、删除记录,Statement对象调用方法:public int executeUpdate(String sqlStatement);通过参数sqlStatement指定的方式实现对数据库表中记录的字段值的更新.更新记

12、录的SQL语法:UPDATE SET=新值 WHERE 插入记录的SQL语法:INSERT INTO 表(字段列表)VALUES(对应的具体的记录)或INSERT INTO 表(VALUES(对应的具体的记录)删除记录的SQL语法:DELETE FROM WHERE,例15.7,15.9 预处理语句,当向数据库发送一个SQL语句,比如“Select*From chengjibiao”,数据库库中的SQL解释器负责将把SQL语句生成地层的内部命令,然后执行该命令,完成有关的数据操作。如果不断地向数据库提交SQL语句势必增加数据库中SQL解释器的负担,影响执行的速度。如果应用程序能针对连接的数据库

13、,事先就将SQL语句解释为数据库地层的内部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据库的速度。,对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么 con就可以调用 prepareStatement(String sql)方法对SQL语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用相应的方法都可以使得该地层的内部命令被数据库执行,15.10 数据库访问中的套接字技术,利用套接字连接向服务器发送一个查询的条件,而服务器负责对数据库的查询,然后服务器再将

14、查询的结果利用建立的套接字返回给客户端。,2.6 用结果集更新数据库中的表,使用结果集更新数据库表中第n行记录中某列的值的步骤是:(1)结果集rs的游标移动到第n行 rs.absolute(n);(2)结果集将第n行的p列的列值更新(3)更新数据库中的表 最后,结果集调用updateRow()方法,用结果集中的第n行更新数据库表中的第n行记录。例12-4使用结果集对数据库中的message表进行了更新和插入操作,返回,CachedRowSetImpl对象可以保存ResultSet对象中的数据,而且CachedRowSetImpl对象不依赖Connnection对象,这意味着一旦把ResultS

15、et对象中的数据保存到CachedRowSetImpl对象中后,就可以关闭和数据库的连接。例12-5使用CachedRowSetImpl对象保存数据库表的记录,返回,12.7 CachedRowSetImpl类,12.8 预处理语句,Connection连接对象con调用方法:对参数sql指定的SQL语句进行预编译处理,返回一个预处理语句:PreparedStatement pre=con.prepareStatement(String sql);例12-6使用预处理语句来查询数据库中表的全部记录 例子12-7使用预处理语句向student.mdb数据库中的message表插入记录,12.9

16、事务,事务由一组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(int x,

17、int y,int width,int height,int starAngle,int arcAngle)绘制圆弧 fillArc(int x,int y,int width,int height,int starAngle,int arcAngle)填充圆弧 x、y、width、heigth指定椭圆的位置和大小,参数starAngle和 arcAngle的单位都是“度”。而起始角度的0度是3点钟的方位。参数starAngle,arcAngle表示从starAngle的角度开始逆时针或顺时针方向画arcAngle度的弧,当arcAngle是正值时为逆时针,否则为顺时针。starAngle的值

18、可以是负值,例如-90度是6点的方位。,7绘制多边形 drawPolygon(int xPoints,int yPoints,int nPoints)绘制多边形。fillPolygon(int xPoints,int yPoints,int nPoints)填充多边形。参数数组xPoint和yPoint组成多边形的顶点坐标,nPoints是顶点的数目。下面的例子7绘制了一些基本图形,返回,12.7 Java Applet中绘制图像,图像是矩形内的一组像素。需要指出的是,Java支持两种主要的图像格式:GIF(Graphics Interchang Format)、JPEG(Join Phtog

19、raphic Expert Group)。Applet类提供了一个重要的方法:public Image getImage(URL url,String name)这个方法返回可以被显示在屏幕上的Image对象的引用,即将URL地址中,文件名为name的文件加载的内存,并返回该内存的首地址。,有时我们想加载Java Applet程序所在的服务器上的图像,那就必须要提供图像文件所在的URL的目录,例如:运行Java Applet的URL所指的目录是:。如果Java Applet准备显示java目录中的图像,可以让Java Applet调用从Applet继承的方法:public URL getCod

20、eBase(),该方法返回一个URL对象,该对象包含Java Applet 所在的目录,例如,返回的URL对象含有的信息:。,返回,Applet还有一个类似的方法:public URL getDocumentBase(),该方法返回一个URL对象,该对象是嵌入Java Applet的网页的URL,例如,返回的URL对象含有的信息:。学会使用下面的最基本的drawImage()方法,您可以很容易地使用另外的几个方法。public boolean drawImage(Image img,int x,int y,ImageObserver observer):,参数img是被绘制的Image对象;x

21、,y是要绘制指定图像的矩形的左上角所处的位置,observer是加载图像时的图像观察器。由于Applet类已经实现了ImageObserver接口,因此它可以作为加载图像时的图像观察器。将this作为最后一个参数传递给drawImage()便可将Applet对象传递过去,如:public void paint(Graphics g)g.drawImage(img,0,3,this);,当我们使用drawImage(Image img,int x,int y,ImageObserver observer)来绘制图像时,如果Java Applet的宽或高设计的不合理,可能就会出现图像的某些部分未能

22、绘制到Java Applet中 为了克服这个缺点,可以使用drawImage()的另一个方法:public boolean drawImage(Image img,int x,int y,int width,int height,ImageObserver observer)在矩形内绘制加载的图像。参数img是被绘制的Image 对象;x,y是要绘制指定图像的矩形的左上角所处的位置,width和height指定矩形的宽和高,observer是加载图像时的图像观察器。,使用该方法时,不管原始图像的高和宽是多少,该图像会自动按比例调整自身大小以便适应目标区域的尺寸。如果你不想让图像有比例上的变化,

23、在绘制之前可以 通过 Image类提供的方法获取被加载的图像的宽和高。如:img.getHeight(this);img.getWidth(this);这两个方法的参数是实现ImageObserver接口类创建的对象,Java 所有组件已经实现了该接口,因此任何一 个组件都可以作为图象观察器。下面的例子8绘制了两幅图像。,返回,12.8 Java Applet 播放幻灯片和动画,HTML也可以将图片贴到网页上去,但在HTML中想播 放幻灯片确实是一件不现实的事情,因为为了看幻灯片必须在多个网页间切换,这是件痛苦的事情。在下 面这个Java Applet中,用户只需单击“next”按钮和“pre

24、vious”按钮就可以前后变换幻灯片。例子9 下面是用本章的知识和多线程编写的一个动画程序。动画是一种错觉,运动的错觉是通过快速显示一组图片造成的,而这些图片在内容上只有微小的变化。在下面的例子中我们使用了多线程技术,单击“startPlay”按钮开始播放,单击“stopPlay”按钮暂停播放,单击“continuePlay”继续播放。,返回,12.9 Java Applet的网络功能,1使用URL Applet类的 public AppletContext getAppletContext()方法返回一个AppletContext 对象,称作Java Applet所在的运行环境。在Java

25、Applet程序中可以使用这个方法返回一个AppletContext 对象,该对象调用 void showDocument(URL url)下面的例子11在一个文本框中输入网址,然后点击确 定按钮链接到指定的页面。,2使用套接字 虽然Java Applet程序的字节码驻留在服务器端,但它需要下载到客户端的浏览器来运行,因此JavaApplet程序是客户端程序,Java Applet程序和应用程序的一个不同之处是:Java Applet程序只能和它所驻留的服务器建立套接字连接。Applet有一个方法:public URL getDocumentBase(),,该方法返回一个嵌入Java Applet的网页的URL 对象,该URL对象再调用 public String getHost()方法可以获取其中含有的IP地址。在下面的例子12中,客户输入三角形三边的长度并发送给服务器,服务器把计算出的三角形面积返回给客户。因此你可以将计算量大的工作放在服务器端,客户负责计算量小的工作,实现客户-服务器交互计算,来完成某项任务。,返回,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号