java连接数据库及数据库的查询.docx

上传人:b****5 文档编号:7209807 上传时间:2023-01-21 格式:DOCX 页数:29 大小:857.75KB
下载 相关 举报
java连接数据库及数据库的查询.docx_第1页
第1页 / 共29页
java连接数据库及数据库的查询.docx_第2页
第2页 / 共29页
java连接数据库及数据库的查询.docx_第3页
第3页 / 共29页
java连接数据库及数据库的查询.docx_第4页
第4页 / 共29页
java连接数据库及数据库的查询.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

java连接数据库及数据库的查询.docx

《java连接数据库及数据库的查询.docx》由会员分享,可在线阅读,更多相关《java连接数据库及数据库的查询.docx(29页珍藏版)》请在冰豆网上搜索。

java连接数据库及数据库的查询.docx

java连接数据库及数据库的查询

第7章java连接数据库及数据库的查询

Øjdbc与数据库概述

Ø访问数据库

Ø一个查询数据库的WEB示例

 

7.1jdbc与数据库概述

数据库是一个有组织的数据集合,它由一个或多个表组成。

每一个表中都存储了对一类对象的数据描述。

数据库管理系统(databasemanagementsystem,DBMS)以一种与数据库格式一致的方式,提供了存储和组织数据的机制。

7.11数据库编程

1)当前主流数据库

当前最流行的数据库是关系型数据库,它是将数据表示为表的集合,通过建立简单表之间的关系来定义结构的一种数据库。

数据库中的表按照行和列的形式来存储信息。

行表示关系型数据库中的记录,列表示数据属性。

比较著名的关系数据库管理系统有Oracle、Sybase、DB2、MySQL、MicrosoftSQLServer、MicrosoftAccess等。

2)sql语言

SQL是一个国际化标准语言,几乎所有关系型数据库都用SQL语言执行数据查询和操纵。

理解SQL语句时要注意几点:

(1)SQL语言中的语句都是独立执行的,无上下文联系;

(2)每条语句都有自己的主关键字,语句中可包含若干子句;

(3)SQL语句本身不区分大小写。

为突出语句格式,下面例子中保留字采用大写。

1.建表语句

格式:

CREATETABLEtable_name(column1type[not]null,…)

功能:

在当前数据库中创建一张名为的table_name表格结构。

2.删除表

格式:

DROPtable_name

功能:

在当前数据库中删除名为table_name的表。

3.查询语句

格式:

SELECTcol1,col2,...,colnFROMtable_name[WHEREcondition_expression]

功能:

从数据库表中检索满足条件的记录。

WHERE子句是可选项,它可以包含<、>、<=、>=、=、<>和LIKE运算符。

LIKE运算符用于带有通配符百分号(%)和下划线(_)的模式匹配。

4.插入语句

格式:

INSERTINTOtable_name[(col1,col2,...,coln)]VALUES(v1,v2,...,vn)

功能:

在表table_name中插入一条记录,各列的值依次分别为v1、v2、…、vn等,若某列的列名未给,则值为NULL。

注意:

(1)如果所有的列名都未给,则在Values中必须依次给出所有列的值。

(2)给出的值的类型必须与对应的列的类型相一致。

5.更新语句

格式:

UPDATEtable_nameSETcol1=v1[,col2=v2,...,coln=vn][WHEREcondition_expression]

功能:

更新表table_name中满足条件的记录,使列col1的值为v1、列col2的值为v2、…、列coln的值为vn等。

注意:

如不给出条件,则更新表中所有记录。

例如,假如银行账户系统中有一张account(账户)表中,账号为“1280316401“的账户取款200元后应更新余额,使用语句如下:

UPDATEaccountSETaccountAmount=accountAmount-200

WHEREaccountNumber=’1280316401’

6.删除语句

格式:

DELETEFROMtable_name[WHEREcondition_expression]

功能:

删除表table_name中满足条件的记录。

特别注意:

如果不给出条件,则删除表中所有记录。

例如,对account表中,账号为“1280316401“的账户进行销户处理,语句如下:

DELETEFORMaccountWHEREaccountNumber=’1280316401’

7.12JDBC框架结构

1)ODBC数据源

