Java的数据库连接编程_第1页
Java的数据库连接编程_第2页
Java的数据库连接编程_第3页
Java的数据库连接编程_第4页
Java的数据库连接编程_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

Java的数据库连接编程〔JDBC〕技术[本讲的学问要点]:JDBC、JDBC的工作原理,访问数据库的方法、Statement、PreparedStatement、CallableStatement,ResultSet等对象的编程使用根本学问JDBC:JavaDataBaseConnectivity〔Java〕,它是将Java与SQL〔API--它是一种可用于执行SQL语句的JavaAPI,即由一组用Java语言编写的类与接口所组成〕。JDBCJavaJava的应用程序。另外也可以操作保存在多种不同的数据库治理系统中的数据,而与数据库治理系统中数据存储格式无关。同时Java语言的与平台的无关性,不必在不同的系统平台下编写不同的数据库应用程序。JDBCODBC:微软的ODBCCWindows平台,无法实现跨平台地操作数据库。SQL语言:SQL尽管包含有数据定义、数据操作、数据治理等功能,但它并不是一个完整的编程语言,而且不支持流掌握,需要与其它编程语言相协作使用。JDBC的设计:由于Java语言具有强健性、安全、易使用并自动下载到网络等方面的优点,因此假设承受Java语言来连接数据库,将能抑制ODBC局限于某一系统平台的缺陷;将SQL语言与Java语言相互结合起来,可以实现连接不同数据库系统,即使用JDBC可以很简洁地把SQL语句传送到任何关系型数据库中。JDBC设计的目的:它是一种标准,设计出它的最主要的目的是让各个数据库开发商为Java程序员供给标准的数据库访问类和接口,使得独立于DBMS的Java应用程序的开发成为可能〔数据库转变,驱动程序跟着转变,但应用程序不变〕。JDBC的主要功能:〔1〕创立与数据库的连接;〔2〕发送SQL语句到任何关系型数据库中;〔3〕处理数据并查询结果。编程实例:try{Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);//〔1〕创立与数据库的连接Connectioncon=DriverManager.getConnection(“jdbc:odbc:DatabaseDSN“,“Login“,“Password“);Statementstmt=con.createStatement;ResultSetrs=stmt.executeQuery(“select*fromDBTableName“);//〔2〕SQLwhile(rs.next)Stringname=rs.getString(“Name“) //〔3〕处理数据并查询结果。intage=rs.getInt(“age“);floatwage=rs.getFloat(“wage“);}rs.close; //〔4〕关闭stmt.close;con.close;}catch(SQLExceptione){ System.out.println(“SQLState:“+e.getSQLState);System.out.println(“Message:“+e.getMessage);System.out.println(“Vendor:“+e.getErrorCode);}JDBCODBCJDBCODBCC语言编写的,不是面对对象的;而JDBCJava是面对对象的。ODBC难以学习,由于它把简洁的功能与高级功能组合在一起,即便是简洁的查询也会带有简单的任选项;而JDBC的设计使得简洁的事情用简洁的做法来完成。ODBCJDBC供给Java与平台无关的解决方案。但也可以通过Java来操作ODBC,这可以承受JDBc-ODBC桥接方式来实现〔JavaODBCJavaC陷〕。JDBC驱动程序的类型:目前比较常见的JDBC驱动程序可分为以下四个种类:JDBC-ODBCODBCJavaSoftODBCJDBC访问。留意,必需将ODBC进制代码〔很多状况下还包括数据库客户机代码〕加载到使用该驱动程序的每个客户机上。因此,这种类型的驱动程序最适合于企业网〔这种网络上客户机的安装不是主要问题Java编写的三层构造的应用程序效劳器代码。JDBC-ODBC(ODBCAPI)同数据库效劳器通讯,客户端计算机首先应当安装并配置ODBCdriver和JDBC-ODBCbridgeAPI这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。留意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。这种驱动方式将数据库厂商的特别协议转换成Java代码及二进制类码,使JavaOracle用SQLNet协议,DB2IBM的数据库协议。数据库厂商的特别协议也应当被安装在客户机上。JDBCJava这种驱动程序将JDBC转换为与DBMS个效劳器转换为一种DBMS协议。这种网络效劳器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于供给者。通常,这是最为敏捷的JDBC驱动程序。有可能全部这种解决方案的供给者都供给适合于Intranet用的产品。为了使这些产品也支持Internet访问,它们必需处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。几家供给者正将JDBC驱动程序加到他们现有的数据库中间件产品中。这种方式是纯Javadriver(如S)同数据库访问效劳器通信,数据库访问效劳器然后翻译标准网络协议成为数据库厂商的专有特别数据库访问协议(也可能用到ODBCdriver)InternetIntranet用户而言这是一个抱负的解决方案。Javadriver被自动的,以透亮的方式随Applets自Web效劳器而下载并安装在用户的计算机上。本地协议纯Java驱动程序这种类型的驱动程序将JDBC调用直接转换为DBMS允许从客户机机器上直接调用DBMS效劳器,是Intranet访问的一个很有用的解决方法。这种方式也是纯JavadriverJDBC协议使Java数据库客户与数据库效劳器通信。然而,将把代理协议同数据库效劳器通信改用数据库厂商的特别JDBCdriver。这对Intranet应用是高效的,可是数据库厂商的协议可能不被防火墙支持,缺乏防火墙支持在Internet应用中会存在潜在的安全隐患。JDBCJDBC的设计基于X/OpenSQLCLI〔调用级接口〕一组API在Java程序中要操作数据库,一般应当通过如下几步〔利用JDBC访问数据库的编程步骤〕:加载连接数据库的驱动程序Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);创立与数据源的连接Stringurl=“jdbc:odbc:DatabaseDSN“;Connectioncon=DriverManager.getConnection(url,“Login“,“Password“);查询数据库:创立Statement对象并执行SQL语句以返回一个ResultSet对象。Statementstmt=con.createStatement;ResultSetrs=stmt.executeQuery(“select*fromDBTableName“);获得当前记录集中的某一记录的各个字段的值intage=rs.getInt(“age“);floatwage=rs.getFloat(“wage“);〔留意关闭的挨次先rs再stmt最终为con〕rs.close;stmt.close;con.close;JDBCJDBCJavaJDBCAPIJDBCDriveAPI。JavaJDBCAPI:JavaAPI数据库、执行SQL语句并返回结果集等编程数据库的力量,它主要是由一系列的接口定义所构成。java.sql.DriveManager:该接口主要定义了用来处理装载驱动程序并且为创立的数据库连接供给支持。java.sql.Connection:该接口主要定义了实现对某一种指定数据库连接的功能。java.sql.Statement:该接口主要定义了在一个给定的连接中作为SQL语句执行声明的容器以实现对数据库的操作。它主要包含有如下的两种子类型。java.sql.PreparedStatementIN参数的预编译SQL语句。java.sql.CallableStatement:该接口主要定义了用于执行数据库的存储过程的雕用。java.sql.ResultSet:该接口主要定义了用于执行对数据库的操作所返回的结果集。面对数据库厂商的JDBCDriveAPI:数据库厂商必需供给相应的驱动程序JDBCAPI〔每个数据库系统厂商必需供给对DriveManager、Connection、Statement、ResultSet等接口的具体实现〕,从JavaJDBC数据库应用的模型两层构造〔C/S〕:在此模型下,客户端的程序直接与数据库效劳器相连接并发送SQL语句〔但这时就需要在客户端安装被访问的数据库的JDBC驱动程序〕,DBMS效劳器向客户返回相应的结果,客户程序负责对数据的格式化。client端 ODBC/JDBC Server端〔DBMS〕或数据库专用协议主要的缺点:受数据库厂商的限制,用户更换数据库时需要改写客户程序;受数据库版本的限制,数据库厂商一旦升级数据库,使用该数据库的客户程序需要重编译和公布;对数据库的操作与处理都是在客户程序中实现,使客户程序在编程与设计时较为简单。三〔或多〕层构造〔B/S〕:在此模型下,主要在客户端的程序与数据库效劳器之间增加了一个中间效劳器〔可以承受C++或Java语言来编程实现〕,隔离客户端的程序与数据库效劳器。客户端的程序〔可以简洁为通用的扫瞄器〕与中间效劳器进展通信,然后由中间效劳器处理客户端程序的恳求并治理与数据库效劳器的连接。客户端程序RMICORBA中间效劳器 JDBC 数据库效劳器JDBC实现对数据库的访问引用必要的包importjava.sql.*;//加载连接数据库的驱动程序类为实现与特定的数据库相连接,JDBC必需加载相应的驱动程序类。这通常可以承受Class.forNameDriverManager登记注册并在与数据库相连接时,DriverManager将使用此驱动程序。Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);留意:这条语句直接加载了sun公司供给的JDBC-ODBCBridge驱动程序类。创立与数据源的连接Stringurl=“jdbc:odbc:DatabaseDSN“;Connectioncon=DriverManager.getConnection(url,“Login“,“Password“);DriverManager类中的getConnection方法实现与url所指定的数据源建立连接并返回一个Connection类的对象,以后对这个数据源的操作都是基于该Connection类对象;但对于Access等小型数据库,可以不用给出用户名与密码。Stringurl=“jdbc:odbc:DatabaseDSN“;Connectioncon=DriverManager.getConnection(url);System.out.println(con.getCatalog);//取得数据库的完整路径及文件名JDBC借用了url〔数据库URL类似于通用的Lurljdbc::[databaselocator]jdbc---指出要使用JDBCsubprotocal---定义驱动程序类型databaselocator---供给网络数据库的位置和端口号(包括主机名、端口和数据库系统名等) jdbc:odbc://host.domain:port/databasefile主协议jdbc 驱动程序类型为odbc,它指明JDBC治理器如何访问数据库,该例指名为承受JDBC-ODBC桥接方式;其它为数据库的位置表示。mySQLJDBCClass.forName(“org.gjt.mm.mysql.Driver“);Stringurl=“jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1“//testDBConnectionconn=DriverManager.getConnection(url);OracleJDBCOCI〔thin〕Class.forName(“oracle.jdbc.driver.OracleDriver“);Stringurl=“jdbc:oracle:thin:@localhost:1521:orcl“;//orcl为你的数据库的SIDStringuser=“scott“;Stringpassword=“tiger“;Connectionconn=DriverManager.getConnection(url,user,password);留意:也可以通过con.setCatalog(“MyDatabase“)DB2Class.forName(“com.ibm.db2.jdbc.app.DB2Driver“)Stringurl=“jdbc:db2://localhost:5000/sample“;//sample为你的数据库名Stringuser=“admin“;Stringpassword=““;Connectionconn=DriverManager.getConnection(url,user,password);MicroSoftSQLServer驱动程序Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver“);Stringurl=“jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs“;//pubs为你的数据库的Stringuser=“sa“;Stringpassword=““;Connectionconn=DriverManager.getConnection(url,user,password);查询数据库的一些构造信息这主要是获得数据库中的各个表,各个列及数据类型和存储过程等各方面的信息。依据这些信息,从而可以访问一个未知构造的数据库。这主要是通过DatabaseMetaData类的对象来实现并调用其中的方法来获得数据库的具体信息〔即数据库的根本信息,数据库中的各个表的状况,表中的各个列的信息及索引方面的信息〕。DatabaseMetaDatadbms=con.getMetaData;System.out.println(““+dbms.getDriverName);查询数据库中的数据:JDBCStatement〔用于执行不带参数的简洁SQL语句字符串〕,PreparedStatement〔预编译SQL语句〕和CallableStatement〔主要用于执行存储过程〕三个接口。、实现对数据库的一般查询Statement1Statement〔SQLStatement对象,它封装代表要执行的SQL语句〕并执行SQL语句以返回一个ResultSet对象,这可以通过Connection类中的createStatement方法来实现。Statementstmt=con.createStatement;2执行一个SQL查询语句以查询数据库中的数据。Statement接口供给了三种执行SQL语句的方法:executeQuery、executeUpdate 和execute。具体使用哪一个方法由SQL语句本身来打算。方法executeQuery 用于产生单个结果集的语句,例如SELECT语句等。方法executeUpdate 用于执行INSERTUPDATE或DELETE语句以及SQLDDL〔数据定义语言〕语句,例如CREATETABLE和DROPTABLE。INSERT、UPDATE或DELETE语句的效果是修改表中零行或多行中的一列或多列executeUpdate 的返回值是一个整数指示受影响的行〔即更计数〕。对于CREATETABLE 或DROPTABLE 等不操作行的语句,executeUpdate 的返回值总为零。方法execute用于执行返回多个结果集、多个更计数或二者组合的语句。一般不会需要该高级功能。下面给出通过Statement类中的executeQuery方法来实现的代码段。executeQuery方法的输入参数是一个标准的SQL查询语句,其返回值是一个ResultSetResultSetrs=stmt.executeQuery(“select*fromDBTableName“);要点:①JDBC在编译时并不对将要执行的SQL查询语句作任何检查,只是将其作为一个StringSQL查询语句时才知道其是否正确。对SQLSQLException。②一个Statement对象在同一时间只能翻开一个结果集,对其次个结果集的翻开隐含着对第一个结果集的关闭。③假设想对多个结果集同时操作,必需创立出多个Statement对象,在StatementSQL④假设不需要同时处理多个结果集,则可以在一个Statement对象上挨次SQLimportjava.sql.*;publicclassResultSetTest{ publicstaticvoidmain(Stringargs[]){ try{Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);Connectioncon=DriverManager.getConnection(“jdbc:odbc:studlist“);Statementstmt=con.createStatement;student“);student“);

