JAVA连接JDBC指导说明.docx
- 文档编号:27768143
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:21
- 大小:35.58KB
JAVA连接JDBC指导说明.docx
《JAVA连接JDBC指导说明.docx》由会员分享,可在线阅读,更多相关《JAVA连接JDBC指导说明.docx(21页珍藏版)》请在冰豆网上搜索。
JAVA连接JDBC指导说明
JAVA开发使用JDBC
JDBCAPI是一个JavaAPI,可以访问任何类型的表格数据,特别是存储在关系数据库
JDBChelpsyoutowriteJavaapplicationsthatmanagethesethreeprogrammingactivities:
1.连接到数据源,如数据库
2.向数据库发送查询和更新语句
3.检索并处理从数据库收到的结果,以响应您的查询。
下面的简单代码片段给出了这三个步骤的简单示例:
publicvoidconnectToAndQueryDatabase(Stringusername,Stringpassword){
Connectioncon=DriverManager.getConnection(
"jdbc:
myDriver:
myDatabase",
username,
password);
Statementstmt=con.createStatement();
ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable1");
while(rs.next()){
intx=rs.getInt("a");
Strings=rs.getString("b");
floatf=rs.getFloat("c");
}
}
这个简短的代码片段实例化了DriverManager对象连接到数据库驱动程序并登录到数据库,则实例化Statement对象,该对象将SQL语言查询传送到数据库;实例化ResultSet对象,该对象检索查询的结果,并执行一个简单的while循环,它检索并显示这些结果。
就这么简单。
JDBC产品组件
JDBC包括四个组件:
1.
JDBCAPI-JDBCAPI提供了对来自™编程语言的关系数据的编程访问。
使用JDBCAPI,应用程序可以执行SQL语句、检索结果并将更改传播回基础数据源。
JDBCAPI还可以在分布式异构环境中与多个数据源交互。
2.
JDBCAPI是Java平台的一部分,其中包括JAVA™标准版(JAVA™SE)和JAVA™企业版(JAVA™EE)JDBC4.0API分为两个包:
java.sql和javax.sql.这两个包都包含在JavaSE和JavaEE平台中。
3.
4.
JDBCDriverManager-JDBCDriverManager类定义可以将Java应用程序连接到JDBC驱动程序的对象。
DriverManager传统上一直是JDBC体系结构的骨干。
它很小很简单。
5.
标准扩展包javax.naming和javax.sql让您使用DataSource对象注册为Java命名与目录接口™(JNDI)命名服务以建立与数据源的连接。
您可以使用任何一种连接机制,但可以使用DataSource对象,只要有可能,都建议使用。
6.
7.
JDBC测试套件-JDBC驱动程序测试套件帮助您确定JDBC驱动程序将运行您的程序。
这些测试并不全面或详尽,但它们确实使用了JDBCAPI中的许多重要特性。
8.
9.
JDBC-ODBC桥-Java软件桥通过ODBC驱动程序提供JDBC访问。
请注意,您需要将ODBC二进制代码加载到使用此驱动程序的每台客户端计算机上。
因此,ODBC驱动程序最适合在客户端安装不是主要问题的公司网络上使用,或者适用于在三层体系结构中用Java编写的应用程序服务器代码。
10.
这个Trail使用这四个JDBC组件中的前两个连接到数据库,然后构建一个使用SQL命令与测试关系数据库通信的Java程序。
最后两个组件在专门的环境中用于测试Web应用程序或与ODBC感知的DBMS通信。
JDBC体系结构
两层和三层处理模型
JDBCAPI支持数据库访问的两层和三层处理模型.
Figure1:
Two-tierArchitectureforDataAccess.
在两层模型中,Javaapplet或应用程序直接与数据源对话.这需要一个能够与被访问的特定数据源通信的JDBC驱动程序。
用户的命令被传递到数据库或其他数据源,这些语句的结果被发送回用户。
数据源可以位于用户通过网络连接到的另一台计算机上。
这被称为客户机/服务器配置,用户的机器作为客户端,而包含数据源的机器作为服务器。
网络可以是内部网,例如,它可以连接公司内的员工,也可以是Internet。
在三层模型中,命令被发送到服务的“中间层”,后者将命令发送到数据源。
数据源处理这些命令并将结果发送回中间层,然后由中间层发送给用户。
管理信息系统的董事们认为这种三层模式非常有吸引力,因为中间层使得能够保持对访问的控制和对公司数据的更新进行控制成为可能。
另一个优点是它简化了应用程序的部署。
最后,在许多情况下,三层体系结构可以提供性能优势。
图2:
用于数据访问的三层体系结构。
直到最近,中间层一直是用C或C+等语言编写的,它们提供了快速的性能。
然而,随着优化编译器的引入,将Java字节码转换成高效的机器专用代码和技术,如EnterpriseJavaBeans™,Java平台正迅速成为中间层开发的标准平台。
这是一个很大的好处,可以利用Java的健壮性、多线程和安全特性。
随着企业越来越多地使用Java编程语言编写服务器代码,JDBCAPI越来越多地应用于三层体系结构的中间层。
使JDBC成为服务器技术的一些特性是它对连接池、分布式事务和断开连接的行集的支持。
JDBCAPI还允许从Java中间层访问数据源。
关系数据库概述
数据库是一种存储信息的方式,可以从数据库中检索信息。
最简单地说,关系数据库是在有行和列的表中显示信息的数据库。
表被称为关系,因为它是同一类型(行)对象的集合。
表中的数据可以根据公共键或概念进行关联,从表中检索相关数据的能力是关系数据库术语的基础。
数据库管理系统(DBMS)处理存储、维护和检索数据的方式。
对于关系数据库,关系数据库管理系统(RDBMS)执行这些任务。
在本书中使用的DBMS是一个包含RDBMS的通用术语。
完整性规则
关系表遵循某些完整性规则,以确保它们包含的数据保持准确并始终可访问。
首先,关系表中的行都应该是不同的。
如果存在重复行,则可能会出现问题,无法解决两个可能的选择中哪一个是正确的。
对于大多数DBMS,用户可以指定不允许重复行,如果这样做,DBMS将防止添加复制现有行的任何行。
传统关系模型的第二个完整性规则是,列值不能重复组或数组。
数据完整性的第三个方面涉及空值的概念。
数据库通过使用NULL值来指示缺少值来处理数据不可用的情况。
它不等于空白或零。
一个空白被认为等于另一个空白,一个零等于另一个零,但是两个空值不被认为是相等的。
当表中的每一行不同时,可以使用一个或多个列来标识特定的行。
这个唯一的列或列组称为主键。
作为主键一部分的任何列都不能为空;如果是,包含它的主键将不再是一个完整的标识符。
此规则称为实体完整性。
这,这个,那,那个Employees表说明了其中的一些关系数据库概念。
它有五列六行,每一行代表不同的雇员。
Employees桌子
Employee_Number
First_name
Last_Name
Date_of_Birth
Car_Number
10001
阿克塞尔
华盛顿
8月28日至4月
5
10083
阿维德
夏尔马
11月24-54日
零
10120
乔纳斯
金斯伯格
01-1月-69
零
10005
弗洛伦斯
沃约科夫斯基
04-7月-71
12
10099
西恩
华盛顿
9月21日至6日
零
10035
伊丽莎白
山口
24-12月-59
零
此表的主键通常是员工号,因为每个键都保证不同。
(在进行比较时,数字也比字符串更有效。
)也可以使用First_Name和Last_Name因为两者的组合也只标识了示例数据库中的一行。
仅仅使用姓氏是行不通的,因为有两个姓“华盛顿”的雇员。
在这种情况下,名字都是不同的,因此可以设想使用该列作为主键,但最好避免使用可能出现重复的列。
如果伊丽莎白·山口在这家公司找到一份工作,关键是First_Name,RDBMS将不允许添加她的名称(如果已指定不允许重复)。
因为表中已经有一个Elizabeth,添加第二个键将使主键作为只识别一行的方法变得毫无用处。
注意,尽管使用First_Name和Last_Name是此示例的唯一组合键,它在大型数据库中可能不是唯一的。
还请注意,Employee表假设每个员工只能有一辆汽车。
SELECT陈述
SQL是一种设计用于关系数据库的语言。
有一组基本SQL命令被认为是标准的,并被所有RDBMS使用。
例如,所有RDBMS都使用SELECT声明。
A SELECT语句(也称为查询)用于从表中获取信息。
它指定一个或多个列标题、要从中选择的一个或多个表以及一些选择标准。
RDBMS返回满足所述要求的列条目的行。
一个SELECT下面这样的语句将获取拥有公司汽车的员工的姓名:
SELECTFirst_Name,Last_Name
FROMEmployees
WHERECar_NumberISNOTNULL
结果集(满足在Car_Number列)如下。
为满足要求的每一行打印名称和姓氏,因为SELECT语句(第一行)指定列。
First_Name和Last_Name。
这,这个,那,那个FROM子句(第二行)给出将从中选择列的表。
名字
姓
阿克塞尔
华盛顿
弗洛伦斯
沃约科夫斯基
下面的代码生成一个结果集,该结果集包含整个表,因为它要求表雇员中的所有列不受任何限制(否)WHERE条款)。
请注意SELECT*意思是“选择所有列”。
SELECT*
FROMEmployees
WHERE条款
这,这个,那,那个WHERE从句SELECT语句提供选择值的标准。
例如,在下面的代码片段中,只有在列LastName以字符串‘Washington’开头的行中才会选择值。
SELECTFirst_Name,Last_Name
FROMEmployees
WHERELast_NameLIKE'Washington%'
关键词LIKE用于比较字符串,它提供了可以使用包含通配符的模式的特性。
例如,在上面的代码片段中,有一个百分比符号(%)在“Washington”的末尾,这意味着任何包含字符串“Washington”加上零或多个额外字符的值都将满足此选择标准。
所以“华盛顿”或“华盛顿”是匹配的,但“清洗”则不是。
中使用的另一个通配符LIKE从句是底栏(_),代表任何一个字符。
例如
WHERELast_NameLIKE'Ba_man'
与“蝙蝠侠”、“巴曼”、“巴德曼”、“鲍曼”、“巴格曼”、“巴曼”等搭配。
下面的代码片段有一个WHERE子句,使用等号(=)比较数字。
它选择分配给Car12的员工的姓名。
SELECTFirst_Name,Last_Name
FROMEmployees
WHERECar_Number=12
下一个代码片段选择员工编号大于10005的员工的姓名:
SELECTFirst_Name,Last_Name
FROMEmployees
WHEREEmployee_Number>10005
WHERE子句可以非常精细,具有多个条件,在某些DBMS中,可以使用嵌套条件。
本概览将不涵盖复杂的内容。
WHERE子句,但是下面的代码片段有一个WHERE子句具有两个条件;此查询选择员工编号小于10100且没有公司汽车的员工的姓名。
SELECTFirst_Name,Last_Name
FROMEmployees
WHEREEmployee_Number<10100andCar_NumberISNULL
一种特殊类型的WHERE子句包含一个联接,下一节将对此进行解释。
接合
Adistinguishingfeatureofrelationaldatabasesisthatitispossibletogetdatafrommorethanonetableinwhatiscalledajoin.Supposethatafterretrievingthenamesofemployeeswhohavecompanycars,onewantedtofindoutwhohaswhichcar,includingthemake,model,andyearofcar.Thisinformationisstoredinanothertable, Cars:
Cars桌子
Car_Number
Make
Model
Year
5
本田
公民DX
1996
12
丰田
花冠
1999
必须在两个表中出现一个列,以便将它们相互关联。
该列必须是一个表中的主键,称为另一个表中的外键。
在这种情况下,出现在两个表中的列是Car_Number,它是表的主键。
Cars以及桌子上的外键。
如果1996年本田思域被毁并从Cars那么桌子Car_Number为了保持所谓的引用完整性,还必须从Employees表中删除5。
否则,外键列(Car_Number)在Employees表中不引用任何内容的条目。
Cars。
外键必须为NULL或等于它所引用的表的现有主键值。
这与主键不同,主键可能不是NULL。
控件中有几个空值。
Car_Number表中的列Employees因为员工有可能没有公司的汽车。
下面的代码询问拥有公司汽车的员工的姓名以及这些汽车的制造、型号和年份。
注意,FROM子句列出员工和汽车,因为所请求的数据包含在两个表中。
使用表名和列名前面的点(.)指示哪个表包含该列。
SELECTEmployees.First_Name,Employees.Last_Name,
Cars.Make,Cars.Model,Cars.Year
FROMEmployees,Cars
WHEREEmployees.Car_Number=Cars.Car_Number
这将返回一个类似于以下内容的结果集:
FIRST_NAME
LAST_NAME
MAKE
MODEL
YEAR
阿克塞尔
华盛顿
本田
公民DX
1996
弗洛伦斯
沃约科夫斯基
丰田
花冠
1999
通用SQL命令
SQL命令分为两大类,分别是数据操作语言(DML)命令和数据定义语言(DDL)命令。
DML命令处理数据,要么检索它,要么修改它以保持它的最新。
DDL命令创建或更改表和其他数据库对象,如视图和索引。
下面列出了更常见的DML命令:
∙
SELECT — 用于查询和显示数据库中的数据。
这,这个,那,那个SELECT语句指定要包含在结果集中的列。
应用程序中使用的绝大多数SQL命令是SELECT陈述。
∙
∙
INSERT — 将新行添加到表中。
INSERT用于填充新创建的表或向已存在的表中添加新行(或行)。
∙
∙
DELETE — 从表中移除指定的行或行集。
∙
∙
UPDATE — changesanexistingvalueinacolumnorgroupofcolumnsinatable
∙
更常见的DDL命令如下:
∙
CREATETABLE — 创建一个具有用户提供的列名的表。
用户还需要为每个列中的数据指定一个类型。
数据类型因RDBMS而异,因此用户可能需要使用元数据来建立特定数据库使用的数据类型。
CREATETABLE通常使用的频率低于数据操作命令,因为表只创建一次,而添加或删除行或更改单个值的频率通常更高。
∙
∙
DROPTABLE — 删除所有行并从数据库中删除表定义。
需要JDBCAPI实现来支持DROPTABLE命令,由SQL92指定,过渡级别。
但是,对CASCADE和RESTRICT可供选择的DROPTABLE是可选的。
此外,DROPTABLE是实现-定义了引用要删除的表的视图或完整性约束时定义的。
∙
∙
ALTERTABLE — 从表中添加或删除列。
它还添加或删除表约束和更改列属性。
∙
结果集和游标
满足查询条件的行称为结果集。
结果集中返回的行数可以是零、一或多。
用户可以一次访问结果集中的数据,而游标提供了这样做的方法。
可以将游标看作是指向包含结果集行的文件的指针,并且该指针能够跟踪当前正在访问的行。
游标允许用户从上到下处理结果集的每一行,因此可以用于迭代处理。
大多数DBMS在生成结果集时自动创建游标。
早期的JDBCAPI版本为结果集的游标添加了新的功能,允许它向前和向后移动,还允许它移动到指定的行或相对于另一行位置的行。
交易
当一个用户正在访问数据库中的数据时,另一个用户可能同时访问相同的数据。
例如,如果第一用户同时更新表中的某些列,则第二用户从同一表中选择列,则第二用户可以获得部分旧数据和部分更新数据。
因此,DBMS使用事务来维护数据处于一致状态(数据一致性),同时允许多个用户同时访问数据库(数据并发性)。
事务是一组由一个或多个SQL语句组成的逻辑工作单元。
事务以提交或回滚结束,这取决于数据一致性或数据并发是否有任何问题。
COMMIT语句使事务中SQL语句产生的更改永久化,ROLLBACK语句取消事务中SQL语句产生的所有更改。
锁是一种机制,它禁止两个事务同时操作相同的数据。
例如,如果表上有未提交的事务,表锁将防止表被删除。
在一些DBMS中,表锁还锁定表中的所有行。
行锁阻止两个事务修改同一行,或者阻止一个事务选择行,而另一个事务仍在修改行。
存储过程
存储过程是一组可以按名称调用的SQL语句。
换句话说,它是一个可执行的代码,一个迷你程序,它执行一个特定的任务,可以调用函数或方法的方式调用。
传统上,存储过程是用特定于DBMS的编程语言编写的.最新一代的数据库产品允许使用Java编程语言和JDBCAPI编写存储过程。
用Java编程语言编写的存储过程在DBMS之间是可移植的字节码。
一旦编写了存储过程,就可以使用和重用它,因为支持存储过程的DBMS将,顾名思义,将其存储在数据库中。
下面的代码是如何使用Java编程语言创建一个非常简单的存储过程的示例。
注意,存储过程只是一个包含普通JDBC代码的静态Java方法。
它接受两个输入参数,并使用它们更改员工的汽车号码。
如果你在这一点上不理解这个例子,不要担心。
下面的代码示例只是为了说明存储过程是什么样子的。
您将在下面的教程中学习如何在本例中编写代码。
importjava.sql.*;
publicclassUpdateCar{
publicstaticvoidUpdateCarNum(intcarNo,intempNo)
throwsSQLException{
Connectioncon=null;
PreparedStatementpstmt=null;
try{
con=DriverManager.getConnection(
"jdbc:
default:
connection");
pstmt=con.prepareStatement(
"UPDATEEMPLOYEES"+
"SETCAR_NUMBER=?
"+
"WHEREEMPLOYEE_NUMBER=?
");
pstmt.setInt(1,carNo);
pstmt.setInt(2,empNo);
pstmt.executeUpdate();
}
finally{
if(pstmt!
=null)pstmt.close();
}
}
}
元数据
数据库存储用户数据,还存储有关数据库本身的信息。
大多数DBMS都有一组系统表,其中列出了数据库中的表、每个表中的列名、主键、外键、存储过程等等。
每个DBMS都有自己的功能来获取有关表布局和数据库特性的信息。
jdbc提供了DatabaseMetaData,该驱动程序编写器必须实现,以便其方法返回有关驱动程序和/或驱动程序所针对的DBMS的信息。
例如,无论驱动程序是否支持特定功能,大量方法都会返回。
这个界面为用户和工具提供了获取元数据的标准化方法。
一般来说,编写工具和驱动程序的开发人员最可能关注元数据。
关系数据库概述
数据库是一种存储信息的方式,可以从数据库中检索信息。
最简单地说,关系数据库是在有行和列的表中显示信息的数据库。
表被称为关系,因为它是同一类型(行)对象的集合。
表中的数据可以根据公共键或概念进行关联,从表中检索相关数据的能力是关系数据库术语的基础。
数据库管理系统(DBMS)处理存储、维护和检索数据的方式。
对于关系数据库,关系数据库管理系统(RDBMS)执行这些任务。
在本书中使用的DBMS是一个包含RDBMS的通用术语。
完整性规则
关系表遵循某些完整性规则,以确保它们包含的数据保持准确并始终可访问。
首先,关系表中的行都应该是不同的。
如果存在重复行,则可能会出现问题,无法解决两个可能的选择中哪一个是正确的。
对于大多数DBMS,用户可以指定不允许重复行,如果这样做,DBMS将防止添加复制现有行的任何行。
传统关系模型的第二个完整性规则是,列值不能重复组或数组。
数据完整性的第三个方面涉及空值的概念。
数据库通过使用NULL值来指示缺少值来处理数据不可用的情况。
它不等于空白或零。
一个空白被认为等于另一个空白,一个零等于另一个零,但是两个空值不被认为是相等的。
当表中的每一行不同时,可以使用一个或多个列来标识特定的行。
这个唯一的列或列组称为主键。
作为主键一部分的任何列都不能为空;如果是,包含它的主键将不再是一个完整的标识符。
此规则称为实体完整性。
这,这个,那,那个Employees tableillustratessomeoftheserelationaldatabaseconcepts.Ithasfivecolumnsandsixrows,witheachrowrepresentingadifferentemployee.
Employees桌子
Employee_Number
First_name
Last_Name
Date_of_Birth
Car_Number
10001
约翰
华盛顿
8月28日至4月
5
10083
阿维德
夏尔马
11月24-54日
零
10120
乔纳斯
Ginsberg
01-1月-69
零
10005
弗洛伦斯
沃约科夫斯基
04-7月-71
12
10099
西恩
华盛顿
9月21日至6日
零
10035
伊丽莎白
山口
24-12月-59
零
此表的主键通常是员工号,因为每个键都保证不同。
(在进行比较时,数字也比字符串更有效。
)也可以使用First_Name and Last_Name因为两者的组合也只标识了示例数据库中的一行。
仅仅使用姓氏是行不通的,因为有两个姓“华盛顿”的雇员。
在这种情况下,名字都是不同的,因此可以设想使用该列作为主键,但最好避免使用可能出现重复的列。
如果伊
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 连接 JDBC 指导 说明
![提示](https://static.bdocx.com/images/bang_tan.gif)