~!~~!~~~!~~~~~! Jsp 修改 SQL 中已有的数据出错!~~~~~~(高分请教!up有分啊!) (100分)

  • 主题发起人 unclymouse
  • 开始时间
U

unclymouse

Unregistered / Unconfirmed
GUEST, unregistred user!
1:我的SQL是默认安装到C盘的。
2:我用的是jakarta-tomcat-4.0.1-b1.exe(是apache和TOMCAT集成的)装在c盘。
3:我在SQL里建的库是BookDB表是Book
向数据库里更新数据分为几步的:1,先在页面输出所有的数据,并提供一个输入框供
查询数据,(这一步出来了)2:查询到这个数据后,它的所有资料以输入框形式显示
在页面上供你修改,没有查询到的话也会提示(这一步出来了)3:修改资料后点保存,
就会出错:javax.servlet.ServletException: [Microsoft][ODBC SQL Server Driver]
无效的描述符索引
现在大家帮我看看下面的那个很长的程序,谢谢~~~~~
 
你有没有把SQL2000的驱动程序放到Tomcat下的bin目录里?
 
你们都说jdbc包中有mssqlserver.jar,msutil.jar,msbase.jar 3个jar包
但我在http://www.microsoft.com/china/sql/downloads/2000/jdbc.asp
下的mssqlserver1.tar解压后是install.ksh、read.me、EULA.txt、msjdbc.tar
四个文件!怎么回事啊???
请指点~~~
 
是你下载错了吧?[8D]
 
寻找:
你去看看噻,要不你告诉我地址
谢谢
 
你设置DSN???
那你就用jdbc-odbc桥连接。否则就不用设置DSN
 
test this, it's an exe file
http://download.microsoft.com/download/3/0/f/30ff65d3-a84b-4b8a-a570-27366b2271d8/setup.exe
 
if itdo
esn't work, search the three files(mssqlserver.jar,
msutil.jar,msbase.jar ) under the install directory and move them to
tomcat's 'lib' directory
 
算了~帮我解决下面这个问题:
1:我的程序能够运行,
2:但是一点“修改”按扭:分为2种情况:(1)如果数据库里有要修改的数据就出错为“javax.servlet.ServletException: [Microsoft][ODBC SQL Server Driver]无效的描述符索引”;(2)如果数据库里没有要修改的数据就通得过~~
程序如下:
<%@page contentType="text/html;charset=GB2312"
import="java.sql.*"%>
<%!
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
public void jspInit()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

