第11章JDBC数据库操作ppt课件_第1页
第11章JDBC数据库操作ppt课件_第2页
第11章JDBC数据库操作ppt课件_第3页
第11章JDBC数据库操作ppt课件_第4页
第11章JDBC数据库操作ppt课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、11.1.1 建立数据库 单击“开场“一切程序“Microsoft Office“Microsoft Access,在新建数据库界面选择“空Access数据库,然后命名、保管新建的数据库,在这里我们命名的数据库是shop,保管在C:ch11中 图11.1 建立新Access的数据库图11.2 保管Access的数据库创建好数据库后,就可以在该数据库下建立假设干个表。我们预备在shop数据库中创建名字为goods的表。在shop管理的“表的界面上选择“运用设计器创建表,然后单击界面上的“设计菜单,将出现相应的建表界面,我们建立的表是goods,该表的字段属性为:number(文本) name(文

2、本) madeTime(日期) price(数字,双精度)。其中,“number字段为主键在该字段上单击鼠标右建来设置字段能否是主建 在shop管理的“表的界面上,用鼠标双击已创建的goods表可以为该表添加记录 图11.3 goods表及字段属性图11.4 向goods表添加记录为了使Java编写的程序不依赖于详细的数据库,Java提供了专门用于操作数据库的API,即JDBC 衔接运用JDBC之运用程序所驻留的计算机运用程序JDBC数据库运用图11.5 运用JDBC操作数据库我们经常运用JDBC进展如下的操作:与一个数据库建立衔接,向已衔接的数据库发送SQL语句,处置SQL语句前往的结果。1

3、1.3.1 衔接方式的选择 和数据库建立衔接的常用两种方式是:建立JDBCODBC桥接器和加载纯Java数据库驱动程序 为了便于教学,本章运用JDBCODBC桥接器方式和数据库建立衔接 JDBCODBC桥接器的优点是:ODBC(Open DataBase Connectivity)是Microsoft引进的数据库衔接技术,提供了数据库访问的通用平台,而且ODBC驱动程序被广泛的运用,建立这种桥接器后,使得JDBC有才干访问几乎一切类型的数据库。缺陷是:使得运用程序依赖于ODBC,移植性较差,也就是说,运用程序所驻留的计算机必需提供ODBC(运用加载纯Java数据库驱动程序衔接数据库的优点是不依

4、赖平台)。图11.6 运用JDBCODBC桥接器方式ODBC数据源1(Oracle数据库)ODBC数据源2(Access数据库)ODBC数据源3(SQLServer数据库)衔接运用JDBC之运用程序所驻留的计算机运用程序JDBC运用ODBC衔接衔接建 立桥 接器JDBC运用java.lang包中的Class类建立JDBC-ODBC桥接器。Class类经过调用它的静态方法forName加载sun.jdbc.odbc包中的JdbcOdbcDriver类建立JDBC-ODBC桥接器。建立桥接器时能够发生异常,必需捕获这个异常,建立桥接器的代码是:try Class.forName(sun.jdbc.

5、odbc.JdbcOdbcDriver);catch(ClassNotFoundException e) System.out.println(e);1创建、修正或删除数据源选择“控制面板“管理工具“ODBC数据源某些window/xp系统,需选择“控制面板“性能和维护“管理工具“ODBC数据源 图11.7 添加、修正或删除数据源2为数据源选择驱动程序 在图11.7所示的界面上选择单击“添加按钮,出现为新增的数据源选择驱动程序界面 图11.8 为新增的数据源选择驱动程序3数据源称号及对应数据库的所在位置 在图11.8界面单击完成按钮将出现设置数据源详细工程的对话框 图11.9 设置数据源的名字

6、和对应的数据库编写衔接数据库代码不会出现数据库的称号,只能出现数据源的名字。首先运用java.sql包中的Connection类声明一个对象,然后再运用类DriverManager调用它的静态方法getConnection创建这个衔接对象:Connection con=DriverManager.getConnection(jdbc:odbc:数据源名字,login name, password );假设没有为数据源设置login name 和password,那么衔接方式是:Connection con=DriverManager. getConnection(jdbc:odbc:数据源名字

7、, ,);为了能和数据源myData交换数据,建立衔接时应捕获SQLException异常:try Connection con=DriverManager.getConnection(jdbc:odbc:myData, ,);catch(SQLException e)1向数据库发送SQL查询语句首先运用Statement声明一个SQL语句对象,然后让已创建的衔接对象con调用方法createStatment()创建这个SQL语句对象,代码如下:try Statement sql=con.createStatement();catch(SQLException e )2处置查询结果有了SQL语

8、句对象后,这个对象就可以调用相应的方法实现对数据库中表的查询和修正,并将查询结果存放在一个ResultSet类声明的对象中。也就是说SQL查询语句对数据库的查询操作将前往一个ResultSet对象,ResultSet对象是以一致方式的列组织的数据行组成。 ResultSet对象一次只能看到一个数据行,运用next()方法走到下一数据行,获得一行数据后,ResultSet对象可以运用getXxx方法获得字段值,将位置索引第一列运用1,第二列运用2等等或列名传送给getXxx方法的参数即可 怎样知道一个表中有哪些字段呢?经过运用JDBC提供的API,可以在查询之前知道表中的字段的个数和名字,这有助

