【ACCESS精品源码栏目提醒】:以下是网学会员为您推荐的ACCESS精品源码-【精品】java连接数据库及数据库的查询 - 其它资料,希望本篇文章对您学习有所帮助。
第 7 章 java 连接数据库及数据库的查询 jdbc 与数据库概述 访问数据库 一个查询数据库的 WEB 示例7.1 jdbc 与数据库概述 数据库是一个有组织的数据集合,它由一个或多个表组成。
每一个表中都存储了对一类对象的数据描述。
数据库管理系统(database management system,DBMS)以一种与数据库格式一致的方式,提供了存储和组织数据的机制。
7.11 数据库编程 1)当前主流数据库 当前最流行的数据库是关系型数据库,它是将数据表示为表的集合,通过建立简单表之间的关系来定义结构的一种数据库。
数据库中的表按照行和列的形式来存储信息。
行表示关系型数据库中的记录,列表示数据属性。
比较著名的关系数据库管理系统有 Oracle、Sybase、DB2、MySQL、Microsoft SQL Server、Microsoft
Access 等。
2)sql 语言SQL 是一个国际化标准语言,几乎所有关系型数据库都用 SQL 语言执行数据查询和操纵。
理解 SQL 语句时要注意几点: 1 SQL 语言中的语句都是独立执行的,无上下文联系; 2 每条语句都有自己的主关键字,语句中可包含若干子句; 3 SQL 语句本身不区分大小写。
为突出语句格式,下面例子中保留字采用大写。
1. 建表语句 格式:CREATE TABLE table_name (column1 type not null…) 功能:在当前数据库中创建一张名为的 table_name 表格结构。
2. 删除表 格式:DROP table_name 功能:在当前数据库中删除名为 table_name 的表。
3. 查询语句 格式:SELECT col1,col2,...,coln FROM table_name WHERE condition_expression 功能:从数据库表中检索满足条件的记录。
WHERE 子句是可选项,它可以包含 lt、 gt、 lt、 gt、 、ltgt和 LIKE 运算符。
LIKE 运算符用于带有通配符百分 号()和下划线(_)的模式匹配。
4. 插入语句 格式:INSERT INTO table_name col1, ..., v2, col2, coln VALUESv1, ..., vn 功能:在表 table_name 中插入一条记录,各列的值依次分别为 v1、v2、…、vn 等,若某列的列名未给,则值为 NULL。
注意:1如果所有的列名都未给,则在 Values 中必须依次给出所有列的值。
2 给出的值的类型必须与对应的列的类型相一致。
5. 更新语句 格式:UPDATE table_name SET col1v1 ,col2v2,...,colnvnWHERE condition_expression 功能:更新表 table_name 中满足条件的记录,使列 col1 的值为 v1、列 col2 的值 为 v2、…、列 coln 的值为 vn 等。
注意:如不给出条件,则更新表中所有记录。
例如,假如银行账户系统中有一张 account账户表中,账号为“1280316401“的 账户取款 200 元后应更新余额,使用语句如下: UPDATE account SET accountAmountaccountAmount-200 WHERE accountNumber ’1280316401’ 6. 删除语句 格式:DELETE FROM table_name WHERE condition_expression 功能:删除表 table_name 中满足条件的记录。
特别注意:如果不给出条件,则 删除表中所有记录。
例如,对 account 表中,账号为“1280316401“的账户进行销户处理,语句如下: DELETE FORM account WHERE accountNumber’1280316401’7.12 JDBC 框架结构 1)ODBC 数据源 ODBC 是 OpenDatabaseConnectivity 的英文简写。
它是由 Microsoft 提出的为连接不同数据库而制定的一种接口标准,是用 C 语言实现的,标准应用程序数据接口。
通过 ODBCAPI,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS 使用了何种数据存储格式和编程接口。
几乎所有的数据库都支持这一标准。
ODBC 有其不足之处,比如它并不容易使用,没有面向对象的特性等等。
ODBC 的结构包括四个主要部分:应用程序接口、驱动器管理器、数据库驱动器和 数据源。
进行 ODBC 数据源设置,在 Windows XP 环境下,可按路径开始菜单-设置-控制面板-管理工具-数据源(ODBC) ,双击可打开如图 11.3 所示的对话框。
单击系统 DSN-gt单击添加按钮,可以添加不同的 odbc 数据源。
2 通过 JDBC 访问数据库 JDBC 与 ODBC 的工作原理非常类似。
JDBC 与 ODBC 都是基于 X/Open 的 SQL 调用级接口, JDBC 的设计在思想上沿袭了 ODBC,同时在其主要抽象和 SQL CLI 实现上也沿袭了 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 数据库驱动程序的功能是:一面用底层协议与数据库服务器进行对话;一面 用 JDBC API 与用户程序进行对话。
为实现 “与平台无关”的特点,JDBC 为我们提供了一个“驱动程序管理器”,它能动 态维护数据库查询所需的所有驱动程序对象。
用户可以从数据库供应商那里获得 JDBC 数据库驱动程序。
2. JDBC 驱动程序类型 1 JDBC-ODBC Bridge 将对 JDBC 的调用转化为 ODBC 的调用,要求本地机必须安装 ODBC 驱动程序, 然后注册一个 ODBC 数据源名 。
2 JDBC-Native API Bridge 直接将用户的调用转化为对数据库客户端 API 的调用,要求本地机必须安装好 特定的驱动程序,显然限制了应用程序对其它数据库的使用。
3 JDBC-MiddleWare 它是独立于数据库服务器的,它和一个中间件服务器通讯,由中间件负责与数 据库通讯。
4 Pure JDBC Driver 使用该类型的应用程序无需安装附加的软件,所有对数据库的操作都直接由 JDBC 驱动程序完成。
如上图所示:我们一般通过1 JDBC-ODBC Bridge 和4 Pure JDBC Driver的方式访问数据库7.13 JDBC 典型应用模型 1)两层模型 2)三层模型7.14 JDBC 中的主要类和接口 简单地说,JDBC 主要完成下列三项任务: 1 同一个数据库建立连接; 2 向数据库发送 SQL 语句; 3 处理数据库返回的结果。
这些任务由 JDBC API 来完成。
JDBC API 被描述成为一组抽象的 Java 接口。
这些接口 都可能产生异常,如:ClassNotFoundException、SQLException 异常,因而编写程序时 必须对抛出的异常进行捕获。
主要的 JDBC API 如下: 1 驱动程序管理器 Drvier Manager 用来加载驱动程序,管理应用程序和已注册的驱动程序的连接。
2 连接 Connection 封装了应用程序与数据库之间的连接信息。
3 驱动程序 Driver 负责定位并访问数据库,建立数据库连接和处理所有与数据库的通讯。
4 语句 Statement 用来在数据库中执行一条 SQL 语句。
5 结果集 ResultSet 负责保存执行查询后返回的数据。
7.2 访问数据库7.21 访问数据库的步骤 1)载入 jdbc 数据库驱动程序 2)建立与数据库的连接 3)在建立数据库连接的前提下执行 sql 语句 4)取结果集和结果信息 5)关闭数据库连接7.22 连接数据库 1)JDBC URL: jdbc:lt子协议gt:lt数据库子名称gt 例如连接到 oracle 10g 的 orcl 数据库实例的 URL 是 jdbc:oracle:thin:10.0.0.13:1521:orcl 再例如连接到 sqlserver 2008 的 master 数据库的 URL 是 jdbc:sqlserver:// 10.0.0.13:1433databaseNamemaster 2)建立连接 //加载驱动 Class.forNamequotoracle.jdbc.driver.OracleDriverquot //定义URL String urlquotjdbc:oracle:thin:10.0.0.13:1521:orclquot //建立连接 Connection conn DriverManager.getConnectionurlquotusernamequotquotpasswordquot7.23 执行 sql 语句 取得各列信息 getColumns 取得索引信息 getIndexInfo7.24 Statement 语句7.25 取结果集中的数据7.26 一个简单例子 该例把 sqlserver2008 的 master 数据库中的 spt_monitor 表中的数据查询出来,并打印到控制台上import java.sql.public class DataOperate / 函数功能:获取连接数据库的对象 / public Connection getConn throws Exception Connection conn null //加载驱动 Class.forNamequotcom.microsoft.sqlserver.jdbc.SQLServerDriverquot //定义URL String urlquotjdbc:sqlserver://localhost:1433databaseNamemasterquot //建立连接 conn DriverManager.getConnectionurlquotsaquotquot123456quot return conn / 函数功能:获取执行sql语句的对象 / public Statement getStmtConnection conn throws SQLException Statement stmt null stmt conn.createStatement return stmt / 函数功能:执行sql语句,获取结果集 / public ResultSet execQueryString sqlStatement stmt throwsSQLException ResultSet rsnull rsstmt.executeQuerysql return rs / main方法,程序入口 / public static void mainString args //定义查询的sql语句 String sqlquotselect from spt_monitorquot //实例化当前类的对象 DataOperate doptnew DataOperate Connection connnull Statement stmtnull ResultSet rsnull try //调用函数获取连接类的对象 conndopt.getConn //调用函数获取执行sql语句的对象 stmtdopt.getStmtconn //调用函数取得结果集 rsdopt.execQuerysql stmt //循环打印出数据库中每一行数据 whilers.next System.out.printrs.getStringquotcpu_busyquotquotquotrs.getStringquotio_busyquot catchException e e.printStackTrace try ifconn null //关闭连接对象 conn.close catchException e e.printStackTrace 7.3 一个查询数据库的 WEB 示例 本小节以一个实际例子引导大家开发一个简单的查询数据库的 web 示例。
开发工具:MyEclipse 6.5 数据库:SqlSever2008 Web 服务器:Tomcat 6.0 JDBC 数据库驱动包:sqljdbc4.jar 以上软件包请同学们自行下载安装。
第一步:打开 sqlserver2008、建库、建表,插入数据。
建立 student 数据库,建立 student 表,字段如下图所示: 插入如下图所示数据: 以上步骤请同学自己完成。
也可以完全用 sql 代码的方式完成,参考代码如下:--一.建库 (注意:C:data 是需要手工建立的目录)create database STUDENT on name STUDENT_data filenameC:dataSTUDENT_data.mdf maxsize50MB size3MB filegrowth1MBlog onname STUDENT_log filenameC:dataSTUDENT_log.ldf maxsize50MB size2MB filegrowth1MB USE STUDENT--二、建表create table Student.dbo.Studentsno char4 primary key name varchar20 not null sex varchar2 age smallint native varchar20 department varchar50 address varchar200 ---三、插入数据insert into dbo.Student values 1101王燕女20北京工程系nullinsert into dbo.Student values 1102张军男21上海工程系nullinsert into dbo.Student values 1104张栋男21南京工程系nullinsert into dbo.Student values 1201吴华女20成都计算机系nullinsert into dbo.Student values 1202李波男21上海计算机系nullinsert into dbo.Student values 1203陈建男19长沙计算机系nullinsert into dbo.Student values 1204王江洪男19邵阳基建系nullinsert into dbo.Student values 1205潘将男19常德艺术系nullinsert into dbo.Student values 1303张斌男22上海经管系nullinsert into dbo.Student values 1305张斌女20武汉经管系null 第二步:打开 MyEclipse,建立一个 web 工程 webquery,并载入驱动包 sqljdbc4.jar。
如下图所示: 新建 web 工程 添加驱动包 添加驱动包步骤三 建立源代码文件。
分别新建三个包和三个 java 类文件还有一个 jsp 文件,如图所示:源代码及注解如下:StudentBean.javapackage beans/ javabean 文件,定义一些变量,跟数据库中相关表的字段一致,并设置get/set方法, 用来封装数据库表中的数据 /public class StudentBean private String sno private String name private String sex private String age private String nativeplace private String department private String address public String getSno return sno public void setSnoString sno this.sno sno public String getName return name public void setNameString name this.name name public String getSex return sex public void setSexString sex this.sex sex public String getAge return age public void setAgeString age this.age age public String getNativeplace return nativeplace public void setNativeplaceString nativeplace this.nativeplace nativeplace public String getDepartment return department public void setDepartmentString department this.department department public String getAddress return address public void setAddressString address this.address address DataOperate.javapackage dboperateimport java.sql./ 一些操作数据库方法的集合 /public class DataOperate / 函数功能:获取连接数据库的对象 / public Connection getConn throws Exception Connection conn null //加载驱动 Class.forNamequotcom.microsoft.sqlserver.jdbc.SQLServerDriverquot //定义URL String urlquotjdbc:sqlserver://localhost:1433databaseNamemasterquot //建立连接 conn DriverManager.getConnectionurlquotsaquotquot123456quot return conn / 函数功能:获取执行sql语句的对象 / public Statement getStmtConnection conn throws SQLException Statement stmt null stmt conn.createStatement return stmt / 函数功能:执行sql语句,获取结果集 / public ResultSet execQueryString sqlStatement stmt throwsSQLException ResultSet rsnull rsstmt.executeQuerysql return rs ExecQuery.javapackage servletsimport java.io.import java.sql.import java.util.import dboperate.DataOperateimport beans.StudentBeanimport javax.servlet.ServletExceptionimport javax.servlet.http.HttpServletimport javax.servlet.http.HttpServletRequestimport javax.servlet.http.HttpServletResponse/ servlet,项目的核心所在,实现数据操作,实现具体业务逻辑 /public class ExecQuery extends HttpServlet private static final String CONTENT_TYPEquottext/htmlcharsetGBKquot public void doGetHttpServletRequest request HttpServletResponseresponse throws ServletException IOException doPostrequestresponse public void doPostHttpServletRequest request HttpServletResponseresponse throws ServletException IOException //设置输入的编码机制 request.setCharacterEncodingquotGBKquot //设置输出的编码机制 response.setContentTypeCONTENT_TYPE Connection connnull Statement stmtnull ResultSet rsnull //获取sql语句String sqlstrrequest.getParameterquotsqlstringquot.trim System.out.printlnsqlstr try //实例化数据库操作类的对象 DataOperate opernew DataOperate //实例化一个集合工具类的对象,用来保存表中数据 ArrayList studentsnew ArrayList //获取数据库连接对象 connoper.getConn //获取执行sql语句的对象 stmtoper.getStmtconn //执行查询,得到结果集 rsoper.execQuerysqlstr stmt whilers.next //每一条数据库的记录对应一个jobbean实例 StudentBean sbnew StudentBean sb.setAddressrs.getStringquotaddressquot sb.setAgers.getStringquotagequot sb.setDepartmentrs.getStringquotdepartmentquot sb.setNamers.getStringquotnamequot sb.setNativeplacers.getStringquotnativeplacequot sb.setSexrs.getStringquotsexquot sb.setSnors.getStringquotsnoquot //把表中查出来的数据封装到javabean中并保存到students容器对象中 students.addsb //jsp页面会收到该对象 request.setAttribut.