//加载驱动程序类
con=DriverManager.getConnection("jdbc:eek:dbc:BookDB");
//建立Connection(数据库链接)对象,并设置由cnnDB对象变量引用。
stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
//建立Statement对象,并设置建立之ResultSet对象光标可前后移动。
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
public void jspDestroy()
{
try
{
rs.close();
//关闭ResultSet对象
stmt.close();
//关闭Statement
con.close();
//关闭Connection对象
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
%>
<html>
<head>
<title>整条记录的修改</title>
</head>
<body>
<center>
整条记录的修改
</center>
<hr>
<%
String BID=request.getParameter("tbxBookID");
String HID=request.getParameter("hidRecID");
if(BID==null)
{
rs=stmt.executeQuery("SELECT * FROM Book");

%>
<table bgcolor=DodgerBlue>
<tr bgcolor=SkyBlue>
<TD><B>书籍编号</B></TD><TD><B>署 名</B></TD>
<TD><B>作 者</B></TD>
</tr>
<%
while(rs.next())
{
%>
<TR bgcolor=LightGoldenrodYellow>
<td><b><%=rs.getString("BookID")%></b></td>
<td><b><%=rs.getString("Title")%></b></td>
<td><b><%=rs.getString("Author")%></b></td>
</TR>
<%
}
%>
</table><p></p>
<P>请输入要查询的数据:</P>
<form action="bianji.jsp" method="POST" id="form2" name="form2">
<input type="text" name="tbxBookID">
<input type="submit" value="进行修改" name="submit1">
</form>

<%
}
else
{
String strSQL="SELECT * FROM Book WHERE BookID='"+BID+"'";

rs=stmt.executeQuery(strSQL);
if(!rs.next())
{
%>
<center>
<p>找不到书号为<%=BID%>的书籍</p>
<P><A href=bianji.jsp>还要进行修改</A></P>
</center>
<%
}
else
{
%>
<form action="bianji.jsp" method=post>
<table>
<tr COLSPAN=2 align=center>
<tr>
请在窗体中进行数据的修改
</tr>
<tr><td>书籍编号</td>
<td>
<input type="text" name=tbxBookID
value="<%=rs.getString("BookID")%>">
</td>
</tr>
<tr>
<td>书 名</td>
<td>
<input type="text" name=tbxTitle
value="<%=rs.getString("Title")%>">
</td>
</tr>
<tr><td>作 者</td>
<td>
<input type="text" name=tbxAuthor
value="<%=rs.getString("Author")%>">
</td>
</tr>
</table>
<input type="hidden" name=hidRecID
value=<%=rs.getInt("ID")%>><p></p>
<input type="submit" value="进行修改" name=submit3>
<a href=bianji.jsp>放弃修改</a>

</form>
<%
}
String strDEL="DELETE * FROM Book WHERE ID ="+
HID;
stmt.executeUpdate(strDEL);
strSQL="INSERT INTO Book(BookID,Title,"+
"Author)Values('"+
request.getParameter("tbxBookID")+"','"+
request.getParameter("tbxTitle")+"','"+
request.getParameter("tbxAuthor")+"')";
stmt.executeUpdate(strSQL);
strSQL="SELECT * FROM Book WHERE"+
"BookID='"+BID+"'";
rs=stmt.executeQuery(strSQL);
rs.next();
%>
<%=BID%>
<p>修改后的数据如下:</p>
<table width="75%" border="1">
<tr>
<td width="48%"><b>书籍标号</b>&amp;nbsp;</td>
<td width="52%"><b>书 号</b>&amp;nbsp;</td>
</tr>
<tr>
<td><b><%=rs.getString("ID")%></b>&amp;nbsp;</td>
<td><b><%=rs.getString("BookID")%></b>&amp;nbsp;</td>
</tr>
<tr>
<td><b>书 名</b>&amp;nbsp;</td>
<td><b>作 者</b>&amp;nbsp;</td>
</tr>
<tr>
<td><b><%=rs.getString("Title")%></b>&amp;nbsp;</td>
<td><b><%=rs.getString("Author")%></b>&amp;nbsp;</td>
</tr>
</table>
<p><a href=bianji.jsp>还要进行修改</a></p>
<%
}
%>
</body>
</html>
1:我的数据库连接上了的,我能够查找数据库并将记录输出;
2:我的程序能够运行,
3:但是只要点击“修改”按扭:分为2种情况:(1)如果数据库里存在要修改的数据就出错为“javax.servlet.ServletException: [Microsoft][ODBC SQL Server Driver]无效的描述符索引”;(2)如果数据库里没有存在修改的数据就能够运行~~

 
可能性两种,个人认为:
1.是不是你的表中,没有标识id啊,(你是按标识查询后,修改的吧)
2,有可能数据的类型不匹配.比如你提交的值是字符串,而表中不是字符串
 
hehe,改用ODBC啦
test it:
do not use "select * ..." but "select ID, BookID ..."
maybe it will be useful.
 
TO无雨 我的表中有ID,除了ID是整型外其他字段都是字符型
TO安稼 什么改用ODBC啊?我的本来就是ODBC啊,
 
你试一下,调用查询的字段跟你的提交字段的类型要一样了.
 
ID是整型应该这样吧
String strSQL="SELECT * FROM Book WHERE BookID="+BID;
 
TO无雨 我调用查询的字段跟交字段的类型一样.
TOpowerjet 用你的语句后程序完全运行不了出错:
javax.servlet.ServletException: [Microsoft][ODBC SQL Server Driver][SQL Server]列名 'a' 无效。
 
呜呜~~~现在又出现这种情况了:
1:我的数据库连接上了的,我能够查找数据库并将记录输出;
但输入要修改的数据点“修改”就出错:
type Status report
message /Tomcat 4/webapps/ROOT/bianji.jsp
description The requested resource (/Tomcat 4/webapps/ROOT/bianji.jsp) is not available.
 
哈哈,搞定!![:D]
以前我也碰到过这个问题,当时不知怎么又好了,现在看到你在这里提出,我又正好有空,
花了点时间查了查原因,下面是我的结果:
(jsp:101-127)你用的select * 把要修改的book记录的各字段值写到若干input中,注意,
这时选出的字段顺序应当是ID,bookID,Title,Author,而你在显示时候的顺序确是:bookID,
Title,Author,ID,我猜你的库表结构中,title或author字段至少有一个是varchar的,所
以ODBC会报Invalid Index Descriptor的错
另外你的程序还有几个小问题,想jsp:136,我觉得应当对HID也做个null的判断,而jsp:145
SQL的where后面要加一个空格,我调试通过的代码如下(有可能某些设置被我改过,如果在
你的机子上运行不了,请注意)
<%@page contentType="text/html;charset=GB2312"%>
<%@page import="java.sql.*"%>
<%!
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
public void jspInit()
{
//to connect database
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

//加载驱动程序类
con=DriverManager.getConnection("jdbc:eek:dbc:BookDB");
//建立Connection(数据库链接)对象,并设置由cnnDB对象变量引用。
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
//建立Statement对象,并设置建立之ResultSet对象光标可前后移动。
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
public void jspDestroy()
{
//to close the database
try
{
rs.close();
//关闭ResultSet对象
stmt.close();
//关闭Statement
con.close();
//关闭Connection对象
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
%>
<html>
<head>
<title>整条记录的修改</title>
</head>
<body>
<center>
整条记录的修改
</center>
<hr>
<%
String BID=request.getParameter("tbxBookID");
String HID=request.getParameter("hidRecID");
String strSQL="";
if(BID==null)
{
rs=stmt.executeQuery("SELECT * FROM Book");
%>
<table bgcolor=DodgerBlue>
<tr bgcolor=SkyBlue>
<TD><B>书籍编号</B></TD><TD><B>署 名</B></TD>
<TD><B>作 者</B></TD>
</tr>
<%
while(rs.next())
{
%>
<TR bgcolor=LightGoldenrodYellow>
<td><b><%=rs.getString("BookID")%></b></td>
<td><b><%=rs.getString("Title")%></b></td>
<td><b><%=rs.getString("Author")%></b></td>
</TR>
<%
}
%>
</table><p></p>
<P>请输入要查询的数据:</P>
<form action="bianji.jsp" method="POST" id="form2" name="form2">
<input type="text" name="tbxBookID">
<input type="submit" value="进行修改" name="submit1">
</form>
<%
}
else
{
strSQL="SELECT ID, BookID, Title, Author FROM Book WHERE BookID="+BID;

rs=stmt.executeQuery(strSQL);
if(!rs.next())
{
%>
<center>
<p>找不到书号为<%=BID%>的书籍</p>
<P><A href=bianji.jsp>还要进行修改</A></P>
</center>
<%
}
else
{
%>
<form action="bianji.jsp" method=post>
<input type="hidden" name=hidRecID value=<%=rs.getInt("ID")%>><p></p>
<table>
<tr COLSPAN=2 align=center>
<tr>请在窗体中进行数据的修改</tr>
<tr><td>书籍编号</td>
<td>
<input type="text" name=tbxBookID value="<%=rs.getString("BookID")%>">
</td>
</tr>
<tr><td>书 名</td>
<td><input type="text" name=tbxTitle value="<%=rs.getString("Title")%>"></td>
</tr><tr><td>作 者</td>
<td><input type="text" name=tbxAuthor value="<%=rs.getString("Author")%>"></td>
</tr>
</table>
<input type="submit" value="进行修改" name=submit3>
<a href="bianji.jsp">放弃修改</a>
</form>
<%
}
}
if (HID!=null)
{
String strDEL="DELETE FROM Book WHERE ID ="+ HID;
stmt.executeUpdate(strDEL);
strSQL="INSERT INTO Book(BookID,Title,"+
"Author)Values('"+
request.getParameter("tbxBookID")+"','"+
request.getParameter("tbxTitle")+"','"+
request.getParameter("tbxAuthor")+"')";
stmt.executeUpdate(strSQL);
strSQL="SELECT * FROM Book WHERE BookID="+BID+"";
rs=stmt.executeQuery(strSQL);
rs.next();
%>
<p>修改后的数据如下:</p>
<table width="75%" border="1">
<tr>
<td width="48%"><b>书籍标号</b> </td>
<td width="52%"><b>书 号</b> </td>
</tr>
<tr>
<td><b><%=rs.getString("ID")%></b> </td>
<td><b><%=rs.getString("BookID")%></b> </td>
</tr>
<tr>
<td><b>书 名</b> </td>
<td><b>作 者</b> </td>
</tr>
<tr>
<td><b><%=rs.getString("Title")%></b> </td>
<td><b><%=rs.getString("Author")%></b> </td>
</tr>
</table>
<p><a href=bianji.jsp>还要进行修改</a></p>
<%
}
%>
</body>
</html>
 
先不管怎么样我真诚的谢谢mor!谢谢了各位DFW的朋友!!
1:我的ID是INT型,其他都是char型
2:你的程序在我的机子上运行:数据库连接上了的,能够查找数据库并将记录输出;
但输入要修改的数据点“修改”就出错:javax.servlet.ServletException:
[Microsoft][ODBC SQL Server Driver][SQL Server]列名 'ss' 无效。
 
我把你的那段程序拷下来运行了一下,的确会报“无效的描述符索引”,在改变取值顺序后就OK了,
至于你说的——列名 '??' 无效,我估计是你的SQL语句有问题,你可以用System.out.println把每
条SQL都打出来看看,慢慢调试吧,有点耐心[:)]
 
顶部