ODBC是OpenDatabaseConnectivity的英文简写。

它是由Microsoft提出的为连接不同数据库而制定的一种接口标准,是用C语言实现的,标准应用程序数据接口。

通过ODBCAPI,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。

几乎所有的数据库都支持这一标准。

⏹ODBC有其不足之处,比如它并不容易使用,没有面向对象的特性等等。

⏹ODBC的结构包括四个主要部分:

应用程序接口、驱动器管理器、数据库驱动器和数据源。

进行ODBC数据源设置,在WindowsXP环境下,可按路径开始菜单-设置-控制面板-管理工具-数据源(ODBC),双击可打开如图11.3所示的对话框。

单击系统DSN->单击添加按钮,可以添加不同的odbc数据源。

2)通过JDBC访问数据库

JDBC与ODBC的工作原理非常类似。

JDBC与ODBC都是基于X/Open的SQL调用级接口,JDBC的设计在思想上沿袭了ODBC,同时在其主要抽象和SQLCLI实现上也沿袭了ODBC,这使得JDBC容易被接受。

JDBC的总体结构类似于ODBC,也有四个组件:

应用程序、驱动程序管理器、驱动程序和数据源。

JDBC保持了ODBC的基本特性,也独立于特定数据库。

使用相同源代码的应用程序通过动态加载不同的JDBC驱动程序,可以访问不同的DBMS。

连接不同的DBMS时,各个DBMS之间仅通过不同的URL进行标识。

JDBC的DatabaseMetaData接口提供了一系列方法,可以检查DBMS对特定特性的支持,并相应确定有什么特性,从而能对特定数据库的特性予以支持。

与ODBC一样,JDBC也支持在应用程序中同时建立多个数据库连接,采用JDBC可以很容易地用SQL语句同时访问多个异构的数据库,为异构的数据库之间的互操作奠定基础。

但是,JDBC除了具有ODBC的上述特点外,更具有对硬件平台、操作系统异构性的支持。

这主要是因为ODBC使用的是C语言,而JDBC使用的是Java语言。

Java语言具有与平台无关、移植性强、安全性高、稳定性好、分布式、面向对象等众多优点,而JDBC确保了“100%纯Java”的解决方案,利用Java的平台无关性,JDBC应用程序可以自然地实现跨平台特性,因而更适合于Internet上异构环境的数据库应用。

此外,JDBC驱动程序管理器是内置的,驱动程序本身也可通过Web浏览器自动下载,无须安装、配置;而ODBC驱动程序管理器和ODBC驱动程序必须在每台客户机上分别安装、配置。

1.JDBC数据库驱动程序

⏹JDBC数据库驱动程序的功能是:

一面用底层协议与数据库服务器进行对话;一面用JDBCAPI与用户程序进行对话。

⏹为实现“与平台无关”的特点,JDBC为我们提供了一个“驱动程序管理器”,它能动态维护数据库查询所需的所有驱动程序对象。

⏹用户可以从数据库供应商那里获得JDBC数据库驱动程序。

2.JDBC驱动程序类型

(1)JDBC-ODBCBridge

将对JDBC的调用转化为ODBC的调用,要求本地机必须安装ODBC驱动程序,然后注册一个ODBC数据源名。

(2)JDBC-NativeAPIBridge

直接将用户的调用转化为对数据库客户端API的调用,要求本地机必须安装好特定的驱动程序,显然限制了应用程序对其它数据库的使用。

(3)JDBC-MiddleWare

它是独立于数据库服务器的,它和一个中间件服务器通讯,由中间件负责与数据库通讯。

(4)PureJDBCDriver

使用该类型的应用程序无需安装附加的软件,所有对数据库的操作都直接由JDBC驱动程序完成。

如上图所示:

我们一般通过

(1)JDBC-ODBCBridge和(4)PureJDBCDriver

的方式访问数据库

7.13JDBC典型应用模型

1)两层模型

2)三层模型

7.14JDBC中的主要类和接口

简单地说,JDBC主要完成下列三项任务:

 

1同一个数据库建立连接;

2向数据库发送SQL语句;

3处理数据库返回的结果。

这些任务由JDBCAPI来完成。

