文档库 最新最全的文档下载
当前位置:文档库 › 《JSP笔记》之五(JSP和数据库应用)

《JSP笔记》之五(JSP和数据库应用)

《JSP笔记》之五(JSP和数据库应用)
《JSP笔记》之五(JSP和数据库应用)

《JSP笔记》之五

第五章JSP与数据库应用

本章中,我们使用SQL Server 2000数据库管理系统。特别约定,建立新的数据库名为:student,在其下创建表:表1:student;表2:login 。数据源名:jspdb

§5.1 访问SQL Server数据库和案例11

§5.1.1 Web数据库程序设计基础

图中,服务器端由Web应用程序服务器和数据库服务器组成,前者负责执行JSP程序。JSP程序通过JDBC(Java DataBase Connectivity)接口和数据库服务器相连,并取得数据库中的数据。JSP程序也通过JDBC向数据库发送SQL命令,对数据库进行新增、删除和修改记录等操作,这一切都需要依靠JDBC提供的类与方法来完成。

§5.1.2 数据库的基本概念

§5.1.3 在SQL Server 2000中创建数据库

打开SQL Server 2000的“企业管理器”,在其中创建数据库jspdb 。

§5.1.4 JDBC简介

JDBC是Java数据库连接API,它由一些Java类和接口组成。在JSP中可以使用JDBC 实现对数据库中表记录的查询、修改、插入和删除等操作。JDBC技术在JSP开发中占有很重要的地位。经常使用JDBC进行如下操作:

(1)与一个数据库建立连接

(2)向已连接的数据库发送SQL语句

(3)处理SQL语句返回的结果

1.JSP与数据库连接的常用方式

应用程序必须首先与数据库建立连接。通常有四种连接方式,见书第176至177页。一般常用两种连接方式:JDBC-ODBC桥接器和纯Java数据库驱动程序。不同的连接方式对应着网页中不同的代码段。

2.JDBC中常用的类和接口

(1)DriverManager类:驱动管理类

DriverManager类对象负责管理JDBC驱动程序,使用DriverManager的方法getConnection( )可以生成Connection对象。

(2)Connection类:连接类

Connection类对象实现与数据源的连接,通过Connection类的createStatement( )方法可以生成Statement对象。

(3)Statement接口:语句接口

用于发送简单的SQL语句,实现SQL语句的执行。

(4)ResultSet接口:结果集接口

实现对数据的处理,维护记录指针,记录指针所指记录为当前记录。ResultSet对象用

于包含符合SQL语句中条件的所有记录,并且通过一套get方法提供了对这些记录中数据的访问。

(5)PreparedStatement接口:预处理语句接口

用于发送带有一个或多个输入参数(IN参数)的SQL语句,PreparedStatement对象代表一个预编译的SQL语句。执行速度较快,需要执行多次的语句应该创建为PreparedStatement对象。PreparedStatement对象中的SQL语句可具有若干个参数,执行语句前用setXXX方法来提供。

§5.1.5 DriverManager类

DriverManager类负责管理JDBC驱动程序,是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。

与DriverManager类相关的方法主要有Class.forName(String driver)和Static Connection getConnection(String url,String user,String password)。前者用于加载注册驱动程序,后者用于取得对数据库的连接。关于它们的用法,在下一节中马上介绍。

§5.1.6 使用JDBC-ODBC桥接器方式连接数据库

使用JDBC-ODBC桥接器方式与数据库建立连接,要经过:创建ODBC数据源――>建立JDBC-ODBC桥接器――>和ODBC数据源指定的数据库建立连接共3个步骤。

1.创建ODBC数据源:步骤见教材。操作入口:控制面板→管理工具→数据源(ODBC)→打开“ODBC数据源管理器”窗口,选择“系统DSN”选项卡→“添加”按钮→设置驱动程序:SQL Server→数据源名:jspdb,服务器:(local)

ID的Windows NT验证(W)。”

(D)。其它采用默认设置,不需要修改。创建后,测试一下数据源。

2.建立JDBC-ODBC桥接器

为了连接jspdb数据源的jspdb数据库,首先要建立一个JDBC-ODBC桥接器.这个建立过程是通过下面这句代码实现的:

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

