-ms-text-justify: inter-ideograph;">*一些操作数据库方法的集合
*/
public class DataOperate {
/*
*函数功能:获取连接数据库的对象
*/
public Connection getConn() throws Exception{
Connection conn =null;
//加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//定义URL
String url= "jdbc:sqlserver://localhost:1433;databaseName=master";
//建立连接
conn = DriverManager.getConnection(url,"sa","123456");
return conn;
}
/*
*函数功能:获取执行sql语句的对象
*/
public Statement getStmt(Connection conn) throws SQLException{
Statement stmt =null;
stmt = conn.createStatement();
return stmt;
}
/*
*函数功能:执行sql语句,获取结果集
*/
public ResultSet execQuery(String sql,Statement stmt) throws SQLException{
ResultSet rs=null;
rs=stmt.executeQuery(sql);
return rs;
}
}
ExecQuery.java
package servlets;
import java.io.*;
import java.sql.*;
import java.util.*;
import dboperate.DataOperate;
import beans.StudentBean;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
*servlet,项目的核心所在,实现数据操作,实现具体业务逻辑
*/
public class ExecQuery extends HttpServlet {
private static final String CONTENT_TYPE="text/html;charset=GBK";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置输入的编码机制
request.setCharacterEncoding("GBK");
//设置输出的编码机制
response.setContentType(CONTENT_TYPE);
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
//获取sql语句
String sqlstr=request.getParameter("sqlstring").trim();
System.out.println(sqlstr);
try{
//实例化数据库操作类的对象
DataOperate oper=new DataOperate();
//实例化一个集合工具类的对象,用来保存表中数据
ArrayList students=new ArrayList();
//获取数据库连接对象
conn=oper.getConn();
//获取执行sql语句的对象
stmt=oper.getStmt(conn);
//执行查询,得到结果集
rs=oper.execQuery(sqlstr, stmt);
while(rs.next()){
//每一条数据库的记录对应一个jobbean实例
StudentBean sb=new StudentBean();
sb.setAddress(rs.getString("address"));
sb.setAge(rs.getString("age"));
sb.setDepartment(rs.getString("department"));
sb.setName(rs.getString("name"));
sb.setNativeplace(rs.getString("nativeplace"));
sb.setSex(rs.getString("sex"));
sb.setSno(rs.getString("sno"));
//把表中查出来的数据封装到javabean中并保存到students容器对象中
students.add(sb);
}
//jsp页面会收到该对象
request.setAttribute("studentlists", students);
//跳转到jsp页面
request.getRequestDispatcher("/ShowStudents.jsp").forward(request, response);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try{
//关闭数据库连接
stmt.close();
conn.close();
}catch(Exception e){
System.out.println(e.toString());
}
}
}
}
ShowStudents.jsp
<%@ page language="java" contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*,java.sql.*,beans.StudentBean"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>学生信息列表</title>
<link type="text/css" rel="stylesheet" href="" />
<style type="text/css">
<!--
body{
margin:0px;
background-color:#DEAEFB;
}
table{
border:solid blue 1px;
margin:0px;
background-color:#BA96F5;
}
form{
margin:0px;
}
#div1{
margin-top:0px;
}
.p1{
margin-bottom:0px;
margin-top:0px;
}
-->
</style>
<script type="text/javascript" src=""></script>
<script language="javascript">
</script>
</head>
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
%>
<body>
<p align="center" class="p1"><img src="images/maintop.gif" /></p>
<center>
<div id="div1">
<form action="ExecQuery" method="post" name="form1">
<table width="800" border="1" cellspacing="0" bordercolor="#B7E3F4">
<tr bgcolor="#99CCFF">
<td colspan="7" align="center">
<textarea name="sqlstring" cols="50" rows="5">请在这里输入查询的sql语句
</textarea>
<input name="chaxun" type="submit" value="查 询" />
</td>
</tr>
</table>
<table width="800" border="1" cellspacing="0" bordercolor="#B7E3F4">
<tr bgcolor="#99CCFF">
<td>学生编号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>籍贯</td>
<td>所在系</td>
<td>家庭住址</td>
</tr>
<%
//获取保存学生数据的ArrayList对象
List students=(ArrayList)request.getAttribute("studentlists");
if(students!=null){
StudentBean sb=null;
//取出数据,展示出来
for(int i=0;i<students.size();i++){
sb=(StudentBean)students.get(i);
out.print("<tr><td>");
out.print(sb.getSno());
out.print("</td><td>");
out.print(sb.getName());
out.print("</td><td>");
out.print(sb.getSex());
out.print("</td><td>");
out.print(sb.getAge());
out.print("</td><td>");
out.print(sb.getNativeplace());
out.print("</td><td>");
out.print(sb.getDepartment());
out.print("</td><td>");
out.print(sb.getAddress());
out.print("</td></tr>");
}
}
%>
<tr>
<td colspan="7" align="center">
<input name="guanbi" type="button" value="关 闭" onclick="window.close();"/>
</td>
</tr>
</table>
</form>
</div>
</center>
<hr height="2px" color="#3399FF" />
<p align="center"> web查询示例程序<br />
</p>
</body>
</html>
第四步 配置web.xml文件
Web.xml代码如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<description>Query</description>
<display-name>Query</display-name>
<servlet-name>ExecQuery</servlet-name>
<servlet-class>servlets.ExecQuery</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ExecQuery</servlet-name>
<url-pattern>/ExecQuery</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>ShowStudents.jsp</welcome-file>
</welcome-file-list>
</web-app>
第五步:启动tomcat,发布项目
如下图:
启动tomcat后,单击按钮,把web项目webquery发布到tomcat服务器目录下,如下图:
第六步,运行。
打开IE浏览器 输入http://localhost:8080/webquery,如下图所示:
在文本域里面输入sql语句,点击查询,如下图所示:
, Ø 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子句是可选项,它可以包含<、 >、 <=、 >=、 =、<>和LIKE运算符。LIKE运算符用于带有通配符百分号(%)和下划线(_)的模式匹配。
4. 插入语句
格式:INSERT INTO table_name [(col1,col2,...,coln)] VALUES(v1,v2,...,vn)
功能:在表table_name中插入一条记录,各列的值依次分别为v1、v2、…、vn等,若某列的列名未给,则值为NULL。
注意:(1)如果所有的列名都未给,则在Values中必须依次给出所有列的值。(2)给出的值的类型必须与对应的列的类型相一致。
5. 更新语句
格式:UPDATE table_name SET col1=v1 [,col2=v2,...,coln=vn][WHERE condition_expression]
功能:更新表table_name中满足条件的记录,使列col1的值为v1、列col2的值为v2、…、列coln的值为vn等。
注意:如不给出条件,则更新表中所有记录。
例如,假如银行账户系统中有一张account(账户)表中,账号为“1280316401“的账户取款200元后应更新余额,使用语句如下:
UPDATE account SET accountAmount=accountAmount-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语言实现的,标准应用程序数据接口。通过ODBC API,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。 几乎所有的数据库都支持这一标准。
n ODBC有其不足之处,比如它并不容易使用,没有面向对象的特性等等。
n ODBC的结构包括四个主要部分:应用程序接口、驱动器管理器、数据库驱动器和数据源。
进行ODBC数据源设置,在Windows XP环境下,可按路径开始菜单-设置-控制面板-管理工具-数据源(ODBC),双击可打开如图11.3所示的对话框。
单击系统DSN->单击添加按钮,可以添加不同的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数据库驱动程序
n JDBC数据库驱动程序的功能是:一面用底层协议与数据库服务器进行对话;一面用JDBC API与用户程序进行对话。
n 为实现 “与平台无关”的特点,JDBC为我们提供了一个“驱动程序管理器”,它能动态维护数据库查询所需的所有驱动程序对象。
n 用户可以从数据库供应商那里获得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:<子协议>:<数据库子名称>
例如连接到oracle 10g的orcl数据库实例的URL是
jdbc:oracle:thin:@10.0.0.13:1521:orcl
再例如连接到sqlserver 2008的master数据库的URL是
jdbc:sqlserver:// 10.0.0.13:1433;databaseName=master
2)建立连接
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//定义URL
String url="jdbc:oracle:thin:@10.0.0.13:1521:orcl";
//建立连接
Connection conn = DriverManager.getConnection(url,"username","password");
7.23 执行sql语句
取得各列信息
getColumns
取得索引信息
getIndexInfo
7.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.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//定义URL
String url= "jdbc:sqlserver://localhost:1433;databaseName=master";
//建立连接
conn = DriverManager.getConnection(url,"sa","123456");
return conn;
}
/*
*函数功能:获取执行sql语句的对象
*/
public Statement getStmt(Connection conn) throws SQLException{
Statement stmt =null;
stmt = conn.createStatement();
return stmt;
}
/*
*函数功能:执行sql语句,获取结果集
*/
public ResultSet execQuery(String sql,Statement stmt) throws SQLException{
ResultSet rs=null;
rs=stmt.executeQuery(sql);
return rs;
}
/*
*main方法,程序入口
*/
public static void main(String args[]){
//定义查询的sql语句
String sql="select * from spt_monitor";
//实例化当前类的对象
DataOperate dopt=new DataOperate();
Connection conn=null;
Statement stmt=null;
ResultSet rs=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(Exception e){
e.printStackTrace();
}
try{
if(conn !=null){
//关闭连接对象
conn.close();
}
}catch(Exception 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,
filename='C:\data\STUDENT_data.mdf',
maxsize=50MB,
size=3MB,
filegrowth=1MB
)
log on
(name= STUDENT_log,
filename='C:\data\STUDENT_log.ldf',
maxsize=50MB,
size=2MB,
filegrowth=1MB
)
;
USE STUDENT;
--二、建表
create table Student.dbo.Student
(sno char(4) primary key,
name varchar(20) not null,
sex varchar(2),
age smallint,
native varchar(20),
department varchar(50),
address varchar(200)
);
---三、插入数据
insert into dbo.Student values ('1101','王燕','女',20,'北京','工程系',null);
insert into dbo.Student values ('1102','张军','男',21,'上海','工程系',null);
insert into dbo.Student values ('1104','张栋','男',21,'南京','工程系',null);
insert into dbo.Student values ('1201','吴华','女',20,'成都','计算机系',null);
insert into dbo.Student values ('1202','李波','男',21,'上海','计算机系',null);
insert into dbo.Student values ('1203','陈建','男',19,'长沙','计算机系',null);
insert into dbo.Student values ('1204','王江洪','男',19,'邵阳','基建系',null);
insert into dbo.Student values ('1205','潘将','男',19,'常德','艺术系',null);
insert into dbo.Student values ('1303','张斌','男',22,'上海','经管系',null);
insert into dbo.Student values ('1305','张斌','女',20,'武汉','经管系',null);
第二步:打开MyEclipse,建立一个web工程webquery,并载入驱动包sqljdbc4.jar。如下图所示:
新建web工程
添加驱动包
添加驱动包
步骤三 建立源代码文件。
分别新建三个包和三个java类文件还有一个jsp文件,如图所示:
源代码及注解如下:
StudentBean.java
package 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 setSno(String sno) {
this.sno = sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getNativeplace() {
return nativeplace;
}
public void setNativeplace(String nativeplace) {
this.nativeplace = nativeplace;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
DataOperate.java
package dboperate;
import java.sql.*;
/*
全套毕业设计论文现成成品资料请咨询