《第11章数据库访问编程.ppt》由会员分享,可在线阅读,更多相关《第11章数据库访问编程.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、12章数据库编程章数据库编程主要内容:主要内容:SQL基础知识基础知识JDBC基础知识基础知识数据库编程的基本步骤(重点)数据库编程的基本步骤(重点)每一步的具体实现(重点)每一步的具体实现(重点)数据库概述数据库概述数据库是一个有组织的数据集合,它由一个或多个表数据库是一个有组织的数据集合,它由一个或多个表组成。每一个表中都存储了对一类对象的数据描述。组成。每一个表中都存储了对一类对象的数据描述。数据库管理系统(数据库管理系统(databasemanagementsystem,DBMS)以一种与数据库格式一致的方式,提供了存)以一种与数据库格式一致的方式,提供了存储和组织数据的机制。储和组织
2、数据的机制。当前最流行的数据库是关系型数据库,它是将数据表当前最流行的数据库是关系型数据库,它是将数据表示为表的集合,通过建立简单表之间的关系来定义结示为表的集合,通过建立简单表之间的关系来定义结构的一种数据库。数据库中的表按照行和列的形式来构的一种数据库。数据库中的表按照行和列的形式来存储信息。行表示关系型数据库中的记录,列表示数存储信息。行表示关系型数据库中的记录,列表示数据属性。据属性。比较著名的关系数据库管理系统有比较著名的关系数据库管理系统有Oracle、Sybase、DB2、MySQL、MicrosoftSQLServer、MicrosoftAccess等。等。SQL基础知识基础知
3、识SQL是结构化查询语言(是结构化查询语言(StructuredQueryLanguage)的缩写。)的缩写。SQL是用于对存放在计算机是用于对存放在计算机数据库中的数据进行组织、管理和检索的一种工具;数据库中的数据进行组织、管理和检索的一种工具;是针对一种特定类型的数据库是针对一种特定类型的数据库-关系数据库使用的。关系数据库使用的。SQL的常用语句:的常用语句:1、Select2、Insertinto3、Delete4、Update5、Createtable6、DroptableSQL基础知识基础知识SQL是一个国际化标准语言,几乎所有关是一个国际化标准语言,几乎所有关系型数据库都用系型数
4、据库都用SQL语言执行数据查询和语言执行数据查询和操纵。操纵。理解理解SQL语句时要注意几点:语句时要注意几点:(1)SQL语言中的语句都是独立执行的,无上语言中的语句都是独立执行的,无上下文联系;下文联系;(2)每条语句都有自己的主关键字,语句中可每条语句都有自己的主关键字,语句中可包含若干子句;包含若干子句;(3)SQL语句本身不区分大小写。语句本身不区分大小写。1.建表语句建表语句格式:格式:CREATETABLEtable_name(column1typenotnull,)功能:在当前数据库中创建一张名为的功能:在当前数据库中创建一张名为的table_name表格结构。表格结构。2.删
5、除表删除表格式:格式:DROPtable_name功能:在当前数据库中删除名为功能:在当前数据库中删除名为table_name的表。的表。3.查询语句查询语句格式:格式:SELECTcol1,col2,.,colnFROMtable_nameWHEREcondition_expression功能:从数据库表中检索满足条件的记录。功能:从数据库表中检索满足条件的记录。WHERE子句是可选项,它可以包含子句是可选项,它可以包含、=、=、和和LIKE运算符。运算符。LIKE运算符运算符用于带有通配符百分号(用于带有通配符百分号(%)和下划线()和下划线(_)的模式匹配。的模式匹配。4.插入语句插入语
6、句格式:格式:INSERTINTOtable_name(col1,col2,.,coln)VALUES(v1,v2,.,vn)功能:在表功能:在表table_name中插入一条记录,各中插入一条记录,各列的值依次分别为列的值依次分别为v1、v2、vn等,若某等,若某列的列名未给,则值为列的列名未给,则值为NULL。注意:注意:(1)如果所有的列名都未给,则在如果所有的列名都未给,则在Values中必须依次给出所有列的值。中必须依次给出所有列的值。(2)给出的值的类型必须与对应的列的类型相一给出的值的类型必须与对应的列的类型相一致。致。5.更新语句更新语句格式:格式:UPDATEtable_na
7、meSETcol1=v1,col2=v2,.,coln=vnWHEREcondition_expression功能:更新表功能:更新表table_name中满足条件的记录,使列中满足条件的记录,使列col1的的值为值为v1、列、列col2的值为的值为v2、列、列coln的值为的值为vn等。等。注意:如不给出条件,则更新表中所有记录。注意:如不给出条件,则更新表中所有记录。例如,例如,account表中,账号为表中,账号为“1280316401“的账户取款的账户取款200元后应更新余额,使用语句如下:元后应更新余额,使用语句如下:UPDATEaccountSETaccountAmount=acc
8、ountAmount-200WHEREaccountNumber=12803164016.删除语句删除语句格式:格式:DELETEFROMtable_nameWHEREcondition_expression功能:删除表功能:删除表table_name中满足条件的记录。中满足条件的记录。特别注意:如果不给出条件,则删除表中所有记特别注意:如果不给出条件,则删除表中所有记录。录。例如,对例如,对account表中,账号为表中,账号为“1280316401“的账户进行销户处理,语句如下:的账户进行销户处理,语句如下:DELETEFORMaccountWHEREaccountNumber=12803
9、16401JDBC基础知识基础知识Java程序使用程序使用JDBC与数据库进行通信,并用它操纵与数据库进行通信,并用它操纵数据库中的数据。数据库中的数据。JDBC是是JavaDataBaseConnectivity的缩写,它是的缩写,它是一种可用于一种可用于执行执行SQL语句的语句的Java API,由一组用,由一组用Java编写的类和接口组成。编写的类和接口组成。JDBC主要提供了跨平台的数据主要提供了跨平台的数据库访问方法,为数据库应用开发人员提供了一种标准的库访问方法,为数据库应用开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯应用程序设计接口,使开发人员可以用纯Java语言
10、编写语言编写完整的数据库应用程序。完整的数据库应用程序。类似于类似于Microsoft的的ODBC。JDBC是一种规范,它让各数据库厂商为是一种规范,它让各数据库厂商为Java程序员程序员提供标准的数据库访问类和接口,这样就使得独立于提供标准的数据库访问类和接口,这样就使得独立于DBMS的的Java应用程序的开发工具和产品成为可能应用程序的开发工具和产品成为可能。JDBC与与ODBCJDBC与与Microsoft开放数据库连接(开放数据库连接(ODBC)的)的工作原理非常类似。工作原理非常类似。ODBC是是OpenDatabaseConnectivity的英文简写。它是的英文简写。它是由由Mi
11、crosoft提出的为连接不同数据库而制定的一提出的为连接不同数据库而制定的一种接口标准,是用种接口标准,是用C语言实现的,标准应用程序数语言实现的,标准应用程序数据接口。通过据接口。通过ODBCAPI,应用程序可以存取保,应用程序可以存取保存在多种不同数据库管理系统(存在多种不同数据库管理系统(DBMS)中的数)中的数据,而不论每个据,而不论每个DBMS使用了何种数据存储格式使用了何种数据存储格式和编程接口。和编程接口。ODBC的结构包括四个主要部分:应用程序接口、的结构包括四个主要部分:应用程序接口、驱动器管理器、数据库驱动器和驱动器管理器、数据库驱动器和数据源数据源。ODBC数据源设置数
12、据源设置进行进行ODBC数据数据源设置,在源设置,在WindowsXP环环境下,可按路径境下,可按路径开始菜单开始菜单-设置设置-控控制面板制面板-管理工具管理工具-数据源数据源(ODBC),双),双击可打开如图所击可打开如图所示的对话框。示的对话框。通过通过JDBC访问数据库访问数据库JDBC数据库驱动程序数据库驱动程序JDBC数据库驱动程序数据库驱动程序的功能是:一面用底层协的功能是:一面用底层协议与数据库服务器进行对话;一面用议与数据库服务器进行对话;一面用JDBCAPI与用户程序进行对话。与用户程序进行对话。为实现为实现“与平台无关与平台无关”的特点,的特点,JDBC为我们提为我们提供
13、了一个供了一个“驱动程序管理器驱动程序管理器”,它能动态维护数,它能动态维护数据库查询所需的所有驱动程序对象。据库查询所需的所有驱动程序对象。用户可以从数据库供应商那里获得用户可以从数据库供应商那里获得JDBC数据库数据库驱动程序。驱动程序。JDBC的基本结构的基本结构Java应用程序应用程序JDBC驱动程序管理器驱动程序管理器SQL实现的实现的JDBC驱动程序驱动程序ORACLE实现的实现的JDBC驱动程序驱动程序MYSQL实现的实现的JDBC驱动程序驱动程序ODBC数据数据源源SQL数据库数据库ORACLE数数据库据库MYSQL数数据库据库JDBC-ODBC桥驱动程序桥驱动程序JDBCAP
14、IJDBCDriverAPIJDBC驱动程序类型驱动程序类型JDBC驱动程序可分为以下四个种类:驱动程序可分为以下四个种类:(1)JDBC-ODBC桥接桥接通过通过JDBC-ODBC桥连接,开发者可以很容桥连接,开发者可以很容易的使用易的使用JDBC来访问一个来访问一个ODBC数据源。数据源。该驱动的使用要求将每个客户机上都要安该驱动的使用要求将每个客户机上都要安装装ODBC驱动,同时还要求配置驱动,同时还要求配置ODBC数数据源。这种连接方式简单但是效率低。它据源。这种连接方式简单但是效率低。它的实现原理如图的实现原理如图12.2(2)部分)部分Java,部分本地驱动部分本地驱动在在这这种种
15、驱驱动动方方式式下下,JDBC驱驱动动将将标标准准的的JDBC调调用转为对数据库用转为对数据库API的本地调用。的本地调用。(3)JDBC网络纯网络纯Java驱动程序驱动程序这种驱动程序接受这种驱动程序接受JDBC请求,并把它们转换请求,并把它们转换成一个与成一个与DBMS无关的网络协议。这些请求发送无关的网络协议。这些请求发送到服务器,由服务器把这些数据库请求转换成到服务器,由服务器把这些数据库请求转换成DBMS特有的协议。此类驱动程序很适合特有的协议。此类驱动程序很适合Internet应用。因为它不需要客户端安装数据库驱动程序,应用。因为它不需要客户端安装数据库驱动程序,而且该类型的驱动程
16、序是跨平台的。而且该类型的驱动程序是跨平台的。(4)本地协议纯)本地协议纯Java驱动程序驱动程序这种类型的驱动程序将这种类型的驱动程序将JDBC请求直接转换请求直接转换为为DBMS所使用的网络协议。这将允许从客所使用的网络协议。这将允许从客户机上直接调用户机上直接调用DBMS服务器。由于许多这服务器。由于许多这样的协议都是专用的,因此数据库提供者是样的协议都是专用的,因此数据库提供者是这类驱动程序的主要来源,如这类驱动程序的主要来源,如Oracle和和SQLServer等等DBMS都有自己的驱动程序,都有自己的驱动程序,该类驱动原理如图该类驱动原理如图12.3;实实现现第第3、4类类驱驱动动
17、程程序序将将成成为为JDBC访访问问数数据据库库的的首首选选方方法法,但但它它们们要要求求服服务务器器端端安安装装特特有有的的JDBC驱驱动动程程序序。而而JDBC-ODBC桥桥接接的的方方式式可可以以通通过过ODBC驱驱动动访访问问绝绝大大部部分分数数据据库库,但但这这种种方方式式要要牺牺牲牲数数据据库库连连接接的的性性能能。但但在在没没有有特特定定的的数数据据库库本本地地驱驱动动时时,可可以使用桥接的方式连接。以使用桥接的方式连接。JDBCURL提供了一种标识数据库的方法,它的作用是使提供了一种标识数据库的方法,它的作用是使程序员编写的程序能找到相应的数据库驱动程序并进行连程序员编写的程序
18、能找到相应的数据库驱动程序并进行连接。接。实际上,实际上,JDBC驱动程序的编程员将决定用什么驱动程序的编程员将决定用什么JDBCURL来标识特定的驱动程序,而使用来标识特定的驱动程序,而使用JDBC驱动程序的程驱动程序的程序员不必关心如何来形成序员不必关心如何来形成JDBCURL,他们只须知道他们只须知道URL的格式就可以了。的格式就可以了。JDBCURL的标准语法如下所示。它由三部分组成,各部分的标准语法如下所示。它由三部分组成,各部分间用冒号分隔:间用冒号分隔:jdbc:JDBCURL中的协议总是中的协议总是jdbc。子子协协议议为为驱驱动动程程序序名名或或数数据据库库连连接接机机制制(
19、这这种种机机制制可可由由一一个个或或多多个个驱驱动动程程序序支支持持)的的名名称称。子子协协议议名名的的典典型型示示例例是是odbc,该名称是用于指定连接该名称是用于指定连接ODBC数据源。数据源。JDBCURL 子名称的作用是为定位数据库提供足够子名称的作用是为定位数据库提供足够的信息。的信息。例如,通过例如,通过JDBC-ODBC桥来访问某个数据桥来访问某个数据库,可以用如下所示的库,可以用如下所示的URL:jdbc:odbc:test此此URL的的子子协协议议为为odbc,子子名名称称为为test。”test”是是本本地地ODBC数数据据源源名名,它它是是由由JDBC程程序序开开发发人人
20、员员在在数数据据库库端端建建立立并并设设置置的。的。下面给出三个常用的下面给出三个常用的JDBCURL:(1)桥接方式连接的桥接方式连接的URLjdbc:odbc:datasource/datasource为数据源名为数据源名(2)本地驱动连接)本地驱动连接SQLServer2000的的URLjdbc:microsoft:sqlserver:/127.0.0.1:1433;DatabaseName=pubs/pubs为数据库名为数据库名(3)本地驱动连接)本地驱动连接Oracle的的URLjdbc:oracle:thin:localhost:1521:orcl/orcl为数据库的为数据库的SI
21、DJDBC访问数据库的基本步骤访问数据库的基本步骤1、引入、引入SQL类类2、创建数据库、创建数据库3、加载、加载JDBC驱动程序驱动程序4、创建数据库连接、创建数据库连接5、创建、创建Statement6、执行、执行Statement7、处理查询结果集、处理查询结果集8、关闭数据库连接、关闭数据库连接JDBC访问数据库的基本过程访问数据库的基本过程1、创建数据库、创建数据库首先,打开首先,打开Access,点击,点击“文件文件”菜单栏下的菜单栏下的“新建新建”,建,建一个空一个空“数据库数据库”。输入数据库名,建立一个名为。输入数据库名,建立一个名为“TestJDBC”的数据库。点击生成的对
22、话框中的的数据库。点击生成的对话框中的“使用设计器使用设计器创建表创建表”来生成一个新的数据表,名为来生成一个新的数据表,名为“TestStudent”,具,具体字段如下图体字段如下图:JDBC访问数据库的基本过程访问数据库的基本过程2、注册数据源、注册数据源3、加载加载JDBC驱动程序驱动程序1)加载加载jdbc-odbc桥驱动程序桥驱动程序Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);DriverManager.registerDriver(newsun.jdbc.odbc.JdbcOdbcDriver();2)加载加载microsoftsql
23、serverJDBC驱动程序驱动程序Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);3)加载加载oracleJDBC驱动程序驱动程序Class.forName(“oracle.jdbc.driver.OracleDriver”);JDBC访问数据库的基本过程访问数据库的基本过程4)加载加载mysqlJDBC驱动程序驱动程序Class.forName(“org.git.mm.mysql.Driver”);)加载加载IBMDB2JDBC驱动程序驱动程序Class.forName(“com.ibm.db2.jdbc.app.
24、DB2Driver”);以上操作时如果找不到驱动程序,会抛出以上操作时如果找不到驱动程序,会抛出ClassNotFoundException异常,因此在加载驱动异常,因此在加载驱动程序时要对异常进行处理。程序时要对异常进行处理。JDBC访问数据库的基本过程访问数据库的基本过程4、创建数据库连接、创建数据库连接调用调用DriverManager类的静态方法类的静态方法getConnection(Stringconnect_stringConnectioncon=DriverManager.getConnection(url,user,pwd);其中其中url用于定位数据库用于定位数据库常用的常用
25、的url实例有:实例有:jdbc:oracle:thin:host:1521:orcljdbc:microsoft:sqlserver:/host;DataName=studentjdbc:odbc:datasoucerjdbc:mysql:/host/myDBjdbc:sybase:Tds:localhost/myDbjdbc:db2:/localhost:5000/dbnameJDBC访问数据库的基本过程访问数据库的基本过程5、创建、创建Statement创建创建SQL语句对象,以便执行用户定义的语句对象,以便执行用户定义的SQL语句。语句。Statementst=con.createSt
26、atement()throwsSQLException;Statementst=con.createStatement(intResultSetType,intResultSetConcurrency)throwsSQLException;其中参数其中参数resultsettype有三个取值有三个取值ResultSet.TYPE_FORWARD_ONLY,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.TYPE_SCROLL_INSENSITIVE参数参数ResultSetConcurrency有两个取值有两个取值ResultSet.CONCUR_READ_
27、ONLYResultSet.CONCUR_UPDATABLETYPE_FORWARD_ONLY:缺省类型。只允许向前访问一缺省类型。只允许向前访问一次次,并且不会受到其他用户对该数据库所作更改的影响。,并且不会受到其他用户对该数据库所作更改的影响。TYPE_SCROLL_INSENSITIVE:允许在列表中向前或向后:允许在列表中向前或向后移动,甚至能进行特定定位,例如移至列表中的第四个记录移动,甚至能进行特定定位,例如移至列表中的第四个记录或从当前位置向后移动两个记录。不会受到其他用户对该数或从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改的影响。据库所作更改的影响。TYPE_
28、SCROLL_SENSITIVE:象:象TYPE_SCROLL_INSENSITIVE相同,允许在记录中定位。相同,允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从查询之后删除一个记录,那个记录将从ResultSet中消失。中消失。类似的,对数据值的更改也将反映在类似的,对数据值的更改也将反映在ResultSet中。中。第二个参数设置第二个参数设置ResultSet的并发性,该参数确定是否能更的并发性,该参数确定是否能更新新ResultSet。其选项有:。其选项有:CONCUR_READ
29、_ONLY:这是缺省值,指定不能更新:这是缺省值,指定不能更新ResultSetCONCUR_UPDATABLE:指定能更新:指定能更新ResultSetJDBC访问数据库的基本过程访问数据库的基本过程6、执行、执行StatementSQL语句分为两大类:一类是数据定义和更新语句,语句分为两大类:一类是数据定义和更新语句,用用Statement中定义的中定义的executeUpdate()成员方法执行;另成员方法执行;另一类是一类是SELECT查询语句,用查询语句,用Statement中定义的中定义的executeQuery()成员方法执行。成员方法执行。ResultSetrs=st.exec
30、uteQuery(select*fromstu);ResultSetrs=st.executeUpdate(“delete*fromstuwherename=?);JDBC访问数据库的基本过程访问数据库的基本过程7、处理查询结果集、处理查询结果集Statement执行执行SQL语句后,将返回一个结果集对象语句后,将返回一个结果集对象ResultSet。每个。每个ResultSet对象都有一个游标指向结果集的当对象都有一个游标指向结果集的当前位置,游标的初始位置是在结果集的第一行之前。前位置,游标的初始位置是在结果集的第一行之前。ResultSet中定位游标的方法主要有:中定位游标的方法主要有:
31、absolute(introw)afterLast()beforeFirst()first()isAfterLast()isBeforeFirst()isFirst()isLast()last()next()previous()及其他很多方法和操作。及其他很多方法和操作。JDBC访问数据库的基本过程访问数据库的基本过程8、关闭数据库连接、关闭数据库连接rs.close();/关闭记录集关闭记录集st.close();/关闭语句关闭语句con.close();/关闭连接关闭连接创建一个学生管理数据库,并建立一学生表创建一个学生管理数据库,并建立一学生表通过通过JDBC访问该数据库:见例访问该数据
32、库:见例JDBCJDBC中几个常用的类和接口中几个常用的类和接口1、JDBC驱动设置类驱动设置类DriverManagerDriverManagerDriverManager类类位位于于JDBCJDBC的的管管理理层层,作作用用于于用用户户和和驱驱动动程程序序之之间间。它它的的作作用用是是跟跟踪踪可可用用的的驱驱动动程程序序,管管理理JDBCJDBC驱驱动动程程序序接接口口,并并在在数数据据库库和和相相应应驱驱动动程程序序之之间间建建立立连连接接。另另外外,DriverManagerDriverManager 类类也也处处理理诸诸如如驱驱动动程程序序登登录录时间限制及登录和跟踪消息的显示等事务
33、。时间限制及登录和跟踪消息的显示等事务。加加载载DriverManagerDriverManager类类前前要要先先调调用用Class.forNameClass.forName()方方法法加加载载驱驱动动程程序序类类。以以下下代代码码用用于于加加载载驱驱动动程程序类:序类:String String jdbcDriverjdbcDriver=sun.jdbc.odbc.JdbcOdbcDriversun.jdbc.odbc.JdbcOdbcDriver;try try Class.forName(jdbcDriverClass.forName(jdbcDriver););catch(Class
34、NotFoundExceptioncatch(ClassNotFoundException e)e)System.out.printlnSystem.out.println(未找到要加载的驱动类未找到要加载的驱动类););注意:注意:Class.forName()方法加载程序驱动类时,可方法加载程序驱动类时,可能会发生能会发生“ClassNotFoundException”异常,所异常,所以要用以要用trycatch语句捕捉异常。语句捕捉异常。2 2、建立连接建立连接 加加 载载 DriverManagerDriverManager类类 最最 常常 用用 的的 方方 法法 就就 是是 Driv
35、erManager.getConnectionDriverManager.getConnection()方方 法法,该该 方方 法法 用用 于于 建建 立立 与与 数数 据据 库库 的的 连连 接接。DriverManager.getConnectionDriverManager.getConnection()()方法形式具体如下:方法形式具体如下:getConnection(StringgetConnection(String urlurl,String String user,user,String String password)password)getConnection(String
36、getConnection(String urlurl)前前一一个个方方法法针针对对SQLServerSQLServer和和OracleOracle数数据据库库等等服服务务器器数据库,而数据库,而AccessAccess数据库用后一个方法就行了。数据库用后一个方法就行了。以下代码是通常情况下用驱动程序建立连接所需所以下代码是通常情况下用驱动程序建立连接所需所有步骤的示例:有步骤的示例:String String jdbcDriverjdbcDriver=sun.jdbc.odbc.JdbcOdbcDriversun.jdbc.odbc.JdbcOdbcDriver;String String
37、jdbcURLjdbcURL=jdbc:odbc:studentjdbc:odbc:student;Class.forName(jdbcDriverClass.forName(jdbcDriver););Connection Connection con con=DriverManager.getConnection(jdbcURLDriverManager.getConnection(jdbcURL););注意:注意:getConnection方法可能导致方法可能导致“SQLException”异常,所以编写程序时要用异常,所以编写程序时要用trycatch语句捕捉异常。语句捕捉异常。Con
38、nection接口接口Connection实际上是一个接口,它负责维护实际上是一个接口,它负责维护Java应用程序与数据库之间的连接。应用程序与数据库之间的连接。Connection对象代表与数据库的连接。对象代表与数据库的连接。连接过程包括所执行的连接过程包括所执行的SQL语句和在该语句和在该连接上所返回的结果。一个应用程序可与连接上所返回的结果。一个应用程序可与单个数据库有一个或多个连接,或者可与单个数据库有一个或多个连接,或者可与许多数据库有连接。许多数据库有连接。Connection实际上是接口,因而不能实例实际上是接口,因而不能实例化,通常使用化,通常使用DriverManager.
39、getConnection方法返回方法返回一个一个Connection对象对象方方 法法说说 明明Statement createStatement()建立一个建立一个Statement对对象象void close()断开断开连连接接void commit()提交提交SQL指令指令boolean isClosed()判断是否已断开判断是否已断开连连接接boolean isReadOnly()判断是否判断是否为为只只读读方式方式void rollback()取消取消SQL指令指令PreparedStatement prepareStatement(String sql)建立一个建立一个Prepa
40、redStatement对对象象Connection con=DriverManager.getConnection(url);/建立一个连接,/创建Statement对象 Statement stmt=con.createStatement();Statement类和接口类和接口Statement对象用于将对象用于将SQL语句发送到数据库语句发送到数据库中,并返回结果。中,并返回结果。方方 法法说说 明明ResultSet executeQuery(String sql)执执行行SQL查询查询指令指令select并返回并返回结结果果集集int executeUpdate(String sql
41、)执执行行对对数据数据库库修改的修改的SQL指令如指令如insert、delete、update等等void close()断开断开对对数据数据库库的的连连接接实实际际上上有有三三种种Statement接接口口:Statement、PreparedStatement(它它从从Statement继继承承而而来来)和和 CallableStatement(它它从从PreparedStatement继继承承而而来来)。它它们们用用于于发发送送特特定定类类型型的的SQL语语句句:Statement接接口口用用于于执执行行不不带带参参数数的的简简单单SQL语语句句;PreparedStatement接接
42、口口用用于于执执行行带带参参数数的的预预编编译译SQL语语句句;CallableStatement接接口用于执行对数据库存储过程的调用。口用于执行对数据库存储过程的调用。2 2、使用使用 Statement Statement 对象执行语句对象执行语句 实实现现StatementStatement接接口口的的对对象象有有三三种种执执行行 SQL SQL 语语句句的的方方 法法:executeQueryexecuteQuery()、executeUpdateexecuteUpdate()和和 executeexecute()。具具体体使使用用哪哪一一个个方方法法由由 SQL SQL 语语句句所所
43、产产生生的的内容决定。内容决定。(1)(1)方方法法 executeQueryexecuteQuery ()用用于于返返回回单单个个结结果果集集对对象象(ResultSetResultSet对对象象),它它可可以以执执行行SELECT SELECT 查查询询语语句。句。(2)方法方法executeUpdate()用于执行用于执行INSERT、UPDATE或或DELETE语句以及语句以及SQLDDL(数据数据定义语言)语句,例如定义语言)语句,例如CREATETABLE和和DROPTABLE等。等。(3)方方法法execute()用用于于执执行行返返回回多多个个结结果果集集、多多个更新计数或二者
44、组合的语句。个更新计数或二者组合的语句。Statement对对象象在在执执行行SQL语语句句时时,将将关关闭闭之之前前生生成成的的ResultSet对对象象(如如果果存存在在)。这这意意味味着着Statement对对象象重重新新执执行行SQL语语句句之之前前,需需要要完完成对当前成对当前ResultSet对象的处理。对象的处理。3、关闭、关闭Statement对象对象调用调用Statement对象的对象的close()方法关闭方法关闭Statement对象。对象。Statement对象将由对象将由Java垃圾收集程序垃圾收集程序自动关闭。而作为一种好的编程风格,应在不需自动关闭。而作为一种好的
45、编程风格,应在不需要要Statement对象时显式地关闭它们。这将立即对象时显式地关闭它们。这将立即释放释放DBMS资源,有助于避免潜在的内存问题。资源,有助于避免潜在的内存问题。当一个当一个Statement对象调用对象调用close()方法时,它产方法时,它产生的生的ResultSet对象也将被关闭。对象也将被关闭。注注意意:使使用用StatementStatement接接口口进进行行查查询询时时可可能能导导致致“SQLExceptionSQLException”异异常常,所所以以编编写写程程序序时时要用要用try catchtry catch语句捕捉异常。语句捕捉异常。ResultSet
46、接口接口ResultSet结结果果集集一一般般是是一一个个表表,其其中中有有查查询询所所返返回回的的列列标标题题及及相相应应的的值值,即即包包含含符符合合SQL语语句句中中条条件件的的所所有有行行,并并且且它它通通过过一一套套getXXX方方法法(这这些些get方方法法可可以以访访问问当当前前行行中中的的不不同同列列)提提供供了了对对这这些些行行中中数数据据的的访访问。问。ResultSetrs=stmt.executeQuery(sql);/结果集结果集while(rs.next()Stringps=rs.getString(password);if(ps.equals(password)/
47、验证通过验证通过ok=true;1 1、记录列、记录列 若想获得当前游标指向记录的列值,可通过若想获得当前游标指向记录的列值,可通过调用调用getXXXgetXXX方法来完成,其中方法来完成,其中XXXXXX是与该参是与该参数相应的类型。例如,如果参数是数相应的类型。例如,如果参数是intint型数型数据,则使用的方法就是据,则使用的方法就是getIntgetInt。ResultSet对象的对象的getXXX方法以一个列号(方法以一个列号(int型)或型)或者一个列名(者一个列名(String型)为参数来表示要获型)为参数来表示要获取哪一列的值,假如要获得数据类型为取哪一列的值,假如要获得数据
48、类型为int的学生的学号,可以用的学生的学号,可以用getInt(1)或或getInt(“学号学号”),“1”的意思是记录集的第一列,的意思是记录集的第一列,“学号学号”为列名。为列名。2、记录行、记录行使用使用next()可以向后移动可以向后移动游标,指向游标,指向下一条记下一条记录。如果当前游标指向的记录有效,录。如果当前游标指向的记录有效,next()方法将返回方法将返回true,否则返回否则返回false。注意:注意:一个一个ResultSet对象开始时,指针是指对象开始时,指针是指向第一条记录的前一个位置。向第一条记录的前一个位置。也就是说,如也就是说,如果要使用第一条记录就要先执行
49、果要使用第一条记录就要先执行next()方法方法让游标向让游标向后移动一条记录。后移动一条记录。ResultSetResultSet rsrs =stmt.executeQuery(selectstmt.executeQuery(select *from from TestStudentTestStudent););while(rs.nextwhile(rs.next()()System.out.printSystem.out.print(号码:号码:+rs.getInt(1);+rs.getInt(1);System.out.printSystem.out.print(姓名:姓名:+rs.g
50、etString(2);+rs.getString(2);System.out.printSystem.out.print(性别性别+rs.getString(3);+rs.getString(3);System.out.printSystem.out.print(年龄年龄+rs.getInt(4);+rs.getInt(4);System.out.printlnSystem.out.println();();上上面面举举例例使使用用的的是是顺顺序序查查询询,若若使使用用的的是是游游动查询,即按如下格式创建动查询,即按如下格式创建StatementStatement对象:对象:Statemen