Java与数据库JDBC-课件_第1页
Java与数据库JDBC-课件_第2页
Java与数据库JDBC-课件_第3页
Java与数据库JDBC-课件_第4页
Java与数据库JDBC-课件_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

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

文档简介

第13章Java与数据库JDBC第13章Java与数据库JDBC1

姓名性别出生日期职务王红女75/03/05工程师张强男70/06/15讲师李刚男70/07/09工人王芳女65/10/09工程师字段(列)记录(行)表文件示例:表文件与二维表对应姓名性别出生日期1、创建新表student姓名性别年龄贾宝玉男21林黛玉女19猪八戒男22白骨精女201、创建新表student姓名性别年龄贾宝玉男21林黛玉女2、追加新记录

命令格式:

INSERTINTO表名[(字段名1[,字段名2…..])]

VALUES(表达式1[,表达式2……])功能:

在表尾追加一个新记录,并直接馈入数据。说明:1.表不必是打开的,字段与表达式的类型必须相同。

2.如果字段名全部缺省,就必须按字段顺序填写values子句的所有表达式。2、追加新记录

命令格式:

INSERTINTO表例:为刚建立学生信息表student(姓名,性别,年龄)填加数据

insertintostudentvalues(’白雪公主’,’女’,16)insertintostudent(年龄,姓名)values(23,’白马王子’)INSERTINTO表名[(字段名1[,字段名2…..])]

VALUES(表达式1[,表达式2……])例:为刚建立学生信息表student(姓名,性别,年龄)填加3、用Select-SQL命令直接查询

简化Select-SQL命令格式:

SELECT[*/<列名1>,<列名2>...]

FROM

表名

