第十一章 数据库编程接口JDBC.ppt_第1页
第十一章 数据库编程接口JDBC.ppt_第2页
第十一章 数据库编程接口JDBC.ppt_第3页
第十一章 数据库编程接口JDBC.ppt_第4页
第十一章 数据库编程接口JDBC.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、第十一章 数据库编程接口JDBC,一、JDBC概述 二、通过JDBC访问数据库,一、JDBC概述,JDBC的特点 (1)在SQL水平上的API (2)与SQL的一致性 (3)可在现有数据库接口上实现 (4)提供一致的Java界面 (5)简单化 (6)使用健壮、静态的通用数据类型 (7)使任务简单化,一、JDBC概述,JDBC数据库设计方法 JDBC 两层应用模型,一、JDBC概述,JDBC 三层应用模型,一、JDBC概述,JDBC安全性 (1)JDBC必须保证无标志的Applet 是不可信任的 (2)JDBC应不允许不可信任的Applet访问本地数据库中的数据 (3)如果下载了一个已经向JDB

2、C DriverManager注册了的JDBC驱动程序,则只有在与下载驱动程序相同的服务器上下载的应用程序,才能用该驱动程序向JDBC提出建立连接 (4)一个不可信任的Applet只能与下载它的服务器上的数据库进行连接 (5)在与远程数据库服务器进行连接时,JDBC应避免自动或盲目使用本地机上的私有信息 (6)共享TCP连接检查 (7)本地文件访问权限检查 (8)本地文件写权限的检查,一、JDBC概述,关于JDBC API JDBC的核心是为用户提供Java API类库,让用户能够创建数据库连接、执行SQL语句、检索结果集、访问数据库元数据等。Java程序开发人员可以利用这些类库来开发数据库应

3、用程序。Java 接口实际上是常量和方法的集合,通过接口机制,可以使不同层次,甚至互不相关的类具有相同的行为。接口机制具有比多重继承更简单、更灵活的特点,并且具有更强的功能。与类不同的是一个接口可以有多个父接口,用逗号隔开,而一个类只能有一个父类,子接口继承父接口中所有的常量和方法。Java接口的主要作用是通过接口可以实现不相关类的相同行为而不需要考虑这些类之间的层次关系,通过接口可以指明多个类需要实现的方法,通过接口可以了解对象的交互界面而不需要了解对象所对应的类。,一、JDBC概述,Java常用接口 (1) java.sql.CallableStatement 接口 (2) java.sq

4、l.Connection 接口 (3) java.sql.DatabaseMetaData 接口 (4) java.sql.Driver 接口 (5) java.sql.PreparedStatement 接口 (6) java.sql.ResultSet 接口 (7) java.sql.ResultSetMetaData 接口,一、JDBC概述,Java常用类 (1) java.sql.Date 类 (2) java.sql.DrivrtManager 类 (3) Java.sql.DriverPropertyInfo 类 (4) java.sql.Time 类 (5) java.sql.T

5、imestamp 类 (6) java.sql.Types 类 (7) Java.sql.DataTruncation 类 (8) Java.sql.SQLException 类,一、JDBC概述,JDBC API 结构,二、通过JDBC访问数据库,创建数据库连接 1. 加载驱动程序 (1)JDBC-ODBC桥接驱动器 (2)本地API Java驱动程序 (3)网络协议Java驱动程序 (4)原协议Java驱动程序 加载驱动程序的一种简单方法是使用Class.forName方法显示加载一个驱动程序,如: Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);

6、该语句将加载JDBC-ODBC桥接驱动器,与数据库相连时,DriverManager将使用已加载的驱动程序。,二、通过JDBC访问数据库,例 加载驱动程序 import java.sql.*; import java.util.*; class testDBdriver public static void main(String argv) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Enumeration e=DriverManager.getDrivers(); for(;e.hasMoreElements();) System.ou