9、于编写可复用的查询代码 当创建好衔接对象con之后,那么该衔接对象调用getMetaData()方法可以前往一个DatabaseMetaData对象,例如:DatabaseMetaData metadata=con.getMetaData();Metadata对象再调用getColumns可以将表的字段信息以行列的方式存储在一个ResultSet对象中 例如:ResultSet tableMessage=metadata.getColumns(null,null, goods,null);假设goods表有n个字段,tableMessage就刚好有n行、每行4列。每行分别含有和相应字段有关的信

10、息,信息的次序为:“数据库名、“数据库扩展名、“表名,“字段名。 tableMessage对象调用next方法使游标向下挪动一行(游标的初始位置在第1行之前),然后tableMessage调用getXXX方法可以查看该行中列的信息 有时候需求在结果集中前后挪动、显示结果集中某条记录或随机显示假设干条记录等。这时,必需求前往一个可滚动的结果集。为了得到一个可滚动的结果集,需运用下述方法获得一个Statement对象:Statement stmt=con.createStatement(int type ,int concurrency);然后,根据参数的type、concurrency的取值情况

11、,stmt前往相应类型的结果集:ResultSet re=stmt.executeQuery(SQL语句);type的取值决议滚动方式,取值可以是:ResultSet.TYPE_FORWORD_ONLY :结果集的游标只能向下滚动。ResultSet.TYPE_SCROLL_INSENSITIVE :结果集的游标可以上下挪动,当数据库变化时,当前结果集不变。ResultSet.TYPE_SCROLL_SENSITIVE :前往可滚动的结果集,当数据库变化时,当前结果集同步改动。Concurrency 取值决议能否可以用结果集更新数据库,Concurrency取值:ResultSet.CONCU

12、R_READ_ONLY:不能用结果集更新数据库中的表。ResultSet.CONCUR_UPDATABLE:能用结果集更新数据库中的表。滚动查询经常用到ResultSet的下述方法:public boolean previous():将游标向上挪动,该方法前往boolean型数据,当移到结果集第一行之前时前往false.public void beforeFirst:将游标挪动到结果集的初始位置,即在第一行之前。public void afterLast():将游标移到结果集最后一行之后。public void first():将游标移到结果集的第一行。public void last():将

13、游标移到结果集的最后一行。public boolean isAfterLast():判别游标能否在最后一行之后。public boolean isBeforeFirst():判别游标能否在第一行之前public boolean ifFirst():判别游标能否指向结果集的第一行。public boolean isLast():判别游标能否指向结果集的最后一行。public int getRow():得到当前游标所指行的行号,行号从1开场,假设结果集没有行,前往0public boolean absolute(int row):将游标移到参数row指定的行号。 见例11-4可以在SQL语句中运用

14、ORDER BY子语句对记录排序,例如,按price排序查询的SQL语句:SELECT * FROM goods ORDER BY price 可以用SQL语句操作符LIKE进展方式般配,运用“%替代零个或多个字符,用一个下划线“_替代一个字符,用abc替代a、b、c中的任何一个。比如,下述语句查询商品称号中含有“电或“箱的记录:rs=sql.executeQuery(SELECT * FROM goods WHERE name LIKE 电箱% );Statement对象调用方法:public int executeUpdateString sqlStatement;经过参数sqlState

15、ment指定的方式实现对数据库表中记录的更新、添加和删除操作。更新、添加和删除记录的SQL语法分别是:UPDATE SET = 新值 WHERE INSERT INTO 表(字段列表) VALUES 对应的详细的记录或INSERT INTO 表(VALUES 对应的详细的记录DELETE FROM WHERE Java提供了更高效率的数据库操作机制,就是PreparedStatement对象,该对象被习惯地称作预处置语句对象。 假设运用程序能针对衔接的数据库,事先就将SQL语句解释为数据库地层的内部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据库的速度。

16、对于JDBC,假设运用Connection和某个数据库建立了衔接对象con,那么con就可以调用prepareStatement(String sql)方法对参数sql指定的SQL语句进展预编译处置,生成该数据库地层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用以下方法都可以使得该地层内部命令被数据库执行,ResultSet executeQuery() boolean execute()int executeUpdate() 只需编译好了PreparedStatement对象,那么该对象可以随时地执行上述方法,显然提高了访问数据库的速度。在对SQL进展预

17、处置时可以运用统配符“?来替代字段的值,只需在预处置语句执行之前再设置统配符所表示的详细值即可。例如:sql=con.prepareStatement(SELECT * FROM goods WHERE salary ? );那么在sql对象执行之前,必需调用相应的方法设置统配符“?代表的详细值,比如:sql.setFloat(1,76.98);指定上述预处置SQL语句中统配符“?代表的值是76.389 通配符按着它们在预处置SQL语句中从左到右依次出现的顺序分别被称做第1个、第2个 第m个统配符。比如,以下方法:void setFloat(intparameterIndex,intx)用来设

18、置通配符的值,其中参数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类,该类实现了CachedRow

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论