Java实用教程(第3版)第14章JDBC编程14.1SQL语言14.2JDBC14.4访问数据库14.5JDBC编程14.6批处理14.7事务处理14.8综合实例14.3MySQL数据库Java实用教程(第3版)第14章JDBC编程JDBC是JavaDataBaseConnectivity的缩写,它是一种可用于执行SQL语句的JavaAPI,主要提供了跨平台的数据库访问方法,为数据库应用开发人员提供了一种标准的应用程序编程接口,类似于Microsoft的ODBC,但ODBC只针对Windows平台,而且ODBC要求在客户机上安装和注册,因而维护成本比较大。相对而言,JDBC的维护和部署要简单得多,因为它是真正的跨平台的API,屏蔽了具体数据库的差异性,如图14.1所示。当Java程序访问数据库时,由JDBCAPI接口调用相应数据库的JDBCAPI实现来访问数据库,从而使得无须改变Java程序就能访问不同的数据库。本书介绍最新的JDBC4.0。Java程序JDBCAPIAPIforOracleAPIforSQLServerAPIforMySQLAPIforDB2图14.1Java程序访问数据库Java实用教程(第3版)14.1SQL语言1.查询语句格式:selectcol1,col2,...,colnfromtable_name[wherecondition_expression]描述:其中参数col1、col2等均为列名,table_name为表名,condition_expression为条件表达式。select、from、where都是保留字。功能:从数据库表中检索满足条件的记录。例如下面的语句:select*fromstudent;表示将表student中的全部数据检索出来。这里“*”代表所有列。selectid,name,math,englishfromstudentwheremath+english80andmath+english100;表示将表student中的满足math与english之和在80~100之间的数据检索出来。其中and是保留字,表示逻辑操作“与”。类似的还有not、or。select*fromstudentwherenamelike‘王%’;表示将表student中的所有姓王的同学的数据检索出来。其中like是保留字,表示字符串比较,“%”代表任意的字符串。Java实用教程(第3版)14.1SQL语言2.插入语句格式:insertintotable_name[(col1,col2,...,coln)]values(v1,v2,...,vn)功能:在表table_name中插入一条记录,各列的值依次分别为v1、v2、…、vn等,若某列的列名未给,则值为NULL。其中insert、into、values都是保留字。注意:若所有的列名都未给,则在values中必须依次给出所有列的值;给出的值的类型必须与对应的列的类型相一致。例如下面的语句:insertintostudentvalues(‘001108’,’刘中华’,’男’,95,94)表示在表student中插入一条记录,各列的值依次为“001108”、“刘中华”、“男”、95、94。该表只有五列。insertintostudent(id,math,english)values(‘001109’,96,91)表示在表student中插入一条记录,其id列的值为‘001109’、math列的值为96、english列的值为91,其余列的值均为null。Java实用教程(第3版)14.1SQL语言3.更新语句格式:updatetable_namesetcol1=v1[,col2=v2,...,coln=vn][wherecondition_expression]功能:更新表table_name中满足条件的记录,使列col1的值为v1、列col2的值为v2、…、列coln的值为vn等。其中update、set、where都是保留字。注意:如不给出条件,则更新表中所有记录。例如下面的语句updatestudentsetmath=0,english=0表示将表student中的所有记录的math列、english列的值变为0。updatestudentsetmath=0wheresex=’男’表示将表student中的满足sex=’男’的记录的math值置为0。updatestudentsetenglish=0wherenamelike’刘%’表示将表student中的所有姓刘的记录的english值置为0。Java实用教程(第3版)14.1SQL语言4.删除语句格式:deletefromtable_name[wherecondition_expression]功能:删除表table_name中满足条件的记录。其中delete、from、where都是保留字。特别注意:如不给出条件,则删除表中所有记录。例如下面的语句:deletefromstudentwheremath+english30;表示删除表student中所有满足“math+english30”的记录。5.建表语句格式:createtabletable_name(col1type[not]null,…)功能:在当前数据库中创建一张名为的table_name的表格,其中create、table、not、null等都是保留字,例如下面的语句:createtablestuinfor(idchar(10)notnull,namechar(10)null,heightintegernull)表示在当前数据库中创建一个名为stuinfor的表,有三列:第一列列名是id,类型是char,宽度为10,非空;第二列列名是name,类型是char,宽度为19,可以为空;第三列列名是height,类型是integer,可以为空。Java实用教程(第3版)14.1SQL语言6.删除表格式:droptable_name功能:在当前数据库中删除名为table_name的表,其中drop是保留字。例如下面的语句:dropstuinfor;表示从当前数据库中删除表stuinfor。Java实用教程(第3版)14.2JDBCJDBCAPI为开发者使用数据库提供了统一的接口,使得Java程序无须关心具体数据库的差异性,这是通过JDBCAPI实现获得的。不同的数据库提供不同的JDBCAPI实现,如图14.2所示。Java程序JDBCAPIJDBC驱动管理器DriverManager类JDBC驱动器API:Driver接口Oracle的JDBC驱动器SQLServer的JDBC驱动器MySQL的JDBC驱动器DB2的JDBC驱动器Oracle数据库SQLServer数据库MySQL数据库DB2数据库JDBC实现图14.2JDBC实现Java实用教程(第3版)14.2JDBCJDBC的实现包括三部分:JDBC驱动管理器:java.sql.DriverManager类,负责注册特定JDBC驱动器,以及根据特定驱动器建立与数据库的连接。JDBC驱动器API:其中最主要的接口是java.sql.Driver接口。JDBC驱动器:由数据库供应商或其他第三方工具提供商创建,也称为JDBC驱动程序。JDBC驱动器实现了JDBC驱动器API,负责与特定的数据库连接。JDBC驱动器可以注册到JDBC驱动管理器中。不同的数据库提供不同的JDBC驱动器。Java实用教程(第3版)14.2JDBCJDBC驱动器有以下四种类型:(1)JDBC-ODBC驱动程序(称为:Type1型驱动程序)该驱动程序首先将对JDBC的调用转化为ODBC的调用,然后再利用ODBC与数据库进行连接,如图14.3所示。这要求本地必须安装ODBC驱动程序,然后注册一个ODBC数据源,显然性能不是很高,而且还限制了可移植性,但在Windows环境中比较常用,因为Windows本身自带ODBC,而且几乎所有的数据库都支持ODBC。SUN公司提供的JDBC-ODBC桥驱动程序就属于Type1型。数据库Java应用程序JDBCAPIJDBC-ODBC桥ODBCAPIODBC层图14.3通过JDBC-ODBC访问数据库Java实用教程(第3版)14.2JDBC(2)本地代码和Java驱动程序(称为:Type2型驱动程序)在程序中利用JDBCAPI访问数据库时,JDBC驱动程序将调用请求转换为厂商提供的本地API调用,如图14.4所示。这要求本地必须安装好特定的驱动程序,显然限制了应用程序对其它数据库的使用,这种方式很少使用。Java应用程序JDBCAPIJDBC 驱动程序厂商提供的本地API数据库纯Java驱动图14.4利用厂商提供的本地API访问数据库Java实用教程(第3版)14.2JDBC(3)JDBC网络纯Java驱动程序(称为:Type3型驱动程序)它是独立于数据库服务器的,它和一个中间件服务器通讯,由中间件负责与数据库通讯。在本地机不需要安装任何软件,但在服务器端必须安装中间件软件,如图14.5所示。中间件提供了灵活性,可以用相同的代码访问不同的数据库,比较适合异构数据库的应用,但也容易降低性能。Java应用程序通过JDBC驱动程序将调用发送给应用服务器,应用服务器使用本地驱动程序访问数据库,完成应用请求。JDBCAPIJDBC驱动程序Java应用程序应用服务器本地驱动程序数据库纯Java驱动采用独立于数据库的协议图14.5利用中间件的服务器访问数据库Java实用教程(第3版)14.2JDBC(4)本地协议的纯Java驱动程序(称为:Type4型驱动程序)使用该类型的应用程序无需安装附加的软件,所有对数据库的操作都直接由JDBC驱动程序完成,它将用户的请求直接转换为对数据库的协议请求,如图14.6所示。这种方式不会增加任何额外的负担,显然这种类型提供了最佳的性能。Java应用程序JDBCAPIJDBC驱动程序数据库纯Java驱动采用特定于某个数据库的网络协议,直接与数据库连接图14.6利用本地协议的纯Java驱动程序访问数据库Java实用教程(第3版)14.3MySQL数据库14.3.1MySQL服务器的安装MySQL的安装比较简单,其步骤是:(1)下载Windows版的MySQL5.0,解压后双击进入安装向导。选择Typical,单击“Next”按钮进入下一步。(2)进入如图14.7所示界面,在MySQL5.0中,默认目录为C:\ProgramFiles\MySQL\MySQLServer5.0。确认后单击“Install”按钮开始安装。安装完成后出现创建一个MySQL.com账号的画面。选择“SkipSign-Up”,单击“Next”按钮,跳过这一步,最后单击“Finish”按钮完成安装。图14.7MySQL安装Java实用教程(第3版)14.3.2MySQL服务器的配置MySQL安装完成后,要对MySQL服务器进行配置,其配置步骤如下:(1)安装完毕后就选择“ConfigtheMySQLservernow”复选框进入配置向导。选择“DetailedConfiguration”的配置类型。(2)单击“Next”按钮进行服务器类型选择,这里选择“DeveloperMachine”。(3)单击“Next”按钮进入数据库使用情况对话框,这里选择“MultifunctionalDatabase”。(4)进入InnoDB表空间对话框,这里可以修改InnoDB表空间文件的位置,如图14.8所示。默认位置是MySQL服务器数据目录,这里不做修改,直接下一步。图14.8表空间对话框Java实用教程(第3版)14.3.2MySQL服务器的配置(5)接下来进入并发连接选择对话框,这里选择“DecisionSupport(DSS)/OLAP”。(6)进入联网选项对话框,如图14.9所示。默认情况是启用TCP/IP网络,默认端口为3306,这