7、t.println(e.nextElement(); catch(java.lang.Exception e) System.out.println(Code has error); ,二、通过JDBC访问数据库,2. 建立连接 创建与数据源的连接可以使用DriverManager的getConnection方法。getConnection方法使用的格式有三种: getConnection(url); getConnection(url info); getConnection(url user pwd);,二、通过JDBC访问数据库,例 连接数据库 import .URL; import j

8、ava.sql.*; import java.util.*; class testDBconnect public static void main(String argv) String url, user, pwd; if (argv.length =0) System.out.println(Forget DataSource); System.out.println(use java testDBconnect testDSN sa); System.exit(0); url=jdbc:odbc:+argv0; if (argv.length 1)user=argv1; else us

9、er=; if (argv.length 2) pwd=argv2; else pwd=;,二、通过JDBC访问数据库,try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con=DriverManager.getConnection(url, user, pwd); DatabaseMetaData dd=con.getMetaData(); System.out.println(Data Source URL: +dd.getURL(); System.out.println(Driver Name: +dd.getDri

10、verName(); System.out.println(Driver Version: +dd.getDriverVersion(); System.out.println(Dtabase ProductName:+ dd.getDatabaseProductName(); System.out.println(Dtabase ProductVersion:+ dd.getDatabaseProductVersion(); con.close(); catch(Exception ex) System.out.println(ex.getMessage() ); ex.printStack

11、Trace (); ,二、通过JDBC访问数据库,3. 处理连接选项 对于一个成功创建的连接,可以通过Connection的setXXX方法设置连接选项,如用 setReadOnly()方法设置只读,用setAutoCommit()方法设置自动提交等。 例 连接状态的设置 import java.sql.*; class connectchoice public static void main(String argv) String url=jdbc:odbc:testDSN; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connecti

12、on con=DriverManager.getConnection(url,sa,); con.setReadOnly(true); System.out.println(Dtabase is read only?: +con.isReadOnly(); System.out.println(Dtabase is AutoCommit?: + con.getAutoCommit(); con.close(); catch(Exception ex) System.out.println(ex.getMessage() ); ex.printStackTrace (); ,二、通过JDBC访问

13、数据库,4. 获得数据源信息 成功创建连接后,便可以对数据源进行各种操作。在实例11.2中的DatabaseMetaData dd=con.getMetaData()语句可获得一个DatabaseMetaData对象,dd使用该对象将获得有关数 据源的相关信息。 getURL():获得数据源 URL getDriverName():获得驱动程序名称 getDriverVersion():获得驱动程序版本号 getDatabaseProductName():获得数据源连接的 DBMS 名称 getDatabaseProductVersion():获得数据源连接的 DBMS 版本号,二、通过JDB

14、C访问数据库,5. 关闭连接 关闭连接可使用java.sql.Connection的close()方法,当不在对数据源进行操作时,都应在程序关闭前关闭建立的连接。 6. 处理异常和警告 在创建数据源连接的过程以及对连接的操作过程中都可能产生异常和一些警告信息,异常将使应用程序无法正常执行下去,警告则不会影响到程序的运行。,二、通过JDBC访问数据库,访问数据库元信息 数据库元信息包括数据库中的表,表中的列,表的索引,数据类型,存储过程和对SQL 的支持程度等信息。利用这些信息,用户可以在完全不了解数据库结构的情况下编写访问数据库的应用程序。 当创建了与数据流的连接后,Connection对象包

15、含数据库的各种元信息。利用Connection对象的getMetaData()方法可以创建一个DatabaseMetaData对象,在该对象上可以获取到数据库的元信息。,二、通过JDBC访问数据库,1. 获取数据库基本信息 getDatabaseProductName:返回连接的数据库的 DBMS 名称 getDatabaseProductVersion:返回连接的数据库的 DBMS 版本号 getDriverName:返回驱动程序名称 getDriverVersion:返回驱动程序版本号 getURL:用于获取数据库的 URL,返回值是 String 对象 getUserName:返回建立连

16、接使用的用户的名称 IsReadOnly:返回数据库是否为只读状态,二、通过JDBC访问数据库,2. 获取表的信息 ResultSet ts=dmd.getTables(catalog, schemapattern, tablenamepattern, type); 其中参数意义分别如下: catalog:字符串,为目录名。使用(空串) 可检索没有目录的表,null 表示忽略目录。 Schemapatter:字符串,为大纲名称的匹配模式。使用(空串)可检索没有大纲的表。 Tablenamepatter:字符串,为表名匹配模式。 Type:字符串,为需要检索的表类型列表。null 表示返回所有类

17、型。,二、通过JDBC访问数据库,例 表定义信息的查询 import java.sql.*; class testtableinfo public static void main(String argv) try String url, user, pwd, tn, tt, str; String types=TABLE; url=jdbc:odbc:mytestDSN; user=sa; pwd=; Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con=DriverManager.getConnection(url, use

18、r, pwd); DatabaseMetaData dmd=con.getMetaData(); ResultSet rs=dmd.getTables(mysqldata, dbo, null ,types); while(rs.next() tn=rs.getString(TABLE_NAME); tt=rs.getString(TABLE_TYPE); str=表名 +tn+ +表类型+tt; System.out.println(str); con.close(); catch(Exception e)System.out.println(e.getMessage() ); e.prin

19、tStackTrace (); ,二、通过JDBC访问数据库,3. 获取列的信息 ResultSet ts=dmd. getColumns (catalog,schemapattern, Tablenamepattern, columnsname pattern); 其中参数意义分别如下: catalog:字符串,为目录名,使用(空串) 可检索没有目录的表,null 表示忽略目录。 schemapattern:字符串,为大纲名称的匹配模式,使用(空串) 可检索没有大纲的表。 Tablenamepattern:字符串,为表名匹配模式。 Columnsnamepattern:字符串,为列名匹配模式

20、。,二、通过JDBC访问数据库,例 表定义信息的查询 import java.sql.*; class testcolumninfo public static void main(String argv) try String url, user, pwd, tn, cn, ct, str; url=jdbc:odbc:mytestDSN; user=sa; pwd=; Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con=DriverManager.getConnection(url, user, pwd); Databas

21、eMetaData dmd=con.getMetaData(); ResultSet rs=dmd.getColumns(mysqldata, dbo, employee, %); while(rs.next() tn=rs.getString(TABLE_NAME); cn=rs.getString(COLUMN_NAME); ct=rs.getString(TYPE_NAME); str=表名 +tn+ 列名 +cn+ 列类型名 +ct;System.out.println(str); con.close(); catch(Exception e)System.out.println(e.

22、getMessage() ); e.printStackTrace (); ,二、通过JDBC访问数据库,4. 获取索引的信息 ResultSet ts=dmd. getIndexInfo (catalog, schemapattern, Tablenamepattern, unique, approximate); 其中参数意义分别如下: catalog:字符串,为目录名,使用(空串) 可检索没有目录的表,null表示忽略目录。 Schemapattern:字符串,为大纲名称的匹配模式,使用(空串) 可检索没有大纲的表。 Tablenamepattern:字符串,为表名匹配模式。 Uniqu

23、e:布尔值,为true时,只返回具有唯一值的索引;为false值时,不论索引值是否只有唯一值都返回。 Approximate:布尔值,为true时,返回结果可以是近似值;为false值时,返回结果为 精确值。 getIndexInfo方法返回一个ResultSet对象,对象中的每一行都是一个索引的描述。,二、通过JDBC访问数据库,5. 获取存储过程信息 ResultSet ts=dmd. getProcedures(catalog, schemapattern, procedurenamepattern); 其中,参数类型和意义分别如下: catalog:String类型,为目录名,使用(空

24、串) 可检索没有目录的存储过程,null表示忽略目录。 Schemapattern:String类型,表示大纲名称,使用(空串)表示仅返回没有大纲的结果。 Procedurenamepattern:String类型,表示存储过程名的匹配模式。 getProcedures 方法从目录中获取存储过程的描述信息 返回值为 ResultSet 对象,结果集中的各列是对存储过程的描述信息。注意,只返回同大纲一致的存储过程描述及标准的存储过程名,一般按 PROCEDURE_ SCHEMA和PROCEDURE_NAME来排序。,二、通过JDBC访问数据库,获取存储过程信息的另外一个方法是 getProced

25、ureColumns() : ResultSet rs=dmd.getProceduresColumns(catalog, schemapattern, Procedurenamepattern, columnnamepattern) 其中,参数的类型和意义分别如下: catalog:String类型,表示目录名,表示返回没有目录的结果,null 则表示从选择标准中删除一个目录名。 Schemapattern:String类型,表示大纲名称的匹配模式,表示返回没有大纲的结果。 Procedurenamepattern:String类型,表示存储过程名的匹配模式。 Columnnamepatte

26、rn:String类型,表示列名称的匹配模式。 该方法从目录中获得存储过程的参数和结果列的描述。只返回同大纲、存储过程和参数名一致的存储过程描述,一般按PROCEDURE_SCHEMA和PROCEDURE_NAME来排序。这样先返回存储过程名,然后是调用的参数名,最后是按列号顺序排列的列的描述。,二、通过JDBC访问数据库,6. 获取数据库对 SQL 的支持信息 getSQLKeywords:返回一个字符串,包括数据库支持的但不包括在SQL92 中的关键字 getNumericFunctions:返回字符串,包括数据库支持的数学函数 getStringFunctions:返回字符串,包括数据库

27、支持的字符串函数 getSystemFunctions:返回字符串,包括数据库支持的系统函数 getTimeDateFunctions:返回字符串,包括数据库支持的日期时间函数 supportsMinimumSQLGrammar:返回布尔值表示是否支持最小SQL语法 supportsCoreSQLGrammar:返回布尔值,表示是否支持核心SQL语法 supportsExtendedSQLGrammar: 返回布尔值表示是否支持扩展SQL 语法 supportsANSI92EntryLevelSQL:返回布尔值,表示是否支持ANSI92初级SQL语法 supportsANSI92Interme

28、diateSQL:返回布尔值,表示是否支持ANSI92中级 SQL 语法 supportsANSI92FullLSQL:返回布尔值,表示是否支持ANSI92全集SQL语法,二、通过JDBC访问数据库,查询数据库 在SQL中查询是通过SELECT语句来完成的,在JDBC中要执行SQL的查询语句,可以通过执行一般查询、参数查询和存储过程三种方式。这三种方式分别对应Statement、 PrepareStatement和CallableStatement对象。 1. 一般查询 这里的一般查询指的是没有参数的查询,这类查询一般使用Statement对象实现。一般查询的执行过程可分为:创建 Statem

29、ent 对象、选项设置、执行查询语句和关闭Statement对象。,二、通过JDBC访问数据库,(1)创建Statement对象 执行SQL查询的第一步便是准备好一个Statement对象,创建Statement对象可以使用 Connection接口的CreateStatement方法,如: Statement st=con. CreateStatement(); (2)选项设置 setMaxFieldSize()设置列值可能的最大值,该方法只能用于BINARY,VARBINARY,LONGVARBINARY,CHAR,VARCHAR,LONGVARCHAR 等类型的列。 SetMaxRows

30、()设置结果集的最大行数。 SetEscapeProcessing()设置是否由驱动程序处理转义字符,缺省情况下,由驱动程序在 SQL语句传递到数据库前进行转义字符替换。 SetQueryTimeout()设置执行一个查询语句可等待的时间。 SetCursorName()设置游标名称。,二、通过JDBC访问数据库,(3)执行查询语句 执行SQL查询语句可以使用Statement的executeQuery和execute方法,方法的参数是一个String对象,该对象实际是一个代表需要执行的SELECT语句字符串。executeQuery()方法返回一个ResultSet对象。如: ResultS

31、et rs=st.executeQuery(SELECT * FROM employee) 该方法执行后将返回表employee中的所有行,返回结果存放在ResultSet对象rs中。 executeQuery方法在一般情况下只能执行一个SQL查询语句,并且只能返回一个结果集。而execute()方法可以返回多个结果集,execute()方法的参数同样是一个代表SQL查询语句的字符串对象,execute()方法的返回值是一个boolean值。如果至少能够返回一个ResultSet 对象,则其返回值为true,否则返回false。执行execute()方法后可以使用getResultSet()、

32、 getMoreResultSet()以及getUpdateCount()等方法来处理结果集。,二、通过JDBC访问数据库,executeQuery和execute方法的参数是一个代表SQL查询语句的字符串,在编译的过程中,JDBC仅检查参数是否是一个字符串,而不管该字符串是否就是一个SQL查询语句。只有在驱动执行该语句时才会检测语句是否有错,如果发生错误,则产生一个SQLException 异常,用户应该捕获该异常并进行处理。 (4)关闭Statement对象 具有良好习惯的程序员应在对象不再使用时将其关闭,关闭Statement对象可以使用 Statement对象的close方法。 Sta

33、tement对象被关闭后,用该对象创建的结果集也会被自动关闭。,二、通过JDBC访问数据库,例 Statement的使用 import java.sql.*; class testStatement public static void main(String argv) String url=jdbc:odbc:testDSN; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con=DriverManager.getConnection(url, sa,); Statement st=con.createStateme

34、nt(); st.setMaxRows(100); ResultSet rs=st.executeQuery(SELECT * FROM employee); System.out.println(ResultSet MaxRows: +st.getMaxRows (); System.out.println(Query Time Out:+st.getMaxRows (); st.close(); catch(Exception ex)System.out.println(ex.getMessage() ); ex.printStackTrace (); ,二、通过JDBC访问数据库,2.

35、参数查询 在使用Statement对象时,因为每次执行查询时都需要将SQL语句传递给数据库,当多次执行同一查询语句时,将会影响其效率。在需要多次执行相同查询语句时,可以使用 PreparedStatement对象,如果数据库支持预编译,PreparedStatement对象可将SQL语句传递给数据库进行预编译,以后执行相同的SQL语句时,可以直接执行预编译好的语句,这样可提高查询速度。如果数据库不支持预编译,PreparedStatement对象则和Statement对象一样,在语句执行时才会传递给数据库。 PreparedStatement对象一个突出的特点是可以接收查询参数,在准备好的SQ

36、L语句中,指出需要的参数,再将该语句传递给数据库进行预编译,这样可得到较高的性能。Prepare Statement类实际上是从Statement类派生而来的,因此PreparedStatement对象可以直接使用Statement类的方法。,二、通过JDBC访问数据库,例 带参数的模式信息查询 import java.sql.*; class testPrepareStatement public static void main(String argv) String url=jdbc:odbc:testDSN; try Class.forName(sun.jdbc.odbc.JdbcOd

37、bcDriver); Connection con=DriverManager.getConnection(url, sa, ); String sqlStr=SELECT * FROM teacher WHERE 年龄?; PreparedStatement ps=con.prepareStatement(sqlStr); ps.setInt(1,25); ResultSet rs=ps.executeQuery(); ResultSetMetaData rsmd=rs.getMetaData(); int cc=rsmd.getColumnCount(); System.out.print

38、ln(ColumnName ColumnType); for(int i=1;i=cc;i+) System.out.println(rsmd.getColumnName(i)+ rsmd.getColumnTypeName(i); con.close(); catch(Exception ex)System.out.println(ex.getMessage() ); ex.printStackTrace (); ,二、通过JDBC访问数据库,3. 存储过程 存储过程实际上是数据库中已经存在的SQL查询语句,执行相应的存储过程相当于是 执行相应的SQL查询语句。在Access中存储过程对应于

39、一个查询,在存储过程中同样可以有输入参数或输出参数。要在JDBC中执行数据库中的存储过程可以使用CallableStatement对象。创建一个 Callable-Statement对象可以使用Connection类的prepareCall方法。prepareCall方法的参数是一个字符串,在该字符串中是调用存储过程的语句,其格式为: call procedurename() procedurename是存储过程的名称。执行存储过程可以使用executeQuery()或execute()方法。,二、通过JDBC访问数据库,例 使用存储过程 import java.sql.*; class te

40、stCallableStatement public static void main(String argv) String url=jdbc:odbc:testDSN; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con=DriverManager.getConnection(url, sa, ); CallableStatement cs=con.prepareCall(call testquery(); ResultSet rs=cs.executeQuery(); ResultSetMetaData rsmd

41、=rs.getMetaData(); int cc=rsmd.getColumnCount(); System.out.println(列名 列类型); for(int i=1;i=cc;i+) System.out.println(rsmd.getColumnName(i)+ rsmd.getColumnTypeName(i); con.close(); catch(Exception ex)System.out.println(ex.getMessage() ); ex.printStackTrace (); ,二、通过JDBC访问数据库,4. 处理查询参数 JDBC中的SQL查询参数可分

42、为两类:输入参数和输出参数。 通常,在PreparedStatement 对象上使用输入或输出参数。由于CallableStatement类是PreparedStatement类的子类,所以也可在CallableStatement对象上使用参数。 设置参数是通过在创建对象时使用的SQL语句中使用?来标明参数。一般情况下,带输入参数的 SQL 语句可用于 CallableStatement 对象和 PreparedStatement 对象,带输出参 数SQL句用于allableStatement对象。,二、通过JDBC访问数据库,(1)输入参数 输入参数必须在SQL语句执行前进行赋值,参数的赋值

43、可以使用PreparedStatement对象的setXXX方法。如,setBoolean、setByte、setInt、setString、setObject等,XXX对应了Java的数据类型。setXXX方法只是建立了Java数据类型和相应SQL数据类型的映射,并不进行数据类型的转换。如果需要进行数据类型的转换,可以使用setObject方法将一个Java Object对象传递给数据库,在Object对象传递给数据库之前,会被转换为相应的SQL数据类型。,二、通过JDBC访问数据库,Java Object 数据类型到 SQL 数据类型的映射关系,二、通过JDBC访问数据库,(2) 输出参数

44、 一些存储过程可能会返回输出参数,为了正确地获得输出参数,必须在存储过程执行前使用CallableStatement对象的registerOutParameter方法来登记输出参数。registerOutParameter方法有两种使用格式:registerOutParameter (parameterIndex, sqltype) 或 registerOutParameter (parameterIndex, sqltype, scale) ,方法的参数都是整型数,int Parameter-Index代表输出参数的位置,即第几个输出参数。 第二种方法中的Sqltype代表java.sql.

45、Types中定义的java.sql.Types.NUMERIC或 java.sql. Types.-DECIMAL类型的参数。 在执行了存储过程之后,必须使用getXXX方法来获取输出参数。 输出参数的特殊形式是SQL NULL。读取了参数之后,可以使用isNULL方法来判断输出参数是否是SQL NULL。getXXX方法在读取参数时不会进行数据类型的转换,在使用 registerOutParameter方法登记输出参数时已经指定了将返回的SQL数据类型, 必须使用相应的方法来读取参数。 对于SQL NULL值,不同的方法可能获得不同的结果。,二、通过JDBC访问数据库,SQL 数据类型到ja

46、va数据类型的映射关系,二、通过JDBC访问数据库,例 带输入参数的SQL查询 import java.sql.*; class testParameter public static void main(String argv) String url=jdbc:odbc:testDSN; String name,age,address,email; java.sql.ResultSet rs; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con=DriverManager.getConnection(url, sa,

47、 ); String sqlStr=SELECT * FROM employee WHERE employeeAge?; PreparedStatement ps=con.prepareStatement(sqlStr); ps.setInt(1, 30); rs=ps.executeQuery(); System.out.println(查询结果 ); while(rs.next() name=rs.getString(employeeName); age=rs.getString(employeeAge); address=rs.getString(employeeAddress); em

48、ail=rs.getString(employeeEmail); System.out.println(name+ +age+ +address+ +email); con.close(); catch(Exception ex) System.out.println(ex.getMessage() ); ex.printStackTrace (); ,二、通过JDBC访问数据库,检索结果集 JDBC提供ResultSet接口对查询结果集进行处理,可以认为ResultSet接口是对数据库中游标概念的抽象,该接口提供访问结果集的许多方法,通过这些方法可以获得结果集中的内容。JDBC具体执行SQL

49、查询语句时会返回一个ResultSet对象,使用该对象,可将查询结果输出显示给用户。如ResultSet中的next方法用于定位结果集中的下一条记录,该方法返回值为true或false。如果为true则表示成功定位一条记录,此时可对该行记录进行访问,为false则表示已经没有可读记录。在访问结果集时,可以使用ResultSet中的getXXX方法来读取当前记录中的数据。如getString方法可将当前记录中的数据以字符串形式返回;getInt方法可将当前记录中的数据以整数形式返回。,二、通过JDBC访问数据库,例 查询结果处理 import java.sql.*; class outputRe

50、sultSet public static void main(String argv) String url=jdbc:odbc:testDSN; String name, address, email; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con=DriverManager.getConnection(url, sa, ); CallableStatement cs=con.prepareCall(call testquery(); ResultSet rs=cs.executeQuery(); while

51、(rs.next() name=rs.getString(employeeName); address=rs.getString(employeeAddress); email=rs.getString(employeeEmail); System.out.println(name+ +address+ +email); con.close(); catch(Exception ex) System.out.println(ex.getMessage() ); ex.printStackTrace (); ,二、通过JDBC访问数据库,数据库更新操作 数据库的更新操作包括:记录的修改、插入和删

52、除,表的创建和删除,增加和删除表中的列。数据库的更新包括:记录的修改,插入和删除,表的创建和删除,增加和删除表中的列等操作。这些操作涉及到的SQL语句有:CREATE,DELETE,DROP,INSERT,UPDATE 等。数据库更新操作在Statement对象上能够完成,执行SQL更新语句可使用executeUpdate 方法。 executeUpdate方法的参数是一个字符串对象,该字符串代表需要执行的SQL语句,其返回值是一个整数,该整数代表DELETE、INSERT和UPDATE操作所影响的记录的条数,对于其他不返回结果的SQL语句,该方法返回值为零。,二、通过JDBC访问数据库,1.

53、 创建表 创建表使用SQL的CREATE TABLE语句。如: st.executeUpdate(CREATE TABLE customer(cName VARCHAR(10), cAge SMALLINT, cAddress VARCHAR(20); 该语句将创建一个名为customer 的表,该表中包括的字段有:cName字符串型,长度为10;cAge整型;cAddress字符串型,长度为20。 2. 删除表 删除表使用SQL的DROP TABLE 语句。如: st.executeUpdate(DROP TABLE customer); 3. 增加表中的列 向表中添加列使用SQL的ALTE

54、R TABLE语句。如: st.executeUpdate(ALTER TABLE customer ADD COLUMN cEmail VARCHAR(20); 该语句向表中添加名为cEmail的列,其类型为字符串型,长度为20。,二、通过JDBC访问数据库,4. 删除表中的列 删除表中的列也是使用SQL的ALTER TABLE语句。如: st.executeUpdate(ALTER TABLE customer DROP COLUMN cEmail); 5. 插入记录 插入记录使用SQL的INSERT语句。如: st.executeUpdate(INSERT INTO customer(c

55、Name, cAge, cAddress, cEmail) values(Mike Joden, 45, New York Three Street ,); 6. 修改记录 修改记录使用SQL的UPDATE语句。如: st.executeUpdate(UPDATE customer SET cAge=34 WHERE cNAme=Mike); 7. 删除记录 删除记录使用SQL的DELETE语句。如: st.executeUpdate(DELETE FROM customer WHERE cNAme=Mike);,二、通过JDBC访问数据库,例 数据库模式修改操作 import java.sql.*; class testDatabase public static void main(String argv) String url=jdbc:odbc:testDSN; String name, age, address, email, str; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con=DriverManager.getConnection(

温馨提示

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

评论

0/150

提交评论