收藏 分销(赏)

第11章 JDBC数据库操作.ppt

上传人:pc****0 文档编号:13366834 上传时间:2026-03-09 格式:PPT 页数:45 大小:1.32MB 下载积分:10 金币
下载 相关 举报
第11章 JDBC数据库操作.ppt_第1页
第1页 / 共45页
第11章 JDBC数据库操作.ppt_第2页
第2页 / 共45页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,11,章,JDBC,数据库操作,11.1 Microsoft Access,数据库管理系统,11.1.1,建立数据库,单击“开始”“所有程序”“,Microsoft,Office”“Microsoft,Access”,,在新建数据库界面选择“空,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.3 goods,表及字段属性,图,11.4,向,goods,表添加记录,11.2 JDBC,为了使,Java,编写的程序不依赖于具体的数据库,,Java,提供了专门用于操作数据库的,API,,即,JDBC,连接,使用,JDBC,之应用程序所驻留的计算机,应用程序,JDBC,数据库,使用,图,11.5,使用,JDBC,操作数据库,我们经常使用,JDBC,进行如下的操作:,与一个数据库建立连接,,向已连接的数据库发送,SQL,语句,,处理,SQL,语句返回的结果。,11.3,连接数据库,11.3.1,连接方式的选择,和数据库建立连接的常用两种方式是:建立,JDBCODBC,桥接器和加载纯,Java,数据库驱动程序,为了便于教学,本章使用,JDBCODBC,桥接器方式和数据库建立连接,JDBCODBC,桥接器的优点是:,ODBC(Open,DataBase,Connectivity),是,Microsoft,引进的数据库连接技术,提供了数据库访问的通用平台,而且,ODBC,驱动程序被广泛的使用,建立这种桥接器后,使得,JDBC,有能力访问几乎所有类型的数据库。缺点是:使得应用程序依赖于,ODBC,,移植性较差,也就是说,应用程序所驻留的计算机必须提供,ODBC(,使用加载纯,Java,数据库驱动程序连接数据库的优点是不依赖平台,),。,图,11.6,使用,JDBC,ODBC,桥接器方式,ODBC,数据源,1,(Oracle,数据库,),ODBC,数据源,2,(Access,数据库,),ODBC,数据源,3,(,SQLServer,数据库,),连接,使用,JDBC,之应用程序所驻留的计算机,应用程序,JDBC,使用,ODBC,连接,连接,建立桥接器,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(ClassNotFoundException,e),System.out.println(e,);,11.3.3 ODBC,数据源,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,创建这个连接对象:,Connection con=,DriverManager.getConnection(jdbc:odbc,:,数据源名字,login name,password);,假如没有为数据源设置,login name,和,password,,那么连接形式是:,Connection con=,DriverManager,.,getConnection(jdbc:odbc,:,数据源名字,);,为了能和数据源,myData,交换数据,建立连接时应捕获,SQLException,异常:,try Connection con=,DriverManager.getConnection(jdbc:odbc:myData,);,catch(SQLException,e),11.4,查询操作,1,向数据库发送,SQL,查询语句,首先使用,Statement,声明一个,SQL,语句对象,然后让已创建的连接对象,con,调用方法,createStatment,(),创建这个,SQL,语句对象,代码如下:,try Statement,sql,=,con.createStatement,();,catch(SQLException,e),2,处理查询结果,有了,SQL,语句对象后,这个对象就可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果存放在一个,ResultSet,类声明的对象中。也就是说,SQL,查询语句对数据库的查询操作将返回一个,ResultSet,对象,,ResultSet,对象是以统一形式的列组织的数据行组成。,ResultSet,对象一次只能看到一个数据行,使用,next(),方法走到下一数据行,获得一行数据后,,ResultSet,对象可以使用,getXxx,方法获得字段值,将位置索引(第一列使用,1,,第二列使用,2,等等)或列名传递给,getXxx,方法的参数即可,11.4.1,顺序查询,怎样知道一个表中有哪些字段呢?通过使用,JDBC,提供的,API,,可以在查询之前知道表中的字段的个数和名字,这有助于编写可复用的查询代码,当创建好连接对象,con,之后,那么该连接对象调用,getMetaData,(),方法可以返回一个,DatabaseMetaData,对象,例如:,DatabaseMetaData,metadata=,con.getMetaData,();,Metadata,对象再调用,getColumns,可以将表的字段信息以行列的形式存储在一个,ResultSet,对象中,例如:,ResultSet,tableMessage,=,metadata.getColumns(null,null,goods,null,);,如果,goods,表有,n,个字段,,tableMessage,就刚好有,n,行、每行,4,列。每行分别含有和相应字段有关的信息,信息的次序为:“数据库名”、“数据库扩展名”、“表名”,“字段名”。,tableMessage,对象调用,next,方法使游标向下移动一行,(,游标的初始位置在第,1,行之前,),,然后,tableMessage,调用,getXXX,方法可以查看该行中列的信息,11.4.2,控制游标,有时候需要在结果集中前后移动、显示结果集中某条记录或随机显示若干条记录等。这时,必须要返回一个可滚动的结果集。为了得到一个可滚动的结果集,需使用下述方法获得一个,Statement,对象:,Statement stmt=,con.createStatement(int,type,int,concurrency);,然后,根据参数的,type,、,concurrency,的取值情况,,stmt,返回相应类型的结果集:,ResultSet,re=,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,的下述方法:,public,boolean,previous(),:将游标向上移动,该方法返回,boolean,型数据,当移到结果集第一行之前时返回,false.,public void,beforeFirst,:将游标移动到结果集的初始位置,即在第一行之前。,public void,afterLast,(),:将游标移到结果集最后一行之后。,public void first(),:将游标移到结果集的第一行。,public void last(),:将游标移到结果集的最后一行。,public,boolean,isAfterLast,(),:判断游标是否在最后一行之后。,public,boolean,isBeforeFirst,(),:判断游标是否在第一行之前,public,boolean,ifFirst,(),:判断游标是否指向结果集的第一行。,public,boolean,isLast,(),:判断游标是否指向结果集的最后一行。,public,int,getRow,(),:得到当前游标所指行的行号,行号从,1,开始,如果结果集没有行,返回,0,public,boolean,absolute(int,row),:将游标移到参数,row,指定的行号。,11.4.3,条件查询,见例,11-4,11.4.4,排序查询,可以在,SQL,语句中使用,ORDER BY,子语句对记录排序,例如,按,price,排序查询的,SQL,语句:,SELECT*FROM goods ORDER BY price,11.4.5,模糊查询,可以用,SQL,语句操作符,LIKE,进行模式般配,使用“,%”,代替零个或多个字符,用一个下划线“,_”,代替一个字符,用,abc,代替,a,、,b,、,c,中的任何一个。比如,下述语句查询商品名称中含有“电”或“箱”的记录:,rs,=,sql.executeQuery(SELECT,*FROM goods WHERE name LIKE,电箱,%);,11.5,更新、添加与删除操作,Statement,对象调用方法:,public,int,executeUpdate,(,String,sqlStatement,),;,通过参数,sqlStatement,指定的方式实现对数据库表中记录的更新、添加和删除操作。更新、添加和删除记录的,SQL,语法分别是:,UPDATE SET =,新值,WHERE,INSERT INTO,表,(,字段列表,)VALUES,(对应的具体的记录)或,INSERT INTO,表,(VALUES,(对应的具体的记录),DELETE FROM WHERE,11.6,使用预处理语句,Java,提供了更高效率的数据库操作机制,就是,PreparedStatement,对象,该对象被习惯地称作预处理语句对象。,11.6.1,预处理语句优点,如果应用程序能针对连接的数据库,事先就将,SQL,语句解释为数据库地层的内部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据库的速度。,对于,JDBC,,如果使用,Connection,和某个数据库建立了连接对象,con,,那么,con,就可以调用,prepareStatement(String,sql,),方法对参数,sql,指定的,SQL,语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在,PreparedStatement,对象中,那么该对象调用下列方法都可以使得该地层内部命令被数据库执行,,ResultSet,executeQuery,(),boolean,execute(),int,executeUpdate,(),只要编译好了,PreparedStatement,对象,那么该对象可以随时地执行上述方法,显然提高了访问数据库的速度。,11.6.2,使用统配符,在对,SQL,进行预处理时可以使用统配符“?”来代替字段的值,只要在预处理语句执行之前再设置统配符所表示的具体值即可。例如:,sql,=,con.prepareStatement(SELECT,*FROM goods WHERE salary?);,那么在,sql,对象执行之前,必须调用相应的方法设置统配符“?”代表的具体值,比如:,sql.setFloat(1,76.98);,指定上述预处理,SQL,语句中统配符“?”代表的值是,76.389,通配符按着它们在预处理,SQL,语句中从左到右依次出现的顺序分别被称做第,1,个、第,2,个,第,m,个统配符。比如,下列方法:,void,setFloat(int,parameterIndex,int,x),用来设置通配符的值,其中参数,parameterIndex,用来表示,SQL,语句中从左到右的第,parameterIndex,个统配符号,,x,是该统配符所代表的具体值,尽管,sql,=,con.prepareStatement(SELECT,*FROM goods WHERE price?);,sql.setFloat(1,30.98);,的功能等同于,sql,=,con.prepareStatement(SELECT,*FROM goods WHERE price 3000);,之后立刻关闭连接:,con.close,();,那么输出结果集中的数据的代码:,while(rs.next,(),就无法执行。在前面的诸多例子,必须在操作结果集,ResultSet,的语句之后才执行关闭连接:,con.close,();,com.sun.rowset,包提供了,CachedRowSetImpl,类,该类实现了,CachedRowSet,接口。,CachedRowSetImpl,对象可以保存,ResultSet,对象中的数据,而且,CachedRowSetImpl,对象不依赖,Connnection,对象,这意味着一旦把,ResultSet,对象中的数据保存到,CachedRowSetImpl,对象中后,就可以关闭和数据库的连接。,CachedRowSetImpl,继承了,ResultSet,的所有方法,因此可以像操作,ResultSet,对象一样来操作,CachedRowSetImpl,对象。将,ResultSet,对象,rs,中的数据保存到,CachedRowSetImpl,对象,rowSet,中的代码如下:,rowSet.populate(rs,);,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服