JDBC API 被描述成为一组抽象的Java接口。

这些接口都可能产生异常,如:

ClassNotFoundException、SQLException异常,因而编写程序时必须对抛出的异常进行捕获。

主要的JDBCAPI如下:

(1)驱动程序管理器DrvierManager

用来加载驱动程序,管理应用程序和已注册的驱动程序的连接。

(2)连接Connection

封装了应用程序与数据库之间的连接信息。

(3)驱动程序Driver

负责定位并访问数据库,建立数据库连接和处理所有与数据库的通讯。

(4)语句Statement

用来在数据库中执行一条SQL语句。

(5)结果集ResultSet

负责保存执行查询后返回的数据。

7.2访问数据库

7.21访问数据库的步骤

1)载入jdbc数据库驱动程序

2)建立与数据库的连接

3)在建立数据库连接的前提下执行sql语句

4)取结果集和结果信息

5)关闭数据库连接

7.22连接数据库

1)JDBCURL:

jdbc:

<子协议>:

<数据库子名称>

例如连接到oracle10g的orcl数据库实例的URL是

jdbc:

oracle:

thin:

@10.0.0.13:

1521:

orcl

再例如连接到sqlserver2008的master数据库的URL是

jdbc:

sqlserver:

//10.0.0.13:

1433;databaseName=master

2)建立连接

//加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

//定义URL

Stringurl="jdbc:

oracle:

thin:

@10.0.0.13:

1521:

orcl";

//建立连接

Connectionconn=DriverManager.getConnection(url,"username","password");

7.23执行sql语句

取得各列信息

getColumns

取得索引信息

getIndexInfo

7.24Statement语句

7.25取结果集中的数据

7.26一个简单例子

该例把sqlserver2008的master数据库中的spt_monitor表中的数据查询出来,并打印到控制台上

importjava.sql.*;

publicclassDataOperate{

/*

*函数功能:

获取连接数据库的对象

*/

publicConnectiongetConn()throwsException{

Connectionconn=null;

//加载驱动

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//定义URL

Stringurl="jdbc:

sqlserver:

//localhost:

1433;databaseName=master";

//建立连接

conn=DriverManager.getConnection(url,"sa","123456");

returnconn;

}

/*

*函数功能:

获取执行sql语句的对象

*/

publicStatementgetStmt(Connectionconn)throwsSQLException{

Statementstmt=null;

stmt=conn.createStatement();

returnstmt;

}

/*

*函数功能:

执行sql语句,获取结果集

*/

publicResultSetexecQuery(Stringsql,Statementstmt)throwsSQLException{

ResultSetrs=null;

rs=stmt.executeQuery(sql);

returnrs;

}

/*

*main方法,程序入口

*/

publicstaticvoidmain(Stringargs[]){

//定义查询的sql语句

Stringsql="select*fromspt_monitor";

//实例化当前类的对象

DataOperatedopt=newDataOperate();

Connectionconn=null;

Statementstmt=null;

ResultSetrs=null;

try{

//调用函数获取连接类的对象

conn=dopt.getConn();

//调用函数获取执行sql语句的对象

stmt=dopt.getStmt(conn);

//调用函数取得结果集

rs=dopt.execQuery(sql,stmt);

//循环打印出数据库中每一行数据

while(rs.next()){

System.out.print(rs.getString("cpu_busy")+""+rs.getString("io_busy"));

}

}catch(Exceptione){

e.printStackTrace();

}

try{

if(conn!

=null){

//关闭连接对象

conn.close();

}

}catch(Exceptione){

e.printStackTrace();

}

}

}

7.3一个查询数据库的WEB示例

本小节以一个实际例子引导大家开发一个简单的查询数据库的web示例。

开发工具:

MyEclipse6.5

数据库:

SqlSever2008

Web服务器:

Tomcat6.0

JDBC数据库驱动包:

sqljdbc4.jar

以上软件包请同学们自行下载安装。

第一步:

打开sqlserver2008、建库、建表,插入数据。

建立student数据库,建立student表,字段如下图所示:

插入如下图所示数据:

以上步骤请同学自己完成。

也可以完全用sql代码的方式完成,参考代码如下:

--一.建库(注意:

C:

\data是需要手工建立的目录)

