《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.*" %>
<% //下面程序段用于连接到数据库
//加载类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.*" %>
<% //下面程序段用于连接到数据库
//加载类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.*" %>
<%
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) {
}
%>
添加新记录到数据库: