您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Java程序设计实用教程_第11章_JDBC数据库操作
2020/2/71注意:开始用功了!2020/2/72《Java程序设计实用教程》第11章配合例子源代码一起使用Powerpoint制作:耿祥义张跃平JDBC数据库操作2020/2/73导读2020/2/74§11.1MicrosoftAccess数据库管理系统§11.1.1建立数据库建立一个名字为shop的数据库。操作步骤如下:单击“开始”→“所有程序”→“MicrosoftAccess”,在新建数据库界面选择“空Access数据库”,然后命名、保存新建的数据库,在这里我们命名的数据库是shop,保存在C:\ch11中。2020/2/75§11.1.2创建表在shop数据库中创建名字为goods的表。在shop管理的“表”的界面上选择“使用设计器创建表”,然后单击界面上的“设计”菜单,将出现相应的建表界面,我们建立的表是goods,该表的字段(属性)为:number(文本)name(文本)madeTime(日期)price(数字,双精度)在shop管理的“表”的界面上,用鼠标双击已创建的表可以为该表添加记录。2020/2/76§11.2JDBCJDBC(JavaDataBaseConnection)是Java数据库连接API。简单地说,JDBC能完成3件事:•与一个数据库建立连接。•向数据库发送SQL语句。•处理SQL语句返回的结果。2020/2/77§11.3连接数据库§11.3.1连接方式的选择和数据库建立连接的常用两种方式是:建立JDBC─ODBC桥接器和加载纯Java数据库驱动程序。使用JDBC─ODBC桥接器方式的机制是,应用程序只需建立JDBC和ODBC之间的连接,即所谓的建立JDBC─ODBC桥接器,而和数据库的连接由ODBC去完成。使用JDBC─ODBC桥接器连接数据库的3个步骤●建立JDBC-ODBC桥接器●创建ODBC数据源●和ODBC数据源建立连接2020/2/78§11.3.2建立JDBC-ODBC桥接器JDBC使用java.lang包中的Class类建立JDBC-ODBC桥接器。建立桥接器时可能发生异常,必须捕获这个异常,建立桥接器的代码是:try{Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);}catch(ClassNotFoundExceptione){System.out.println(e);}2020/2/79§11.3.3ODBC数据源1.创建、修改或删除数据源选择“控制面板”→“管理工具”→“ODBC数据源”(某些window/xp系统,需选择“控制面板”→“性能和维护”→“管理工具”→“ODBC数据源”)。双击ODBC数据源图标,出现的界面显示了用户已有的数据源的名称。选择“系统DSN”或“用户DSN”,单击“添加”按钮,可以创建新的数据源;单击“配置”按钮,可以重新配置已有的数据源;单击“删除”按钮,可以删除已有的数据源。2.为数据源选择驱动程序因为要访问Access数据库,选择MicrosoftAcessDriver(*.mdb)。3.数据源名称及对应数据库的所在位置在名称栏里为数据源起一个自己喜欢的名字,这里我们起的名字是myData。这个数据源就是指某个数据库。在“数据库选择”栏中选择一个数据库,这里我们选择的是C:\ch11下的shop.mdb数据库。2020/2/710§11.3.4建立连接编写连接数据库代码不会出现数据库的名称,只能出现数据源的名字。首先使用java.sql包中的Connection类声明一个对象,然后再使用类DriverManager调用它的静态方法getConnection创建这个连接对象,建立连接时应捕获SQLException异常:try{Connectioncon=DriverManager.getConnection(jdbc:odbc:数据源名字,loginname,password);}catch(SQLExceptione){}例11-1Example11_1.java2020/2/711§11.4查询操作对一个数据库中表进行查询操作的具体步骤如下。1.向数据库发送SQL查询语句try{Statementsql=con.createStatement();}catch(SQLExceptione){}2.处理查询结果ResultSetrs=sql.executeQuery(SELECT*FROMemployee);表11.1给了出了ResultSet对象的若干方法。注:无论字段是何种属性,总可以使用getString(intcolumnIndex)或getString(StringcolumnName)方法返回字段值的串表示。注:当使用ResultSet的getXXX方法查看一行记录时,不可以颠倒字段的顺序,例如,不可以rs.getDouble(4);rs.getDate(3)2020/2/712表11.1ResultSet对象的若干方法2020/2/713§11.4.1顺序查询通过使用JDBC提供的API,可以在查询之前知道表中的字段的个数和名字,步骤如下:1.连接对象con调用getMetaData()方法可以返回一个DatabaseMetaData对象,例如:DatabaseMetaDatametadata=con.getMetaData();2.Metadata对象再调用getColumns可以将表的字段信息以行列的形式存储在一个ResultSet对象中,例如:ResultSettableMessage=metadata.getColumns(null,null,employee,null);3.tableMessage对象调用next方法使游标向下移动一行(游标的初始位置在第1行之前),然后tableMessage调用getXXX方法可以查看该行中列的信息,其中最重要的信息是第4列,该列上的信息为字段的名字。表11.2tableMessage对象的格式例11-2Example11_2.java,Query.java2020/2/714表11.2tableMessage对象的格式2020/2/715例11-2例11-2Example11_2.java,Query.java2020/2/716§11.4.2控制游标需要在结果集中前后移动、显示结果集指定的一条记录或随机显示若干条记录等。这时,必须要返回一个可滚动的结果集。为了得到一个可滚动的结果集,需使用下述方法先获得一个Statement对象:Statementstmt=con.createStatement(inttype,intconcurrency);然后,根据参数的type、concurrency的取值情况(p211),stmt返回相应类型的结果集:ResultSetre=stmt.executeQuery(SQL语句);滚动查询经常用到ResultSet的下述方法:publicbooleanprevious():将游标向上移动publicvoidbeforeFirst():将游标移动到结果集的初始位置。publicvoidafterLast():将游标移到结果集最后一行之后。publicvoidfirst():将游标移到结果集的第一行。publicvoidlast():将游标移到结果集的最后一行。publicbooleanisAfterLast():判断游标是否在最后一行之后。publicbooleanisBeforeFirst():判断游标是否在第一行之前publicbooleanifFirst():判断游标是否指向结果集的第一行。publicbooleanisLast():判断游标是否指向结果集的最后一行。publicintgetRow():得到当前游标所指行的行号.0publicbooleanabsolute(introw):将游标移到参数row指定的行号。2020/2/717例11-3Example11_3.java2020/2/718§11.4.3条件查询在下面的例11-4中使用了例11-2中的Query类,分别按商品号和价格查询记录。主类将查询条件传递经Query类的实例。程序运行效果如图11.13所示。例11-4Example11_4.java,Query.java2020/2/719§11.4.4排序查询可以在SQL语句中使用ORDERBY子语句,对记录排序。按薪水排序查询的SQL语句:SELECT*FROMgoodsORDERBYprice例11-5Example11_5.java,Query.java2020/2/720§11.4.5模糊查询可以用SQL语句操作符LIKE进行模式般配,使用“%”代替0个或多个字符,用一个下划线“_”代替1个字符。下述语句查询商品名称中含有“T”或“宝”的记录:rs=sql.executeQuery(“SELECT*FROMgoodsWHEREnameLIKE‘[T宝]%’”);例11-6Example11_6.java,Query.java2020/2/721§11.5更新、添加与删除操作Statement对象调用方法:publicintexecuteUpdate(StringsqlStatement);通过参数sqlStatement指定的方式实现对数据库表中记录的更新、添加和删除操作。更新、添加和删除记录的SQL语法分别是:◆UPDATE表名SET字段名=新值WHERE条件子句例:UPDATEgoodsSETprice=3009WHEREname='海尔电视机'。◆INSERTINTO表(字段列表)VALUES(对应的具体的记录)或INSERTINTO表(VALUES(对应的具体的记录)例:INSERTINTOgoods(number,name,madeTime,price)VALUES('A009','手机','2010-12-20',3976)◆DELETEFROM表名WHERE条件子句例子DELETEFROMgoodsWHEREnumber=‘B002’例11-7Example11_7.java,ModifyTable.java2020/2/722§11.6使用预处理语句Java提供了更高效率的数据库操作机制,就是PreparedStatement对象,该对象被习惯地称作预处理语句对象。2020/2/723§11.6.1预处理语句优点预处理不仅减轻了数据库的负担,而且也提高了访问数据库的速度。对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么con就可以调用prepareStatement(Stringsql)方法对参数sql指定的SQL语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用下列方法都可以使得该地层内部命令被数据库执行ResultSetexecuteQuery();booleanexecute();intexecuteUpdate();只要编译好了PreparedStatement对象,那么该对象可以随时地执行上述方法,显然提高了访问数据库的速度。例11-8Example11_8.java,PrepareQuery.java2020/2/724§11.6.2使用统配符在对SQL进行预处理时可以使用统配符“?”来代替字段的值,只要在预处理语句执行之前再设置统配符所表示的具体值即可。例如:sql=con.prepareStatement(SELECT*FROMemployeeWHEREsalary?);那么在sql对象执行之前,必须调用相应的方法设置统配符“?”代表的具体值,比如:sql.setFloat(1,76.98);指定上述预处理SQL语句中统配符“?”代表的值是76.98预处理语句设置统配符“?”的值的常用方法有:voidsetDate(intparameterIndex,Datex)voidsetDouble
本文标题:Java程序设计实用教程_第11章_JDBC数据库操作
链接地址:https://www.777doc.com/doc-3550517 .html