//或Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).newInstance();

建立桥接器时可能发生异常,因此捕获这个异常。所以建立桥接器的标准语句是:

try{

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

//或Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).newInstance();

}

Catch(ClassNotFoundException e){

out.println(e)

}

3.与ODBC数据源指定的数据库建立连接

编写连接数据库的Java代码不会出现数据库的名称,只能出现数据源的名字。先使用java.sql包中的Connection类声明一个连接对象,然后再使用类DriverManager调用它的静态方法getConnection创建这个对象:

Connection con=DriverMagager.getConnection(“jdbc:odbc:数据源名字”,”login

name”,”password”);

其中login name 和password 是建立数据源时所使用的用户名和密码。

建立连接时应捕获SQLException异常:

try{

Connection con=DriverManager.getConnection(“jdbc:odbc:student”,”sa”,”sa”);

}

catch(SQLException e){

out.println(e);

}

这样就与数据源student建立了连接。应用程序一旦与某个数据源建立连接,就可以通过SQL语句与该数据源所指定的数据库中的表交互信息,如查询、修改、更新表中的记录。

下例中是一个简单的JSP页面,该页面中的Java程序片代码负责连接到数据源jspdb,查询该数据源中的数据库jspdb中的表trade的全部记录。表trade的字段设计和所有记录见书175页176页。

例1用JDBC-ODBC桥接器方式连接数据库,并显示表trade中的全部记录。

网页文件名example1.jsp

<%@ page contentType="text/html;charset=gb2312" import="java.sql.*" %>

<%

Connection con;

Statement sql;

ResultSet rs;

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

}

catch(ClassNotFoundException e){

out.println(e);

}

try {

con=DriverManager.getConnection("jdbc:odbc:jspdb","","");

sql=con.createStatement();

rs=sql.executeQuery("SELECT * FROM trade");

%>

<%

while(rs.next()){

%>

<% }%>

序列号

商品名称

类型
供应商
价格
数量
<%=rs.getObject("id")%>
<%=rs.getObject("tradename")%>
<%=rs.getObject("class")%>
<%=rs.getObject("provider")%>
<%=rs.getObject("price")%>
<%=rs.getObject("num")%>

<% con.close();

}

catch(SQLException e1) {}

%>

[案例11]访问SQL Server数据库

采用JDBC-ODBC桥接器方式连接数据库中的表trade。请同学们学习连接代码中参数的设置。

网页文件名jspodbc.jsp

<%@ page contentType="text/html;charset=gb2312"import="java.sql.*" %>

访问SQL Server数据库

访问SQL Server数据库


<% //下面程序段用于连接到数据库

//加载类sun.jdbc.odbc.JdbcOdbcDriver,并通过newInstance()方法实例化

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();