ResultSetrs1=stmt.executeQuery(“selectnamefromResultSetrs2=stmt.executeQuery(“selectagefromrs1while(rs2.next){System.out.println(rs2.getObject(1));}rs2.close;stmt.close;con.close;}catch(Exceptione){System.out.println(e);}}}留意:JDBC-ODBCStatement对象,它只会保存最的结果集,rs1〕。3、关闭StatementStatementstmt.close;、预编译方式执行SQL语句PreparedStatement由于Statement对象在每次执行SQL语句时都将该语句传给数据库,假设需要屡次执行同一条SQL语句时,这样将导致执行效率特别低,此时可以承受PreparedStatement对象来封装SQL语句。假设数据库支持预编译,它可以将SQLSQL但假设数据库不支持预编译,将在语句执行时才传给数据库,其效果类同于Statement另外PreparedStatement对象的SQL语句还可以接收参数,可以用不同的输入参数来屡次执行编译过的语句,较Statement敏捷便利〔详见后文介绍〕。1、创立PreparedStatementConnectionPreparedStatement对象,在创立时可以给出预编译的SQLPreparedStatementpstmt=con.prepareStatement(“select*fromDBTableName“);2、执行SQL语句:可以调用executeQuery来实现,但与Statement方式不同的是,它没有参数,由于在创立PreparedStatement对象时已经给出了要执SQLResultSetrs=pstmt.executeQuery;//该条语句可以被屡次执行3PreparedStatementpstmt.close;//Statementclose方法9.5.3CallableStatementCallableStatement类是PreparedStatement类的子类,因此可以使用在PreparedStatement类及Statement类中的方法,主要用于执行存储过程。1、创立CallableStatement对象:使用Connection类中的prepareCall方法可以创立一个CallableStatement对象,其参数是一个String对象,一般格式为:不带输入参数的存储过程“{call带输入参数的存储过程“{call带输入参数并有返回结果参数的存储过程“{?=call存储过程名(?,?,...)}”cstmt=con.prepareCall(“{callQuery1}“);2executeQuery方法来实现。3CallableStatementcstmt.close;//Statementclose方法检索记录集以获得当前记录集中的某一记录的各个字段的值、ResultSet①执行完毕SQLResultSet类的对象,它包含全部的查询结果。但对ResultSet类的对象方式依靠于光标〔Cursor〕的类型,而对每一行中的各个列,可以按任何挨次进展处理〔固然,假设按从左到右的挨次对各列进展处理可以获得较高的执行效率〕;ResultSetCourseResultSet.TYPE_FORWARD_ONLY〔为缺省设置〕:光标只能前进不能后退,也就是只能从第一个始终移动到最终一个。ResultSet.TYPE_SCROLL_SENSITIVE:允许光标前进或后退并感应到其它ResultSetResultSet.TYPE_SCROLL_INSENSITIVE:允许光标前进或后退并不能感应到其它ResultSetResultSet类中的数据是否允许修改主要有:ResultSet.CONCUR_READ_ONLY〔为缺省设置〕:表示数据只能只读,不能更改。ResultSet.CONCUR_UPDATABLE:表示数据允许被修改。Statement或PreparedStatement对象时指定ResultSet的这两个特性。Statementstmt=con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);或PreparedStatementpstmt=con.PrepareStatement(“insertintobookTablevalues(?,?,?)“,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);②ResultSet类的对象维持一个指向当前行的指针,利用ResultSetnext〔在JDBC中,Java程序一次只能看到一行数据〕,假设next的返回值为false,则说明已到记录集的尾部。另外JDBC也没有类似ODBC的书签功能的方法。③利用ResultSetgetXXXXXX表JDBC中的Java数据类型,如getInt、getString、getDate等。访问时需要指定要检索的列〔可以承受int值作为列号〔从1开头计数〕或指定列〔字段〕名方式,但字段名不区分字母的大小写〕。while(rs.next){Stringname=rs.getString(“Name“);//intage=rs.getInt(“age“);floatwage=rs.getFloat(“wage“);StringhomeAddress=rs.getString(4);//}、数据转换利用ResultSet类的getXXX方法可以实现将ResultSet中的SQL数据类型Java、NULL要确定给定结果值是否是JDBCNULL,必需先读取该列,然后使用ResultSet.wasNull方法检查该次读取是否返回JDBCNULL。ResultSet.getXXXJDBCNULLwasNull值之一:Javanull对于返回Java对象的getXXX方法〔例如getString、getBigDecimal、getBytes、getDate、getTime、getTimestamp、getAsciiStream、getUnicodeStream、getBinaryStream、getObject〕。getBytegetShortgetIntgetLonggetFloat和getDouble。falsegetBoolean9.5.6、获得结果集中的构造信息:利用ResultSet类的getMetaData方法来获得结果集中的一些构造信息〔主要供给用来描述列的数量、列的名称、列的ResulSetMetaData〕。ResultsetMetaDatarsmd=rs.getMetaData;rsmd.getColumnCount;//返回结果集中的列数rsmd.getColumnLabel(1);//〔字段名〕例如:Statementstmt=con.createStatement;ResultSetrs=stmt.executeQuery(“select*fromTableName“);for(inti=1;i<=rs.getMetaData.getColumnCount;i++)//跟踪显示各个列的名称{System.out.print(rs.getColumnName(i)+“\t“);}while(rs.next){//跟踪显示各个列的值for(intj=1;j<=rs.getMetaData.getColumnCount;j++){System.out.print(rs.getObject(j)+“\t“);}}、更数据库前面主要介绍如何实现对数据库的查询操作,但在很多应用中需要实现对数〔即SQL语句中的InsertUpdate、Delete、Creat、Drap等〕。仍旧通过创立Statement对象来实现,但不再调用executeQueryexecuteUpdate方法。要点要点:正确区分Statement类中的executeQuery、execute和executeUpdate方法的用法:〔1〕executeQueryexecuteQuery执行一般的SQL〔SELECT并返回Resultset对象;〔2〕execute可以执行各种SQL查询语句,并可能返回多个结果集〔这一般主要发生在执行了返回多个结果集的存储过程时〕,此时可以承受Resultset类的getResultSet来获得当前的结果集;〔3〕executeUpdateSQLDDL对表中的记录进展操作对一个表中的记录可以进展修改、插入和删除等操作,分别对应SQLUpdate、Insert、Delete操作;executeUpdate方法的输入参数仍旧为一个String对象〔即所要执行的SQL语句〕,但输出参数不是ResultSet对象,而是一个整数〔它代表操作所影响的记录行数〕。Statementstmt=con.createStatement;stmt.executeUpdate(“UpdatebookTablesetTitle=”Java2”whereAuthor=”zhang”“);stmt.executeUpdate(“DeletefrombookTablewhereAuthor=”zhang”“);intobookTable(BookID,Author,Title)values(1,”LiMing”,”Java2”)“);//NULL程序实例:对数据库中的表进展更操作并显示操作前后的结果importjava.sql.*;publicclassDBUpdateSetTest{ publicstaticvoidmain(Stringargs[]){ try{Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);Connectioncon=DriverManager.getConnection(“jdbc:odbc:studlist“);Statementstmt=con.createStatement;ResultSetrs=stmt.executeQuery(“select*fromstudent“);System.out.println(“ResultbeforeexecuteUpdate“);while(rs.next){System.out.println(rs.getString(“name“));System.out.println(rs.getString(“age“));}stmt.executeUpdate(“Updatestudentsetname=”Yang”whereid=0“);stmt.executeUpdate(“Deletefromstudentwhereid=2“);stmt.executeUpdate(“Insertintostudent(id,name,age,sex)values(2,”zhang”,30,true)“);rs=stmt.executeQuery(“select*fromstudent“);System.out.println(“ResultAfterexecuteUpdate“);while(rs.next){System.out.println(rs.getString(“name“));System.out.println(rs.getString(“age“));}rs.close;stmt.close;con.close;}catch(Exceptione){System.out.println(e);}}}创立和删除表SQLCreateTableDropTableStatementexecuteUpdate方法来完成。Statementstmt=con.createStatement;stmt.executeUpdate(“createtableTableName(IDinteger,NameVARCHAR(20),Ageinteger)“);stmt.executeUpdate(“InsertintoTableName(ID,Name,Age)values(1,”YangMing”,30)“);Statementstmt=con.createStatement;stmt.executeUpdate(“DropTableTableName“);增加和删除表中的列对一个表的列进展更操作主要是使用SQL的ALTERTable的更操作会影响到表中的全部的行。Statementstmt=con.createStatement;stmt.executeUpdate(“AlterTableTableNameaddColumnAddressVarChar(50)“);stmt.executeUpdate(“UpdateTableNamesetAddress=”Beijing,China”whereID=1“);Statementstmt=con.createStatement;stmt.executeUpdate(“AlterTableTableNameDropColumnAddress“);stmt.executeQuery(“Select*fromTableName“);利用PreparedStatement对象实现数据更同SQL查询语句一样,对数据更语句时也可以在PreparedStatement对象上执行。使用PreparedStatement对象,只需传递一次SQL语句,可以屡次执行它,并且可以利用数据库的预编译技术,提高执行效率。另外也可以承受参数。PreparedStatementpstmt=con.prepareStatement(“UpdateTableNamesetAddress=”Beijing,China”whereID>1“);pstmt.executeUpdate;参数的输入与输出要实现使用SQL语句的输入与输出参数,必需在PreparedStatement类的对象上进展操作;同时由于CallableStatement类是PrepareStatement类的子类,所以在CallableStatemen对象上的操作也可以使用输入与输出参数;其主要的编程原理是在生成CallableStatement或PreparedStatement在SQL语句中指定输入或输出参数,在执行这个SQL语句之前,要对输入参数进展赋值。使用PreparedStatement类的对象通过prepareStatement类的对象可以实现在查询语句与数据更语句方面都可以设置输入参数。具体的方法是在SQL语句中用“?”标明参数,在执行SQL语句之前,使用setXXX方法给参数赋值,然后使用executeQuery或executeUpdate来执SQLSQLsetXXXXXX是JDBC的数据类型,如:Int、String等。setXXX方法有两个参数,第一个是要赋值的参数在SQL语句中的位置,SQL语句中的第一个参数的位置为1,其次个参数的位置为2;setXXX方法的其次个参数是要传递的值,如100、“Peking”等,随XXX的不同而为不同的类型。PreparedStatementpstmt=con.prepareStatement(“UpdateTableNamesetName=?whereID=?“);pstmt.setString(1,“zhangHua“);//〔Name〕zhangHua”for(inti=1;i<3;i++){pstmt.setInt(2,i);//〔ID〕为1,2pstmt.executeUpdate;}要点:最终实现UpdateTableNamesetName=zhangHuawhereID=1与UpdateTableNamesetName=zhangHuawhereID=2使用CallableStatement对象假设要求调用数据库的存储过程,要使用CallableStatement对象。另外还有些存储过程要求用户输入参数,这可以在生成CallableStatement对象的存储过程调用语句中设置输入参数。在执行这个存储过程之前使用setXXX方法给参数赋值,然后再执行这个存储过程。CallableStatementcstmt=con.prepareCall(“{callQuery(?)}“);//Querycstmt.setString(1,“输入参数“);//为存储过程供给输入参数ResultSetrs=cstmt.executeQuery;接收输出参数某些存储过程可能会返回输出参数,这时在执行这个存储过程之前,必需使CallableStatementregisterOutParameter方法首先登记输出参数,在registerOutParameter方法中要给出输出参数的相应位置以及输出参数的SQLgetXXX方法来获得输出参数的值。getXXX〔通过序号来指定〕的值。实例:

温馨提示

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

评论

0/150

提交评论