哈哈,搞定!![
]
以前我也碰到过这个问题,当时不知怎么又好了,现在看到你在这里提出,我又正好有空,
花了点时间查了查原因,下面是我的结果:
(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
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>