createdatabaseSTUDENTon

name=STUDENT_data,

filename='C:

\data\STUDENT_data.mdf',

maxsize=50MB,

size=3MB,

filegrowth=1MB

logon

(name=STUDENT_log,

filename='C:

\data\STUDENT_log.ldf',

maxsize=50MB,

size=2MB,

filegrowth=1MB

;

 

USESTUDENT;

--二、建表

createtableStudent.dbo.Student

(snochar(4)primarykey,

namevarchar(20)notnull,

sexvarchar

(2),

agesmallint,

nativevarchar(20),

departmentvarchar(50),

addressvarchar(200)

);

---三、插入数据

insertintodbo.Studentvalues('1101','王燕','女',20,'北京','工程系',null);

insertintodbo.Studentvalues('1102','张军','男',21,'上海','工程系',null);

insertintodbo.Studentvalues('1104','张栋','男',21,'南京','工程系',null);

insertintodbo.Studentvalues('1201','吴华','女',20,'成都','计算机系',null);

insertintodbo.Studentvalues('1202','李波','男',21,'上海','计算机系',null);

insertintodbo.Studentvalues('1203','陈建','男',19,'长沙','计算机系',null);

insertintodbo.Studentvalues('1204','王江洪','男',19,'邵阳','基建系',null);

insertintodbo.Studentvalues('1205','潘将','男',19,'常德','艺术系',null);

insertintodbo.Studentvalues('1303','张斌','男',22,'上海','经管系',null);

insertintodbo.Studentvalues('1305','张斌','女',20,'武汉','经管系',null);

第二步:

打开MyEclipse,建立一个web工程webquery,并载入驱动包sqljdbc4.jar。

如下图所示:

新建web工程

添加驱动包

 

添加驱动包

步骤三建立源代码文件。

分别新建三个包和三个java类文件还有一个jsp文件,如图所示:

源代码及注解如下:

StudentBean.java

packagebeans;

/*

*javabean文件,定义一些变量,跟数据库中相关表的字段一致,并设置get/set方法,

*用来封装数据库表中的数据

*/

publicclassStudentBean{

privateStringsno;

privateStringname;

privateStringsex;

privateStringage;

privateStringnativeplace;

privateStringdepartment;

privateStringaddress;

publicStringgetSno(){

returnsno;

}

publicvoidsetSno(Stringsno){

this.sno=sno;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetSex(){

returnsex;

}

publicvoidsetSex(Stringsex){

this.sex=sex;

}

publicStringgetAge(){

returnage;

}

publicvoidsetAge(Stringage){

this.age=age;

}

publicStringgetNativeplace(){

returnnativeplace;

}

publicvoidsetNativeplace(Stringnativeplace){

this.nativeplace=nativeplace;

}

publicStringgetDepartment(){

returndepartment;

}

publicvoidsetDepartment(Stringdepartment){

this.department=department;

}

publicStringgetAddress(){

returnaddress;

}

publicvoidsetAddress(Stringaddress){

this.address=address;

}

}

 

DataOperate.java

packagedboperate;

importjava.sql.*;

/*

*一些操作数据库方法的集合

*/

publicclassDataOperate{

/*

*函数功能:

获取连接数据库的对象

*/

publicConnectiongetConn()throwsException{

Connectionconn=null;

//加载驱动

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//定义URL

Stringurl="jdbc:

sqlserver:

//localhost:

1433;databaseName=master";

//建立连接

conn=DriverManager.getConnection(url,"sa","123456");

returnconn;

}

/*

*函数功能:

获取执行sql语句的对象

*/

publicStatementgetStmt(Connectionconn)throwsSQLException{

Statementstmt=null;

stmt=conn.createStatement();

returnstmt;

}

/*

*函数功能:

执行sql语句,获取结果集

*/

publicResultSetexecQuery(Stringsql,Statementstmt)throwsSQLException{

ResultSetrs=null;

rs=stmt.executeQuery(sql);

returnrs;

}

}

ExecQuery.java

packageservlets;

importjava.io.*;

importjava.sql.*;

importjava.util.*;

importdboperate.DataOperate;

importbeans.StudentBean;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

/*

*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1