out.println("数据库驱动注册成功!
");

//设置url为ODBC中的jspdb

String url="jdbc:odbc:jspdb";

String user="sa";

String password="";

//建立与数据库的连接,将连接赋给conn

Connection conn= DriverManager.getConnection(url,user,password);

out.println("数据库连接成功!


");

//通过Connection类的createStatement()方法创建Statement实例,

//并赋给stmt,以方便操作数据库

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

//创建SQL查询字符串,以选择数据表trade中的记录

String sql="select * from trade";

//通过Statement类的executeQuery()方法创建ResultSet对象rs,以方便对数据表的操作

ResultSet rs=stmt.executeQuery(sql);

//移动到数据表的第一条记录

rs.first();

//下面的语句将显示记录中各字段的内容

%>

id:<%=rs.getObject("id")%>

商品名称:<%=rs.getObject("tradename")%>

供应商:<%=rs.getObject("provider")%>

类别:<%=rs.getObject("class")%>

单价:<%=rs.getObject("price")%>

数量:<%=rs.getObject("num")%>


数据库访问成功!

<%

rs.close(); //关闭rs

stmt.close(); //关闭stmt

conn.close(); //关闭conn

%>

数据库已关闭!

运行后效果如下图:

§5.1.7 通过本地协议纯Java驱动程序访问SQL Server 2000数据库

用Java语言编写的驱动程序称为纯Java驱动程序。简单地说,JDBC可以调用本地协议纯Java驱动程序和相应的数据库建立连接。

这种连接数据库方式要经过2个步骤:加载纯Java驱动程序->与指定的数据库连接。

1.加载纯Java驱动程序:

这种方式下不需要设置数据源,由于不依赖于ODBC,使得应用程序具有很好的移植性。目前,许多数据库厂商都提供了自己的相应的纯Java驱动程序。当使用纯Java驱动程序访问数据库时,必须保证:在连接数据库的JSP网页程序所驻留的计算机上安装相应DBMS 提供的纯Java驱动程序。比如,Tomcat服务器上的某个Web应用程序,想访问SQL Server 2000数据库管理系统所管理的数据库,则Tomcat服务器所驻留的计算机上必须要安装SQL Server2000提供的纯Java驱动程序。

我们这里,使用的是MS SQL Server 2000数据库管理系统。所以需要把该厂商提供的jar包:mssqlserver.jar、msutil.jar、msbase.jar挎贝到Java的jre\lib\ext中,或复制到Tomcat 服务器安装目录的文件夹的common\lib中。并且修改classpath环境变量:在classpath的当前值中,再添加3个jar包,即修改完classpath后,其值为:

classpath=.;%Java_home%\lib\dt.jar;%Java_home%\lib\tools.jar;%tomcat_home%\common\ lib\msbase.jar;%tomcat_home%\common\lib\msutil.jar;%tomcat_home%\common\lib\mssqlserve r.jar;%tomcat_home%\common\lib\servlet.jar; //红色部分就是新添加的部分。

除此之外,还有一件很重要的事,就是安装SQL Server 2000 SP3补丁。

SQL Server 2000 SP3补丁可以直接在网上下载,其文件名为chs_sql2ksp3.exe。下载完后,双击该文件安装SQL Server 2000 SP3补丁。

准备好了后,加载纯Java驱动程序://注意,这里的参数和ODBC桥接器方式不一样。

try{

Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance();

}

catch(Exception e){

out.println(e);

}

2.和指定的数据库建立连接

假设网页程序要与SQL Server 数据库服务器管理的数据库jspdb建立连接,而有权访问数据库jspdb的用户的id和密码分别是sa、空,那么建立连接的代码如下:

try{

String url=”jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jspdb”;

String user=”sa”;

String password=””;

con=DriverManager.getConnection(url,user,password);

}

catch(SQLException e){

out.println(e);

}

下面的例子是采用纯Java数据库驱动程序方式来实现上一个例题的例子。

例2使用纯Java数据库驱动方式显示表中的全部记录

网页文件名example2.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<%@ page import="java.util.*"%>

<%

Connection con;

Statement sql;

ResultSet rs;

try{

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

}

catch(Exception e){

out.print(e);

out.print("***************");out.print("
");

}

try{

String url;

url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jspdb";

String user="sa";

String password="";

con=DriverManager.getConnection(url,user,password);

sql=con.createStatement();

rs=sql.executeQuery("SELECT * FROM trade");

%>

<%

while(rs.next()){

%>

<% }%>

序列号

商品名称

类型
供应商
价格
数量
<%=rs.getObject("id")%>
<%=rs.getObject("tradename")%>
<%=rs.getObject("class")%>
<%=rs.getObject("provider")%>
<%=rs.getObject("price")%>
<%=rs.getObject("num")%>

<% con.close();

}

catch(SQLException e1){

out.println(e1);

}

%>

运行后,效果同例1完全一样。

[拓展案例18]通过本地协议纯Java驱动程序访问SQL Server 2000数据库

网页文件名jspSQLServer.jsp

<%@ page contentType="text/html;charset=gb2312"import="java.sql.*" %>

通过本地协议纯Java驱动程序访问SQL Server2000数据库

通过本地协议纯Java驱动程序访问SQL Server2000数据库


<% //下面程序段用于连接到数据库

//加载类com.microsoft.jdbc.sqlserver.SQLServerDriver,并通过newInstance()方法实例化

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

//设置url在本地主机1433端口上访问sql server数据库,数据库名为jspdb

String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jspdb";

//设置用户名和密码

String user="admin";

String password="";

//建立与数据库的连接,将连接赋给conn

Connection conn= DriverManager.getConnection(url,user,password);

//通过Connection类的createStatement()方法创建Statement实例,

//并赋给stmt,以方便操作数据库

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

//创建SQL查询字符串,以选择数据表trade中的记录

String sql="select * from trade";

//通过Statement类的executeQuery()方法创建ResultSet对象rs,以方便对数据表的操作

ResultSet rs=stmt.executeQuery(sql);

//移动到数据表的第一条记录

rs.first();

//下面的语句将显示记录中各字段的内容

%>

id:<%=rs.getObject("id")%>

商品名称:<%=rs.getObject("tradename")%>

供应商:<%=rs.getObject("provider")%>

类别:<%=rs.getObject("class")%>

单价:<%=rs.getObject("price")%>

数量:<%=rs.getObject("num")%>

<%

rs.close(); //关闭rs

stmt.close(); //关闭stmt

conn.close(); //关闭conn

%>

运行后,效果同案例11。

上述网页在运行中,如果出现关于用户admin的错误提示。则说明用户admin还没有添加到SQL Server 2000的登录角色中。下面就添加用户并设置其使用jspdb数据库的权限。

3.添加数据库用户admin

添加用户在SQL Server 2000的“企业管理器”中进行,具体见书第187至188页。§5.1.8 访问Microsoft Access 数据库

本小节是用Mircrosoft Access数据库代替SQL Server 2000数据库实现数据的管理。相应地在JSP网页中应该有哪些改动呢?

前面我们知道,可以采用2种方式实现JSP网页同SQL Server 2000数据库的连接:桥接器方式和纯Java驱动程序方式。这里,和Access相连,我们就只采用桥接器数据源的方式,另一种方式需要相应数据库Access的JDBC驱动的类包,就不涉及了。请同学们参看相应书籍。

首先,在当前目录c:\Tomcat 5.5\webapps\ROOT\jsptech\chapter5下再创建一个目录jspaccess,然后将网页和Access数据库都存放在这个目录下。

步骤如下

1.使用Microsoft Access程序创建一个数据库jspdb,并在这个jspdb数据库内创建一个表trade,内容同上几小节。

2.创建数据源jspaccess:

控制面板→管理工具→数据源(ODBC)→系统DSN→“添加”按钮→在“选择您想为其安装数据源的驱动程序(S)”中,即可以选“Driver do Microsoft Access (*.mdb),也可以选”Microsoft Access Driver (*.mdb)”→“完成”按钮→设置数据源名: jspaccess →点“选择”按钮,选择相连接的数据库c:\Tomcat 5.5\webapps\ROOT\jsptech\chapter5\jspaccess\jspdb.mdb→点“确定”。

3.修改JSP程序:

当数据库改为Access 后,只需要在网页中修改连接数据库的这句代码

DriverManager.getConnection(url,user,password)

中的参数,将url从

String url="jdbc:odbc:jspdb"

改为:

String url="jdbc:odbc:jspaccess"

也即修改数据源的名字就可以了。其它不需要做任何修改。

采用桥接器方式和SQL Server 2000相连接的案例11,改为采用桥接器方式和Access 相连接的拓展案例19。如下所示:

[拓展案例19]

网页文件名jspaccess.jsp

<%@ page contentType="text/html;charset=gb2312"import="java.sql.*" %>

访问Access数据库

访问Access数据库


<%

try{ //启动异常处理

//加载类sun.jdbc.odbc.JdbcOdbcDriver,并通过newInstance()方法实例化

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();

out.println("数据库驱动注册成功!
");

//设置url为ODBC中的jspdb

String url="jdbc:odbc:jspaccess";

String user="";

String password="";

//建立与数据库的连接,将连接赋给conn

Connection conn= DriverManager.getConnection(url,user,password);

out.println("数据库连接成功!


");

//通过Connection类的createStatement()方法创建Statement实例,

//并赋给stmt,以方便操作数据库

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

//创建SQL查询字符串,以选择数据表trade中的记录

String sql="select * from trade";

//通过Statement类的executeQuery()方法创建ResultSet对象rs,以方便对数据表的操作

ResultSet rs=stmt.executeQuery(sql);

//移动到数据表的第一条记录

rs.first();

//下面的语句将显示记录中各字段的内容

%>

id:<%=rs.getObject("id")%>

商品名称:<%=rs.getObject("tradename")%>

供应商:<%=rs.getObject("provider")%>

类别:<%=rs.getObject("class")%>

单价:<%=rs.getObject("price")%>

数量:<%=rs.getObject("num")%>


数据库访问成功!

<%

rs.close(); //关闭rs

stmt.close(); //关闭stmt

conn.close(); //关闭conn

}

catch(ClassNotFoundException e){

out.println("驱动程序类异常!
");

out.println(e.getMessage());

}

catch(SQLException e){

out.println("数据库连接或SQL查询异常!
");

out.println(e.getMessage());

}

catch(Exception e){

out.println("其他异常!
");

out.println(e.getMessage());

}

%>

运行后效果如书195页图5-29。

§5.1.9 关闭与数据库的连接

当程序不再使用与数据库的连接时,应使用Connection对象的close方法关闭与数据库

的连接。即如下语句:

conn.close(); //这里conn是连接对象(Connection对象)名并且也关闭其他对象,即:

rs.close(); //关闭rs

stmt.close(); //关闭stmt

当然,不关闭这些对象,程序运行也没有问题。就像try…..catch…..语句一样,这么做是为了避免麻烦,增强程序的健壮性。

§5.2 访问数据库

连接到数据库后,就可以对数据库进行各种操作。可以运行SQL语句来查询数据库表或者添加、修改其内容,或者新建、删除一个表。java.sql包中与数据库操作有关的类和接口主要有以下几个:

(1)Connection:连接类

(2)Statement:语句对象。由Connection类的createStatement()方法创建。

(3)PreparedStatement:预处理语句对象。由Connection类的prepareStatement()方法创建。用来发送带参数的SQL语句或基本SQL语句的语句对象

(4)CallableStatement:由Connection类的prepareCall()方法创建。用来调用数据库中的存储过程。

(5)ResultSet:结果集对象。用于获取和更新查询的结果。分为两类。一类是不带参数的结果集。一类是带有参数的结果集,参数的选取和含义如书201页表5-7表5-8所示。§5.2.1 SQL简介:

书196页至200页简单介绍了操作数据库表的语句。主要有:

(1)查询记录select:select 字段名1,字段名2,…… from 表名where 条件

(2)插入一条记录insert:insert into 表名value (值1,值2,….)

(3)删除若干条记录delete:deleter from 表名where 条件

(4)更新update的语句:update 表名set 字段名1=值1,字段名2=值2,……

(5)创建一个新表

(6)修改表的结构等

§5.2.2 Connection类:见书

§5.2.3 Statement类:见书

§5.2.4使用SQL语句对数据库进行操作

SQL提供了SELECT、INSERT、DELETE和UPDA TE四条语句分别对表进行查询、插入、删除和更新操作。

1.查询操作

对表的查询操作,是使用语句对象Statement对象(一般都是名为sql或stmt)的executeQuery(String select查询语句)方法完成。该方法发送Select语句到数据库,并将执行结果以ResultSet对象形式返回到程序中。

查询操作的过程如下面的代码段所示:

Connection con; //声明连接对象

Statement sql; //声明语句对象

ResultSet rs; //声明结果集对象

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //建立JDBC-ODBC桥接器}

catch(ClassNotFoundException e){

}

try{

con=DriverManager.getConnection("jdbc:odbc:student","zhouping","");//连接数据源

sql=con.createStatement(); //创建语句对象

rs=sql.executeQuery("SELECT * FROM students");

//执行查询语句,并将查询结果保存在结果集rs中

……

……这里,将查询所得的结果通过对结果集rs的操作,显示出来……

……

con.close();

}

catch(SQLException e1){

out.println(e1);

}

完整的网页代码见例1。

2.获取结果集的所有字段的值

ResultSet接口提供了一组get方法用于获取当前记录的字段的值。使用get方法可以按照字段名称或字段排列顺序号来获取字段的值。但表中的字段为不同类型时,要使用不同的get方法来取出值。比较常用的有:

字段为字符型:getString(int),getString(String)

字段为整数型:getInt(int),getInt(String)

字段为Double型:getDouble(int),getDouble(String)

将指定字段的值以Object类型返回:getObject(int),getObject(String)

等。

注:1. 无论字段是何种属性,总可以使用getString()方法返回字段值的串表示;

2.当使用getXxx方法查看一行记录时,不可以颠倒字段的顺序,例如:rs.getFloat(5); //错误

rs.getFloat(4); //错误

下面的代码段输出结果集rs中各条记录的内容。其中的next()方法是得到下一条记录,且如果不是结果集的结束位置时,返回true。

while(rs.next()){//将记录指针移到下一条记录并判断是否结束

out.print(rs.getString(1)+”,”); //输出第一个字段的值

out.print(rs.getString(2)+”,”); //输出第二个字段的值

例3 数据库基本查询

该网页进行数据库连接操作后,发送特殊的select查询语句:

rs=sql.executeQuery("SELECT * FROM trade where price>=10");

即查询单价price在10元及以上的商品的信息。

如下例所示,可以看出,该网页和example1.jsp的唯一区别就是上面这一句select 。网页文件名example3.jsp(只输出单价在10元以上的商品的记录(price>=10)) <%@ page contentType="text/html;charset=gb2312" import="java.sql.*" %>

<%

Connection con;

Statement sql;

ResultSet rs;

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

}

catch(ClassNotFoundException e){

out.println(e);

}

try {

con=DriverManager.getConnection("jdbc:odbc:jspdb","","");

sql=con.createStatement();

rs=sql.executeQuery("SELECT * FROM trade where price>=10"); %>

<%

while(rs.next()){

%>

<% }%>

序列号

商品名称

类型
供应商
价格
数量
<%=rs.getObject("id")%>
<%=rs.getObject("tradename")%>
<%=rs.getObject("class")%>
<%=rs.getObject("provider")%>
<%=rs.getObject("price")%>
<%=rs.getObject("num")%>

<% con.close();

}

catch(SQLException e1) {}

%>

3.记录的插入、删除和更新操作

这3种操作需要由Statement对象使用executeUpdate(string sql)方法来实现。该方法的返回值是int型,表示SQL语句影响的记录条数。

插入操作:(这里st是语句对象,前已定义)

String sqlstr=”insert into 表名values(字段值1,字段值2,……);

st.executeUpdate(sqlstr);

注意:这里插入一条记录是通过values(所有字段的值的排列,以逗号隔开)来实现的,则这些字段的值必须是一条记录的所有字段的值。比如trade表有6个字段,分别是id,tradename,class,provider,price,nam,则插入的也必须是6个值(少一个都不行),且分别的值须和6个字段的类型相对应。

例如,下面的例子中有语句:

String str1="INSERT INTO trade V ALUES('"+xuehao+"','"+name+"',"+xuefen+")";

sql.executeUpdate(str1); //执行添加操作。

更新操作:

String sqlstr=”update 表名set 被修改字段名=新字段值where 条件”;

st.executeUpdate(sqlstr);

删除操作:

String sqlstr=”delete from 表名where 条件”;

st.executeUpdate(sqlstr);

例4向表trade里添加一条新的记录

前台网页文件input4.jsp:建立表单form,添加6个文本框和一个按钮,文本框输入要添加的商品信息,按钮触发表单处理程序example4.jsp

后台网页文件insert.jsp,先显示表trade插入新记录之前的所有记录,然后取得表单传递的商品信息,进行处理后,插入到表trade中。

前台网页文件名input4.jsp

<%@ page contentType="text/html;charset=gb2312" import="java.sql.*" %>

数据库更新前记录:

<%!

public String getStr(String str)

{

try

{

String temp_p=str;

byte[] temp_t=temp_p.getBytes("ISO8859-1");

String temp=new String(temp_t);

return temp;

}

catch(Exception e)

{

}

return "";

}

%>

<%

Connection con;

Statement sql;

ResultSet rs;

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

}

catch(ClassNotFoundException e){

out.println(e);

}

try{

con=DriverManager.getConnection("jdbc:odbc:jspdb","","");

sql=con.createStatement();

rs=sql.executeQuery("select * from trade");

%>

<% while(rs.next()){

%>

<%

}

%>

序列号

商品名称

类型
供应商
价格
数量
<%=rs.getInt(1)%><%=rs.getString(2)%><%=rs.getString(3)%><%=rs.getString(4)%><%=rs.getObject(5)%><%=rs.getInt(6)%>

con.close();}

catch(SQLException e1) {

}

%>

添加新记录到数据库:

序列号:

商品名称:

类型:

供应商:

价格:

数量:

后台网页文件名insert.jsp

<%@ page contentType="text/html;charset=gb2312" import="java.sql.*" %>

<%!

public String getStr(String str)

{

try

{

String temp_p=str;

byte[] temp_t=temp_p.getBytes("ISO8859-1");

String temp=new String(temp_t);

return temp;

}

catch(Exception e)

{

}

return "";

}

%>

<%

Connection con;

Statement sql;

ResultSet rs;

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

}

catch(ClassNotFoundException e){

out.println(e);

}

con=DriverManager.getConnection("jdbc:odbc:jspdb","","");

sql=con.createStatement();

String id=request.getParameter("id"); //获取提交的序列号

if(id==null){

id="0";

}

String name_s=request.getParameter("name"); //获取提交的商品名称

String name=getStr(name_s);

String category_s=request.getParameter("category"); //获取提交的分类:

String category=getStr(category_s);

String productor_s=request.getParameter("productor"); //获取提交的供应商:

String productor=getStr(productor_s);

String price=request.getParameter("price"); //获取提交的单价:

if(price==null){

price="0";

}

String number=request.getParameter("number"); //获取提交的数量:

if(number==null){

number="0";

}

String str1="INSERT INTO trade V ALUES("+id+",'"+name+"','"+category+"','"+productor+"',"+price+","+number+")";

sql.executeUpdate(str1); //执行添加操作。

%>

添加新记录后数据库:

<%

rs=sql.executeQuery("SELECT * FROM trade ORDER BY id");

%>

<% while(rs.next()){

%>

<%

}

%>

序列号

商品名称

类型
供应商
价格
数量
<%=rs.getInt(1)%><%=rs.getString(2)%><%=rs.getString(3)%><%=rs.getString(4)%><%=rs.getObject(5)%><%=rs.getInt(6)%>

<%

con.close();

%>

运行后,效果如左图。点击“提交”后,效果如右图:

本例中,有一个用于处理汉化问题的方法:public String getStr(String str)。如果从前台网页接收到的字符是汉字,就会出现汉化处理问题。这此,必须进行相应的处理,才能被数据库表接收,否则会出现汇编错误。当然这个方法,也可以写在一个jsp文件中,然后在需要它的网页用include指令引起来。

例5删除记录

程序的编写类似于例5,只是select语句按相应的要求进行改动。如改为:

String str1=”delete from student where number=100";

sql.execute(str1);

§5.2.5 [案例12]一个完整的数据库表的操作:

本例完成操作:新建表users(name char(12),pwd char(8))、插入一条记录(“admin”,”pass”)到表中、查询表的第一条记录。请同学们找出这3个操作所对应的语句。

网页文件名createtable.jsp

<%@ page contentType="text/html;charset=gb2312"import="java.sql.*" %>

通过JSP创建用户信息表

通过JSP创建用户信息表


<%

try{ //启动异常处理

//加载类com.microsoft.jdbc.sqlserver.SQLServerDriver,并通过newInstance()方法实例化

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

//设置url在本地主机1433端口上访问sql server数据库,数据库名为jspdb

String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jspdb";

//设置用户名和密码

String user="admin";

String password="";

//建立与数据库的连接,将连接赋给conn

Connection conn= DriverManager.getConnection(url,user,password);

//通过Connection类的createStatement()方法创建Statement实例,

//并赋给stmt,以方便操作数据库

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

//创建SQL字符串,用于在创建数据表

String sql="CREATE TABLE users(name char(12),pwd char(8))";

//执行SQL命令

相关文档