问大家一个jsp操作数据库的问题
我刚学不久,我想在一个jsp页面里写代码,要从两个表里读数据,然后计算,再写到一个表里。
不过我弄好的时候发现出错,提示为object has been closed。大家有什么办法?不想用javabean
大家能想想办法帮我吗?
问题点数:60、回复次数:22Top
1 楼panpannana2(潘潘娜娜)回复于 2005-06-01 22:55:20 得分 20
代码有么 贴出来看看
lz是不是在两个表里读数据时只用了一个连接?
这样是可能造成错误的Top
2 楼sleet96(菜菜)回复于 2005-06-02 10:57:05 得分 0
object has been closed
看起来大概是数据库打开方面的问题Top
3 楼wangminmm(爱因思念)回复于 2005-06-02 12:30:33 得分 0
我是建立一个数据库连接,然后用这个连接查询数据库两次,然后写一次,就产生了object has been
closed.
Top
4 楼yxhzj(余华[学习J2EE中])回复于 2005-06-02 12:39:55 得分 0
很明显,某个对象被你关了,没有代码,怎么说Top
5 楼wangminmm(爱因思念)回复于 2005-06-02 12:40:30 得分 0
我分别建立3次连接,用来数据库操作还是不行,提示我object has been closed
真晕,不知道该怎么办,我第三次的写操作要用到前面两次读出来的数据
请问有解决的办法吗?Top
6 楼wangminmm(爱因思念)回复于 2005-06-02 12:41:39 得分 0
<%
String[] dingdan=new String[4];
int hwnum;
int[] chpinfo = new int[4];
int[] yulinf = new int[4];
int[] mid = new int[4];
int i=0,min=0,temp=0;
Connection con;
out.clearBuffer();
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");
Statement st = con.createStatement();
String dnum = request.getParameter("ddnum");
// dnum = new String(dnum.getBytes("ISO-8859-1"),"gb2312");
String pdt = request.getParameter("product");
// pdt = new String(pdt.getBytes("ISO-8859-1"),"gb2312");
ResultSet rs = st.executeQuery("select * from 订单表 where 订单号='2005'");//"+dnum+"
// dingdan = new String[4];
while(rs.next())
{
dingdan[0]=rs.getString("订单号");
dingdan[1]=rs.getString("货物数量");
dingdan[2]=rs.getString("订货单位");
dingdan[3]=rs.getString("提货日期");
}
hwnum=Integer.parseInt(dingdan[1]);
ResultSet rs1 = st.executeQuery("select * from 产品信息 where 产品='电脑桌'");//"+dnum+"
while(rs1.next())
{
chpinfo[0]=Integer.parseInt(rs1.getString("玻璃"));
chpinfo[1]=Integer.parseInt(rs1.getString("红木"));
chpinfo[2]=Integer.parseInt(rs1.getString("油漆"));
chpinfo[3]=Integer.parseInt(rs1.getString("钢铁"));
}
ResultSet rs2= st.executeQuery("select * from 原料");//"+dnum+"
while(rs2.next())
{
yulinf[0]=Integer.parseInt(rs1.getString("玻璃"));
yulinf[1]=Integer.parseInt(rs1.getString("红木"));
yulinf[2]=Integer.parseInt(rs1.getString("油漆"));
yulinf[3]=Integer.parseInt(rs1.getString("钢铁"));
}
for(i=0;i<=3;i++)
mid[i]=yulinf[i]/chpinfo[i];
for(i=0;i<=3;i++){
min=mid[0];
if(mid[i]<min)
min=mid[i];
}
rs.close();
rs1.close();
rs2.close();
st.close();
con.close();
%>Top
7 楼wangminmm(爱因思念)回复于 2005-06-02 12:42:03 得分 0
请大家指点指点小弟Top
8 楼jxdn_yang((我不想做IT了))回复于 2005-06-02 12:47:16 得分 0
把con = DriverManager.getConnection再加ResultSet rs2= st.executeQuery("select * from 原料");//"+dnum+"前看看
Top
9 楼wangminmm(爱因思念)回复于 2005-06-02 12:51:09 得分 0
忘记了,我加了,还是一样的
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%
String[] dingdan=new String[4];
int hwnum;
int[] chpinfo = new int[4];
int[] yulinf = new int[4];
int[] mid = new int[4];
int i=0,min=0,temp=0;
Connection con;
out.clearBuffer();
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");
Statement st = con.createStatement();
String dnum = request.getParameter("ddnum");
// dnum = new String(dnum.getBytes("ISO-8859-1"),"gb2312");
String pdt = request.getParameter("product");
// pdt = new String(pdt.getBytes("ISO-8859-1"),"gb2312");
ResultSet rs = st.executeQuery("select * from 订单表 where 订单号='2005'");//"+dnum+"
// dingdan = new String[4];
while(rs.next())
{
dingdan[0]=rs.getString("订单号");
dingdan[1]=rs.getString("货物数量");
dingdan[2]=rs.getString("订货单位");
dingdan[3]=rs.getString("提货日期");
}
hwnum=Integer.parseInt(dingdan[1]);
rs.close();
st.close();
con.close();
Connection con1;
out.clearBuffer();
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
con1 = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");
Statement st1 = con.createStatement();
ResultSet rs1 = st1.executeQuery("select * from 产品信息 where 产品='电脑桌'");//"+dnum+"
while(rs1.next())
{
chpinfo[0]=Integer.parseInt(rs1.getString("玻璃"));
chpinfo[1]=Integer.parseInt(rs1.getString("红木"));
chpinfo[2]=Integer.parseInt(rs1.getString("油漆"));
chpinfo[3]=Integer.parseInt(rs1.getString("钢铁"));
}
rs1.close();
st1.close();
con1.close();
Connection con2;
out.clearBuffer();
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
con2 = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");
Statement st2 = con.createStatement();
ResultSet rs2= st2.executeQuery("select * from 原料");//"+dnum+"
while(rs2.next())
{
yulinf[0]=Integer.parseInt(rs1.getString("玻璃"));
yulinf[1]=Integer.parseInt(rs1.getString("红木"));
yulinf[2]=Integer.parseInt(rs1.getString("油漆"));
yulinf[3]=Integer.parseInt(rs1.getString("钢铁"));
}
rs2.close();
st2.close();
con2.close();
for(i=0;i<=3;i++)
mid[i]=yulinf[i]/chpinfo[i];
for(i=0;i<=3;i++){
min=mid[0];
if(mid[i]<min)
min=mid[i];
}
%>
这样还是不成Top
10 楼wangminmm(爱因思念)回复于 2005-06-02 12:51:41 得分 0
郁闷死了Top
11 楼jack813()回复于 2005-06-02 12:54:21 得分 0
getConnection后面是不是要加()?
如果每次查询后执行
st.close();
con.close();
再次查询时再重新连接呢?Top
12 楼wangminmm(爱因思念)回复于 2005-06-02 12:57:51 得分 0
我加了呀,第二个代码我也是这样做的,建立一次连接再断开,再建立再断开,但是还是不行
郁闷啊Top
13 楼jack813()回复于 2005-06-02 13:24:39 得分 0
注释掉后面的两次连接,先进行只连接一次数据库的测试。Top
14 楼yxhzj(余华[学习J2EE中])回复于 2005-06-02 13:30:46 得分 20
呵呵
好象有点问题吧
第一次:
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");
Statement st = con.createStatement();
用了
就被你close
第二次:
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");
Statement st1 = con.createStatement();
....这里是不是有点问题
conn不是被你关了吗
第三次:
("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
con2 = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");
Statement st2 = con.createStatement();
和第二次一样的低级错误
Top
15 楼sleet96(菜菜)回复于 2005-06-02 13:52:25 得分 5
根据楼主最后的代码来看:
con分明在第一次使用之后已经close,
而后面定义了con1,con2,却在使用conTop
16 楼Maple99(Maple)回复于 2005-06-02 13:56:34 得分 5
Statement st2 = con.createStatement();
為 Statement st2 = con2.createStatement();
細節問題Top
17 楼wangminmm(爱因思念)回复于 2005-06-02 14:10:52 得分 0
好的我再试试,这里是我疏忽了Top
18 楼wangminmm(爱因思念)回复于 2005-06-02 14:15:10 得分 0
还是不行啊,我要疯掉了
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%
String[] dingdan=new String[4];
int hwnum;
int[] chpinfo = new int[4];
int[] yulinf = new int[4];
int[] mid = new int[4];
int i=0,min=0,temp=0;
Connection con;
out.clearBuffer();
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");
Statement st = con.createStatement();
String dnum = request.getParameter("ddnum");
// dnum = new String(dnum.getBytes("ISO-8859-1"),"gb2312");
String pdt = request.getParameter("product");
// pdt = new String(pdt.getBytes("ISO-8859-1"),"gb2312");
ResultSet rs = st.executeQuery("select * from 订单表 where 订单号='2005'");//"+dnum+"
// dingdan = new String[4];
while(rs.next())
{
dingdan[0]=rs.getString("订单号");
dingdan[1]=rs.getString("货物数量");
dingdan[2]=rs.getString("订货单位");
dingdan[3]=rs.getString("提货日期");
}
hwnum=Integer.parseInt(dingdan[1]);
rs.close();
st.close();
con.close();
Connection con1;
out.clearBuffer();
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
con1 = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");
Statement st1 = con1.createStatement();
ResultSet rs1 = st1.executeQuery("select * from 产品信息 where 产品='电脑桌'");//"+dnum+"
while(rs1.next())
{
chpinfo[0]=Integer.parseInt(rs1.getString("玻璃"));
chpinfo[1]=Integer.parseInt(rs1.getString("红木"));
chpinfo[2]=Integer.parseInt(rs1.getString("油漆"));
chpinfo[3]=Integer.parseInt(rs1.getString("钢铁"));
}
rs1.close();
st1.close();
con1.close();
Connection con2;
out.clearBuffer();
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
con2 = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");
Statement st2 = con2.createStatement();
ResultSet rs2= st2.executeQuery("select * from 原料");//"+dnum+"
while(rs2.next())
{
yulinf[0]=Integer.parseInt(rs1.getString("玻璃"));
yulinf[1]=Integer.parseInt(rs1.getString("红木"));
yulinf[2]=Integer.parseInt(rs1.getString("油漆"));
yulinf[3]=Integer.parseInt(rs1.getString("钢铁"));
}
rs2.close();
st2.close();
con2.close();
for(i=0;i<=3;i++)
mid[i]=yulinf[i]/chpinfo[i];
for(i=0;i<=3;i++){
min=mid[0];
if(mid[i]<min)
min=mid[i];
}
%>Top
19 楼wangminmm(爱因思念)回复于 2005-06-02 14:16:56 得分 0
是不是jsp就不支持这样做的呢,大家能给我个别的办法吗?Top
20 楼yxhzj(余华[学习J2EE中])回复于 2005-06-02 14:25:03 得分 0
错误代码呢Top
21 楼wangminmm(爱因思念)回复于 2005-06-02 14:34:00 得分 0
object has been closedTop
22 楼yxhzj(余华[学习J2EE中])回复于 2005-06-02 14:45:20 得分 10
最后面一个连接
while(rs2.next())
{
yulinf[0]=Integer.parseInt(rs1.getString("玻璃"));
yulinf[1]=Integer.parseInt(rs1.getString("红木"));
yulinf[2]=Integer.parseInt(rs1.getString("油漆"));
yulinf[3]=Integer.parseInt(rs1.getString("钢铁"));
}
好象rs1被你关了呀
怎么还用
改改试试
还有,先这样测试下
先不要关
到最后面再关
看看行不行Top