[WHERE<联接条件>[AND<联接条件>…]

3、用Select-SQL命令直接查询

简化Sele

例1:在学生表student中,查找所有学生的姓名

select姓名fromstudent

例:在学生表student(姓名,性别,年龄)中,查找所有学生的记录

select*fromstudent

SELECT[*/<列名1>,<列名2>...]FROM

表名

[WHERE<联接条件>[AND<联接条件>…]

例1:在学生表student中,查找所有学生的姓名

Where子句指定查询条件:列名、比较运算符、列名于常数

常用的比较运算符:

=、>、<、>=、<=、!=、<>

betweenand、and、or、not

例2:在学生表student中,查询所有年龄大于20的男同学的正确的SQL语句是

Select*fromstudentwhere年龄>20and性别=‘男’SELECT[*/<列名1>,<列名2>...]FROM

表名

[WHERE<联接条件>[AND<联接条件>…]Where子句指定查询条件:列名、比较运算符、列名于常数

例3:在学生表student中,查询年龄在20至23岁之间的学生姓名和年龄正确的SQL语句是

Select姓名,年龄fromstudentwhere年龄>=20and年龄<=23Select姓名,年龄fromstudentwhere年龄between20and23SELECT[*/<列名1>,<列名2>...]FROM

表名

[WHERE<联接条件>[AND<联接条件>…]例3:在学生表student中,查询年龄在20至23岁之间的4、更新记录

命令格式:

Update表名set字段名1=表达式1[,字段名2=表达式2…..])][where联结条件]例:

updatestudentset年龄=20where姓名=‘贾宝玉’4、更新记录

命令格式:

Update表名set字5、删除记录

命令格式:

delete*from表名[where联结条件]例:

deletefromstudentwhere姓名=‘贾宝玉’5、删除记录

命令格式:

delete*fromJDBC2019年夏,Sun公司推出了Java数据库连接(JavaDatabaseConnectivity,JDBC)工具包的第一个版本。该工具包使得程序员可以使用结构化查询语言(SQL)连接到一个数据库,对数据库进行查询,或者对数据库进行更新。JDBC使得Java不仅能够和远程数据通信,也能够在各种不同得数据源之间通信,从而扩大了Java这种跨平台编程语言的应用范围,提高了它的应用价值。JDBC是Java程序连接和存取数据库的应用程序接口(API),它是Java核心API的一部分。JDBC2019年夏,Sun公司推出了Java数据库连接(J13.1.1JDBC数据库应用模型JDBC由两层组成,上面一层是JDBCAPI,下面一层是JDBC驱动程序API。13.1.1JDBC数据库应用模型JDBC由两层组成,上面JDBC驱动程序JDBC驱动程序按照连接方式的不同可以分为四种类型:Type1:JDBC-ODBCBridgeType2:NativeAPIBridgeType3:JDBC-MiddlewareType4:PureJDBCDriverJDBC驱动程序JDBC驱动程序按照连接方式的不同可以分为JDBC

的用途是什么?

简单地说,JDBC

可做三件事:

与数据库建立连接;发送

SQL

语句,处理结果。JDBCAPI在java.sql包中定义,其中包括JDBCAPI用到的所有类、接口和方法JDBC

的用途是什么?简单地说,JDBC

可做三件事:

利用JDBC

开发数据库应用的一般步骤

(1)建立与数据库的连接(2)执行

SQL

语句(3)处理结果集(4)关闭数据库的连接利用JDBC

开发数据库应用的一般步骤(1)建立与数据库的使用JDBC连接到数据库步骤(1)建立与数据库的连接A、加载JDBC驱动程序在使用JDBC驱动程序之前,先加载并注册此驱动程序,若使用JDBC-ODBC桥,则为:Class.forName(“sun.jdbc.odbc.jdbcodbcDriver”);Class.forName(“oracle.jdbc.driver.OracleDriver”);使用JDBC连接到数据库步骤(1)建立与数据库的连接(1)建立与数据库的连接B、连接到数据库使用DriverManager的getConnection()来连接到指定的数据库,由于可能会同时使用不同的JDBC驱动程序,DriverManager会从已注册的JDBC驱动程序中搜索合适的驱动程序并连接到数据库,若是使用JDBC-ODBC桥,则为:Stringurl=“jdbc:oracle:student”Connectioncon=DriverManager.getConnection(url,“”,“”)使用JDBC连接到数据库步骤(1)建立与数据库的连接使用JDBC连接到数据库步骤数据库URL的格式为:jdbc:<子协议>:<子名称>子协议odbc表示对ODBC数据源的访问,其格式为:jdbc:odbc:<数据资源名>

例如:Stringurl="jdbc:odbc:people";使用JDBC连接到数据库步骤数据库URL的格式为:使用JDBC连接到数据库步骤DriverManager类的getConnection方法用于建立与某个数据源的连接。若与由URL指定的数据源建立连接成功,则返回一个Connection类的对象。以后对于这个数据源的操作都是基于这个对象。getConnection方法是DriverManager类中的静态方法。

其中,getConnection()的第1个参数是数据库URL,第2个为用户名字,第3个为密码。例如:Connectioncon=DriverManager.getConnection(url,“sa”,“”)使用JDBC连接到数据库步骤DriverManager类的getConnection方法(2)将SQL语句送至数据库,执行SQL语句A、创建

Statement

对象

建立了到特定数据库的连接之后,就可用该连接发送

SQL

语句。Statement

对象用

Connection

的方法

createStatement

创建,如下列代码段中所示:

Connection

con

=

DriverManager.getConnection(url,

"sunny",

"");

Statement

stmt

=

con.createStatement();

使用JDBC连接到数据库步骤(2)将SQL语句送至数据库,执行SQL语句使用JDBC连接(2)将SQL语句送至数据库,执行SQL语句B、发送

Statement

对象——SQL语句

为了执行

Statement

对象,被发送到数据库的

SQL

语句将被作为参数提供给Statement

的方法:

ResultSet

rs

=

stmt.executeQuery(“SELECT

姓名,性别,年龄

FROM

student");使用JDBC连接到数据库步骤(2)将SQL语句送至数据库,执行SQL语句使用JDBC连接(2)将SQL语句送至数据库,执行SQL语句C、使用

Statement

对象执行语句

Statement

接口提供了三种执行

SQL

语句的方法:executeQuery、executeUpdate

execute。使用哪一个方法由

SQL

语句所产生的内容决定。方法

executeQuery

用于产生单个结果集的语句,例如

SELECT

语句。

使用JDBC连接到数据库步骤(2)将SQL语句送至数据库,执行SQL语句使用JDBC连接(2)将SQL语句送至数据库,执行SQL语句C、使用

Statement

对象执行语句方法

executeUpdate

用于执行

INSERT、UPDATE

DELETE

语句以及

SQL

DDL(数据定义语言)语句方法

execute

用于执行返回多个结果集、多个更新计数或二者组合的语句。

JDBC应用(2)将SQL语句送至数据库,执行SQL语句JDBC应用(2)将SQL语句送至数据库,执行SQL语句C、使用

Statement

对象执行语句执行语句的所有方法都将关闭所调用的

Statement

对象的当前打开结果集(如果存在)。这意味着在重新执行

Statement

对象之前,需要完成对当前ResultSet

对象的处理。使用JDBC连接到数据库步骤(2)将SQL语句送至数据库,执行SQL语句使用JDBC连接

(2)将SQL语句送至数据库,执行SQL语句D、使用

Statement

对象执行语句——语句完成对于返回一个结果集的executeQuery

方法,在检索完

ResultSet

对象的所有行时该语句完成。对于方法executeUpdate,当它执行时语句即完成。但在少数调用方法

execute

的情况中,在检索所有结果集或它生成的更新计数之后语句才完成。使用JDBC连接到数据库步骤

(2)将SQL语句送至数据库,执行SQL语句使用JDBC连(3)处理结果集——读入数据库返回的结果结果集一般是一个表,其中有查询所返回的列标题及相应的值。例如,如果查询为

SELECT姓名,性别,年龄

FROM

student,则结果集将具有如下形式:

使用JDBC连接到数据库步骤姓名性别年龄贾宝玉男21林黛玉女19猪八戒男22白骨精女20(3)处理结果集——读入数据库返回的结果使用JDBC连接到数(3)处理结果集——读入数据库返回的结果ResultSet:ResultSet

包含符合

SQL

语句中条件的所有行,并且它通过一套

get

方法(这些

get

方法可以访问当前行中的不同列)提供了对这些行中数据的访问。ResultSet.next

方法用于移动到

ResultSet

中的下一行,使下一行成为当前行。使用JDBC连接到数据库步骤(3)处理结果集——读入数据库返回的结果使用JDBC连接到数(3)处理结果集——行和光标ResultSet

维护指向其当前数据行的光标。每调用一次

next

方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用

next

将把光标置于第一行上,使它成为当前行。随着每次调用

next

导致光标向下移动一行,按照从上至下的次序获取ResultSet

行。在

ResultSet

对象或其父辈

Statement

对象关闭之前,光标一直保持有效使用JDBC连接到数据库步骤(3)处理结果集——行和光标使用JDBC连接到数据库步骤(3)处理结果集——列

方法

getXXX

提供了获取当前行中某列值的途径。在每一行内,可按任何次序获取列值。但为了保证可移植性,应该从左至右获取列值,并且一次性地读取列值。列名或列号可用于标识要从中获取数据的列。例如,如果

ResultSet

对象

rs

的第二列名为“性别”,并将值存储为字符串,则下列任一代码将获取存储在该列中的值:

String

s

=

rs.getString(“性别");

String

s

=

rs.getString(2);使用JDBC连接到数据库步骤(3)处理结果集——列使用JDBC连接到数据库步骤(3)处理结果集——列注意列是从左至右编号的,并且从列

1

开始。同时,用作

getXXX

方法的输入的列名不区分大小写。

提供使用列名这个选项的目的是为了让在查询中指定列名的用户可使用相同的名字作为

getXXX

方法的参数。使用JDBC连接到数据库步骤(3)处理结果集——列使用JDBC连接到数据库步骤(3)处理结果集——读入数据库返回的结果

由于是进行查询的工作,因此会返回一个ResultSet对象,可使用while来读出所返回的数据.例如:ResultSet

rs

=

stmt.executeQuery(“SELECT

姓名,性别,年龄

FROM

xs");While(rs.next()){}使用JDBC连接到数据库步骤(3)处理结果集——读入数据库返回的结果使用JDBC连接到数(4)关闭数据库的连接——关闭

Statement

对象:Statement

对象将由

Java

垃圾收集程序自动关闭。而作为一种好的编程风格,应在不需要

Statement

对象时显式地关闭它们。这将立即释放

DBMS

资源,有助于避免潜在的内存问题

使用JDBC连接到数据库步骤(4)关闭数据库的连接——关闭

Statement

对象:使(4)关闭数据库的连接关闭结果集;关闭Statement

对象;关闭连接;使用JDBC连接到数据库步骤(4)关闭数据库的连接使用JDBC连接到数据库步骤下面的代码段是执行

SQL

语句的示例。

java.sql.Statement

stmt

=

conn.createStatement();

ResultSet

r

=

stmt.executeQuery(“SELECT

姓名,性别,年龄

FROM

student

”);

inti=0;while

(r.next())

{i=i+1;//

打印当前行的值。

String

name

=

r.getString("姓名");

String

sex

=

r.getString("性别");

float

age

=

r.getInt("年龄");

System.out.println("ROW

=

"

+

i

+

"name

"

+

"

sex

"

+

age);

}使用JDBC连接到数据库步骤下面的代码段是执行

SQL

语句的示例。使用JDBC连接到实例:JDBCTest.javaimportjava.sql.*;publicclassJDBCTest{ publicstaticvoidmain(String[]args){ Stringurl="jdbc:odbc:mydatabase";

Stringquery="SELECT*FROMstudent";

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundExceptione){ System.err.print("ClassNotFoundException:"); System.err.println(e.getMessage()); }加载JDBC-ODBCbridge驱动程序;使用Class.forName方法显式加载驱动程序完成:建立操作数据库的SQL语句;实例:JDBCTest.javaimportjava.sqtry{ Connectioncon=DriverManager.getConnection(url); Statementstmt=con.createStatement(); ResultSetr=stmt.executeQuery(query); while(r.next()) {Stringr1=r.getString("姓名");Stringr3=r.getString("性别");intr2=r.getInt("年龄");System.out.println(r1+""+r2+""+r3); } r.close();stmt.close();con.close();}catch(SQLExceptionex){ System.out.println("\n***SQLExceptioncaught***\n"); }}}实例:JDBCTest.javaStringurl="jdbc:odbc:mydatabase";创建statement对象发送SQL语句关闭try{实例:JDBCTest.javaStringurl通过JDBC访问数据库的基本流程基本流程1.建立ODBC数据源(可选)2.装入JDBC驱动程序3.建立连接4.执行SQL语句5.检索结果6.关闭连接通过JDBC访问数据库的基本流程基本流程建立ODBC数据源(可选)当使用JDBC-ODBCBridge来建立连接时,必须先建立ODBC数据源。ODBC数据源的配置步骤:打开Windows的“控制面板”,在“管理工具”中找到“数据源(ODBC)”建立ODBC数据源(可选)当使用JDBC-ODBCBri建立ODBC数据源(可选)在“用户DNS”选项卡的“用户数据源”列表中,单击“添加”按钮,弹出“创建新数据源”对话框建立ODBC数据源(可选)在“用户DNS”选项卡的“用户数据建立ODBC数据源(可选)选择创建“MicrosoftAccessDriver”类型的数据源,然后单击“完成”按钮,弹出“ODBCMicrosoftAccess安装”对话框建立ODBC数据源(可选)选择创建“MicrosoftAc建立ODBC数据源(可选)在此对话框中,输入数据源名称,并单击“创建”按钮,弹出“新数据库”对话框。如果事先已经建立了数据库,可以单击“选择”按钮,并指明数据库的存放路径。建立ODBC数据源(可选)在此对话框中,输入数据源名称,并单建立ODBC数据源(可选)在“新建数据库”对话框中,输入需要新建的数据库名称,选择数据库的保存路径,然后单击“确定”按钮,返回“ODBCMicrosoftAccess安装”对话框。在“ODBCMicrosoftAccess安装”对话框中单击“确定”按钮,返回“ODBC数据源管理器”对话框,新添加的用户数据源将出现

在此对话框中。此时,

单击“确定”按钮,新

用户数据源创建完成。

数据源创建完成之后,

便可以对这个数据源

进行数据表的创建和

修改,记录的添加、

修改和删除等数据库

操作。建立ODBC数据源(可选)在“新建数据库”对话框中,输入需要

添加ODBC数据源 添加ODBC数据源importjava.sql.*;publicclassJDBCInsert{ publicstaticvoidmain(String[]args){ Stringurl="jdbc:odbc:mydatabase"; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(java.lang.ClassNotFoundExceptione){ System.err.print("ClassNotFoundException:"); System.err.println(e.getMessage());}try{

stmt.executeQuery("insertintostudentvalues('美眉','女',18)"); stmt.close();con.close(); }catch(SQLExceptionex){

System.out.println("\n***SQLExceptioncaught***\n"); }}}实例:JDBCInsert.java插入记录,无返回结果并注意单引号和双引号思考此程序哪里有问题!importjava.sql.*;实例:JDBCInser更新数据importjava.sql.*;publicclassJDBCUpdate{ publicstaticvoidmain(String[]args){ Stringurl="jdbc:odbc:student"; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connectioncon=DriverManager.getConnection(url); Statementstmt=con.createStatement();

stmt.executeUpdate("updatestudentset年龄=80where姓名='美眉'"); stmt.close(); con.close(); }catch(Exceptione){ e.printStackTrace(); } }}更新数据importjava.sql.*;删除数据importjava.sql.*;publicclassJDBCDelete{publicstaticvoidmain(Stringargs[]){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connectioncon=DriverManager.getConnection("jdbc:odbc:mydatabase");Statementstmt=con.createStatement();

stmt.executeUpdate("delete*fromstudentwherename='美眉'");con.close();}catch(Exceptione){e.printStackTrace();}}}这个程序的问题又出现在哪里?!删除数据importjava.sql.*;这个程序的问题又JDBCAPI用到的类、接口和方法(1)驱动程序管理java.sql.Driver

驱动程序接口,是每个数据库驱动器都要实现的接口。负责确认URL与驱动程序的匹配、建立到数据库的连接等,其中的方法需要有相应的驱动程序实现。java.sql.DriverManager

提供管理一组JDBC驱动程序所需的基本服务,包括加载所有数据库驱动器,以及根据用户的连接请求驱动相应的数据库驱动器建立连接。JDBCAPI用到的类、接口和方法(1)驱动程序管理(2)数据库连接java.sql.Connection

表示到特定数据库的连接,通过连接执行SQL语句并获取SQL语句执行结果,其中的方法需要有相应的驱动程序实现。(2)数据库连接(3)SQL语句java.sql.Statement

为SQL语句提供一个容器,包括执行SQL语句、取得查询结果等方法。(3)SQL语句java.sql.Statement为(4)数据java.sql.ResultSet

表示数据集的一个数据表,一般是在执行SQL查询语句时产生的,提供对结果集进行处理的手段。(4)数据java.sql.ResultSet表示数据13.2.2常用的JDBCAPIJDBCAPI提供的类和接口在java.sql包中定义。类或接口名称说明java.sql.CallableStatement用于执行SQL存储过程java.sql.Connection表示与一个特定数据库的会话。在一个Connection的上下文中,执行SQL语句并返回结果。java.sql.DataTruncation截断一个数据的值产生的异常java.sql.Date对日期的处理类java.sql.Driver数据库驱动程序类。java.sql.DriverManager提供管理JDBC驱动器设置的基本服务。java.sql.DriverPropertyInfo程序员与驱动器交互的类,以发现和提供连接特性java.sql.PreparedStatement可用于有效地多次执行预编译的SQL语句java.sql.ResultSet提供了通过执行一条语句访问所生成的数据表的功能java.sql.SQLException提供了关于数据库访问错误的信息。java.sql.SQLWarning提供了关于数据库访问的警告信息java.sql.Statement用于执行一条静态的SQL语句并获取它产生的结果java.sql.Time处理时间java.sql.Types此类定义用于标识SQL类型的常量java.sql.Timestamp处理具有毫秒级的时间java.sql.DatabaseMetaData该类提供了关于数据库的整体信息13.2.2常用的JDBCAPIJDBCAPI提供的13.2.2常用的JDBCAPI下图是JDBC接口之间的详细关系,是我们调用JDBC数据库进行连接、执行和获取数据的更详细的过程。13.2.2常用的JDBCAPI下图是JDBC接口之间的连接sqlserverClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");Connectioncon=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=person","sa","sa");加载JDBC连sqlserver2019需要的jar包——sqljdbc.jar连接sqlserverClass.forName("com.第13章Java与数据库JDBC第13章Java与数据库JDBC55

姓名性别出生日期职务王红女75/03/05工程师张强男70/06/15讲师李刚男70/07/09工人王芳女65/10/09工程师字段(列)记录(行)表文件示例:表文件与二维表对应姓名性别出生日期1、创建新表student姓名性别年龄贾宝玉男21林黛玉女19猪八戒男22白骨精女201、创建新表student姓名性别年龄贾宝玉男21林黛玉女2、追加新记录

命令格式:

INSERTINTO表名[(字段名1[,字段名2…..])]

VALUES(表达式1[,表达式2……])功能:

在表尾追加一个新记录,并直接馈入数据。说明:1.表不必是打开的,字段与表达式的类型必须相同。

2.如果字段名全部缺省,就必须按字段顺序填写values子句的所有表达式。2、追加新记录

命令格式:

INSERTINTO表例:为刚建立学生信息表student(姓名,性别,年龄)填加数据

insertintostudentvalues(’白雪公主’,’女’,16)insertintostudent(年龄,姓名)values(23,’白马王子’)INSERTINTO表名[(字段名1[,字段名2…..])]

VALUES(表达式1[,表达式2……])例:为刚建立学生信息表student(姓名,性别,年龄)填加3、用Select-SQL命令直接查询

简化Select-SQL命令格式:

SELECT[*/<列名1>,<列名2>...]

FROM

表名

[WHERE<联接条件>[AND<联接条件>…]

3、用Select-SQL命令直接查询

简化Sele

例1:在学生表student中,查找所有学生的姓名

select姓名fromstudent

例:在学生表student(姓名,性别,年龄)中,查找所有学生的记录

select*fromstudent

SELECT[*/<列名1>,<列名2>...]FROM

表名

[WHERE<联接条件>[AND<联接条件>…]

例1:在学生表student中,查找所有学生的姓名

Where子句指定查询条件:列名、比较运算符、列名于常数

常用的比较运算符:

=、>、<、>=、<=、!=、<>

betweenand、and、or、not

例2:在学生表student中,查询所有年龄大于20的男同学的正确的SQL语句是

Select*fromstudentwhere年龄>20and性别=‘男’SELECT[*/<列名1>,<列名2>...]FROM

表名

[WHERE<联接条件>[AND<联接条件>…]Where子句指定查询条件:列名、比较运算符、列名于常数

例3:在学生表student中,查询年龄在20至23岁之间的学生姓名和年龄正确的SQL语句是

Select姓名,年龄fromstudentwhere年龄>=20and年龄<=23Select姓名,年龄fromstudentwhere年龄between20and23SELECT[*/<列名1>,<列名2>...]FROM

表名

[WHERE<联接条件>[AND<联接条件>…]例3:在学生表student中,查询年龄在20至23岁之间的4、更新记录

命令格式:

Update表名set字段名1=表达式1[,字段名2=表达式2…..])][where联结条件]例:

updatestudentset年龄=20where姓名=‘贾宝玉’4、更新记录

命令格式:

Update表名set字5、删除记录

命令格式:

delete*from表名[where联结条件]例:

deletefromstudentwhere姓名=‘贾宝玉’5、删除记录

命令格式:

delete*fromJDBC2019年夏,Sun公司推出了Java数据库连接(JavaDatabaseConnectivity,JDBC)工具包的第一个版本。该工具包使得程序员可以使用结构化查询语言(SQL)连接到一个数据库,对数据库进行查询,或者对数据库进行更新。JDBC使得Java不仅能够和远程数据通信,也能够在各种不同得数据源之间通信,从而扩大了Java这种跨平台编程语言的应用范围,提高了它的应用价值。JDBC是Java程序连接和存取数据库的应用程序接口(API),它是Java核心API的一部分。JDBC2019年夏,Sun公司推出了Java数据库连接(J13.1.1JDBC数据库应用模型JDBC由两层组成,上面一层是JDBCAPI,下面一层是JDBC驱动程序API。13.1.1JDBC数据库应用模型JDBC由两层组成,上面JDBC驱动程序JDBC驱动程序按照连接方式的不同可以分为四种类型:Type1:JDBC-ODBCBridgeType2:NativeAPIBridgeType3:JDBC-MiddlewareType4:PureJDBCDriverJDBC驱动程序JDBC驱动程序按照连接方式的不同可以分为JDBC

的用途是什么?

简单地说,JDBC

可做三件事:

与数据库建立连接;发送

SQL

语句,处理结果。JDBCAPI在java.sql包中定义,其中包括JDBCAPI用到的所有类、接口和方法JDBC

的用途是什么?简单地说,JDBC

可做三件事:

利用JDBC

开发数据库应用的一般步骤

(1)建立与数据库的连接(2)执行

SQL

语句(3)处理结果集(4)关闭数据库的连接利用JDBC

开发数据库应用的一般步骤(1)建立与数据库的使用JDBC连接到数据库步骤(1)建立与数据库的连接A、加载JDBC驱动程序在使用JDBC驱动程序之前,先加载并注册此驱动程序,若使用JDBC-ODBC桥,则为:Class.forName(“sun.jdbc.odbc.jdbcodbcDriver”);Class.forName(“oracle.jdbc.driver.OracleDriver”);使用JDBC连接到数据库步骤(1)建立与数据库的连接(1)建立与数据库的连接B、连接到数据库使用DriverManager的getConnection()来连接到指定的数据库,由于可能会同时使用不同的JDBC驱动程序,DriverManager会从已注册的JDBC驱动程序中搜索合适的驱动程序并连接到数据库,若是使用JDBC-ODBC桥,则为:Stringurl=“jdbc:oracle:student”Connectioncon=DriverManager.getConnection(url,“”,“”)使用JDBC连接到数据库步骤(1)建立与数据库的连接使用JDBC连接到数据库步骤数据库URL的格式为:jdbc:<子协议>:<子名称>子协议odbc表示对ODBC数据源的访问,其格式为:jdbc:odbc:<数据资源名>

例如:Stringurl="jdbc:odbc:people";使用JDBC连接到数据库步骤数据库URL的格式为:使用JDBC连接到数据库步骤DriverManager类的getConnection方法用于建立与某个数据源的连接。若与由URL指定的数据源建立连接成功,则返回一个Connection类的对象。以后对于这个数据源的操作都是基于这个对象。getConnection方法是DriverManager类中的静态方法。

其中,getConnection()的第1个参数是数据库URL,第2个为用户名字,第3个为密码。例如:Connectioncon=DriverManager.getConnection(url,“sa”,“”)使用JDBC连接到数据库步骤DriverManager类的getConnection方法(2)将SQL语句送至数据库,执行SQL语句A、创建

Statement

对象

建立了到特定数据库的连接之后,就可用该连接发送

SQL

语句。Statement

对象用

Connection

的方法

createStatement

创建,如下列代码段中所示:

Connection

con

=

DriverManager.getConnection(url,

"sunny",

"");

Statement

stmt

=

con.createStatement();

使用JDBC连接到数据库步骤(2)将SQL语句送至数据库,执行SQL语句使用JDBC连接(2)将SQL语句送至数据库,执行SQL语句B、发送

Statement

对象——SQL语句

为了执行

Statement

对象,被发送到数据库的

SQL

语句将被作为参数提供给Statement

的方法:

ResultSet

rs

=

stmt.executeQuery(“SELECT

姓名,性别,年龄

FROM

student");使用JDBC连接到数据库步骤(2)将SQL语句送至数据库,执行SQL语句使用JDBC连接(2)将SQL语句送至数据库,执行SQL语句C、使用

Statement

对象执行语句

Statement

接口提供了三种执行

SQL

语句的方法:executeQuery、executeUpdate

execute。使用哪一个方法由

SQL

语句所产生的内容决定。方法

executeQuery

用于产生单个结果集的语句,例如

SELECT

语句。

使用JDBC连接到数据库步骤(2)将SQL语句送至数据库,执行SQL语句使用JDBC连接(2)将SQL语句送至数据库,执行SQL语句C、使用

Statement

对象执行语句方法

executeUpdate

用于执行

INSERT、UPDATE

DELETE

语句以及

SQL

DDL(数据定义语言)语句方法

execute

用于执行返回多个结果集、多个更新计数或二者组合的语句。

JDBC应用(2)将SQL语句送至数据库,执行SQL语句JDBC应用(2)将SQL语句送至数据库,执行SQL语句C、使用

Statement

对象执行语句执行语句的所有方法都将关闭所调用的

Statement

对象的当前打开结果集(如果存在)。这意味着在重新执行

Statement

对象之前,需要完成对当前ResultSet

对象的处理。使用JDBC连接到数据库步骤(2)将SQL语句送至数据库,执行SQL语句使用JDBC连接

(2)将SQL语句送至数据库,执行SQL语句D、使用

Statement

对象执行语句——语句完成对于返回一个结果集的executeQuery

方法,在检索完

ResultSet

对象的所有行时该语句完成。对于方法executeUpdate,当它执行时语句即完成。但在少数调用方法

execute

的情况中,在检索所有结果集或它生成的更新计数之后语句才完成。使用JDBC连接到数据库步骤

(2)将SQL语句送至数据库,执行SQL语句使用JDBC连(3)处理结果集——读入数据库返回的结果结果集一般是一个表,其中有查询所返回的列标题及相应的值。例如,如果查询为

SELECT姓名,性别,年龄

FROM

student,则结果集将具有如下形式:

使用JDBC连接到数据库步骤姓名性别年龄贾宝玉男21林黛玉女19猪八戒男22白骨精女20(3)处理结果集——读入数据库返回的结果使用JDBC连接到数(3)处理结果集——读入数据库返回的结果ResultSet:ResultSet

包含符合

SQL

语句中条件的所有行,并且它通过一套

get

方法(这些

get

方法可以访问当前行中的不同列)提供了对这些行中数据的访问。ResultSet.next

方法用于移动到

ResultSet

中的下一行,使下一行成为当前行。使用JDBC连接到数据库步骤(3)处理结果集——读入数据库返回的结果使用JDBC连接到数(3)处理结果集——行和光标ResultSet

维护指向其当前数据行的光标。每调用一次

next

方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用

next

将把光标置于第一行上,使它成为当前行。随着每次调用

next

导致光标向下移动一行,按照从上至下的次序获取ResultSet

行。在

ResultSet

对象或其父辈

Statement

对象关闭之前,光标一直保持有效使用JDBC连接到数据库步骤(3)处理结果集——行和光标使用JDBC连接到数据库步骤(3)处理结果集——列

方法

getXXX

提供了获取当前行中某列值的途径。在每一行内,可按任何次序获取列值。但为了保证可移植性,应该从左至右获取列值,并且一次性地读取列值。列名或列号可用于标识要从中获取数据的列。例如,如果

ResultSet

对象

rs

的第二列名为“性别”,并将值存储为字符串,则下列任一代码将获取存储在该列中的值:

String

s

=

rs.getString(“性别");

String

s

=

rs.getString(2);使用JDBC连接到数据库步骤(3)处理结果集——列使用JDBC连接到数据库步骤(3)处理结果集——列注意列是从左至右编号的,并且从列

1

开始。同时,用作

getXXX

方法的输入的列名不区分大小写。

提供使用列名这个选项的目的是为了让在查询中指定列名的用户可使用相同的名字作为

getXXX

方法的参数。使用JDBC连接到数据库步骤(3)处理结果集——列使用JDBC连接到数据库步骤(3)处理结果集——读入数据库返回的结果

由于是进行查询的工作,因此会返回一个ResultSet对象,可使用while来读出所返回的数据.例如:ResultSet

rs

=

stmt.executeQuery(“SELECT

姓名,性别,年龄

FROM

xs");While(rs.next()){}使用JDBC连接到数据库步骤(3)处理结果集——读入数据库返回的结果使用JDBC连接到数(4)关闭数据库的连接——关闭

Statement

对象:Statement

对象将由

Java

垃圾收集程序自动关闭。而作为一种好的编程风格,应在不需要

Statement

对象时显式地关闭它们。这将立即释放

DBMS

资源,有助于避免潜在的内存问题

使用JDBC连接到数据库步骤(4)关闭数据库的连接——关闭

Statement

对象:使(4)关闭数据库的连接关闭结果集;关闭Statement

对象;关闭连接;使用JDBC连接到数据库步骤(4)关闭数据库的连接使用JDBC连接到数据库步骤下面的代码段是执行

SQL

语句的示例。

java.sql.Statement

stmt

=

conn.createStatement();

ResultSet

r

=

stmt.executeQuery(“SELECT

姓名,性别,年龄

FROM

student

”);

inti=0;while

(r.next())

{i=i+1;//

打印当前行的值。

String

name

=

r.getString("姓名");

String

sex

=

r.getString("性别");

float

age

=

r.getInt("年龄");

System.out.println("ROW

=

"

+

i

+

"name

"

+

"

sex

"

+

age);

}使用JDBC连接到数据库步骤下面的代码段是执行

SQL

语句的示例。使用JDBC连接到实例:JDBCTest.javaimportjava.sql.*;publicclassJDBCTest{ publicstaticvoidmain(String[]args){ Stringurl="jdbc:odbc:mydatabase";

Stringquery="SELECT*FROMstudent";

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundExceptione){ System.err.print("ClassNotFoundException:"); System.err.println(e.getMessage()); }加载JDBC-ODBCbridge驱动程序;使用Class.forName方法显式加载驱动程序完成:建立操作数据库的SQL语句;实例:JDBCTest.javaimportjava.sqtry{ Connectioncon=DriverManager.getConnection(url); Statementstmt=con.createStatement(); ResultSetr=stmt.executeQuery(query); while(r.next()) {Stringr1=r.getString("姓名");Stringr3=r.getString("性别");intr2=r.getInt("年龄");System.out.println(r1+""+r2+""+r3); } r.close();stmt.close();con.close();}catch(SQLExceptionex){ System.out.println("\n***SQLExceptioncaught***\n"); }}}实例:JDBCTest.javaStringurl="jdbc:odbc:mydatabase";创建statement对象发送SQL语句关闭try{实例:JDBCTest.javaStringurl通过JDBC访问数据库的基本流程基本流程1.建立ODBC数据源(可选)2.装入JDBC驱动程序3.建立连接4.执行SQL语句5.检索结果6.关闭连接通过JDBC访问数据库的基本流程基本流程建立ODBC数据源(可选)当使用JDBC-ODBCBridge来建立连接时,必须先建立ODBC数据源。ODBC数据源的配置步骤:打开Windows的“控制面板”,在“管理工具”中找到“数据源(ODBC)”建立ODBC数据源(可选)当使用JDBC-ODBCBri建立ODBC数据源(可选)在“用户DNS”选项卡的“用户数据源”列表中,单击“添加”按钮,弹出“创建新数据源”对话框建立ODBC数据源(可选)在“用户DNS”选项卡的“用户数据建立ODBC数据源(可选)选择创建“MicrosoftAccessDriver”类型的数据源,然后单击“完成”按钮,弹出“ODBCMicrosoftAccess安装”对话框建立ODBC数据源(可选)选择创建“MicrosoftAc建立ODBC数据源(可选)在此对话框中,输入数据源名称,并单击“创建”按钮,弹出“新数据库”对话框。如果事先已经建立了数据库,可以单击“选择”按钮,并指明数据库的存放路径。建立ODBC数据源(可选)在此对话框中,输入数据源名称,并单建立ODBC数据源(可选)在“新建数据库”对话框中,输入需要新建的数据库名称,选择数据库的保存路径,然后单击“确定”按钮,返回“ODBCMicrosoftAccess安装”对话框。在“ODBCMicrosoftAccess安装”对话框中单击“确定”按钮,返回“ODBC数据源管理器”对话框,新添加的用户数据源将出现

在此对话框中。此时,

单击“确定”按钮,新

用户数据源创建完成。

数据源创建完成之后,

便可以对这个数据源

进行数据表的创建和

修改,记录的添加、

修改和删除等数据库

操作。建立ODBC数据源(可选)在“新建数据库”对话框中,输入需要

添加ODBC数据源 添加ODBC数据源importjava.sql.*;publicclassJDBCInsert{ publicstaticvoidmain(String[]args){ Stringurl="jdbc:odbc:mydatabase"; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(java.lang.ClassNotFoundExceptione){ System.err.print("ClassNotFoundException:"); System.err.println(e.getMessage());}try{

stmt.executeQuery("insertintostudentvalues('美眉','女',18)"); stmt.close();con.close(); }catch(SQLExceptionex){

System.out.println("\n***SQLExceptioncaught***\n"); }}}实例:JDBCInsert.java插入记录,无返回结果并注意单引号和双引号

温馨提示

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

评论

0/150

提交评论