代码如下:<%@ page contentType="text/html;charset=gb2312"%>   
<%@ include file="conn.jsp"%> 
<html> 
<head>
<title>first jsp</title>
</head>  
<body>   
<%
sql="select id from info";
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);   
rs=stmt.executeQuery(sql); rs.moveToInsertRow();
         rs.updateInt("id", 110);
         rs.insertRow();         rs.close();
         stmt.close();
         conn.close();%>
</body>   
</html> 
死活不成功,报错
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause javax.servlet.ServletException: com.microsoft.sqlserver.jdbc.SQLServerException: 游标是 READ ONLY 的。
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.lsj.counter_jsp._jspService(counter_jsp.java:120)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause com.microsoft.sqlserver.jdbc.SQLServerException: 游标是 READ ONLY 的。
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:246)
com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:83)
com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:39)
com.microsoft.sqlserver.jdbc.SQLServerResultSet.doInsertRowRPC(SQLServerResultSet.java:3967)
com.microsoft.sqlserver.jdbc.SQLServerResultSet.access$100(SQLServerResultSet.java:16)
com.microsoft.sqlserver.jdbc.SQLServerResultSet$1InsertRowRPC.doExecute(SQLServerResultSet.java:3857)
com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
com.microsoft.sqlserver.jdbc.SQLServerResultSet.insertRow(SQLServerResultSet.java:3922)
org.apache.jsp.lsj.counter_jsp._jspService(counter_jsp.java:101)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

解决方案 »

  1.   

    对了,数据库是mssql server 2000conn.jsp
    内容如下<%@ page import="java.sql.*"%> 
    <%
    String url="jdbc:sqlserver://localhost:1433;databaseName=tempdb;user=sa;password=sa";
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    String sql = null; Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
    conn= DriverManager.getConnection(url);
    %>   
      

  2.   

    你先看看 数据库链接上了么?
    url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=tempdb;user=sa;password=sa"sqlserver 2000  url 不正确
      

  3.   

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
    改成
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();你写的这些是 sqlservler 2005 的 driver 跟 url 要换成 2000的 
      

  4.   

     rs.moveToInsertRow();
             rs.updateInt("id", 110);
             rs.insertRow();这句应当改成
    while(rs.next())
    {
     rs.updateInt("id", 110);
             rs.insertRow();}就可以了。
      

  5.   

    你怎么不按套路出牌~~~~~~~~~
    你的语句结构不是很清晰,
    如果你要查询数据库,
    你要做的就是
    1.加载驱动
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
    2.连接数据库
    con=DriverManager.getConnection(url, username, password);
    3.获得Statement
    stmt=con.createStatement();
    4.查询并获得结果
    rs=stmt.executeQuery(sql);必须将上面的语句放在try中,抛出异常,
    同时最好将上面的1和2分别抛出一下异常:    try{
        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
        }catch(java.lang.ClassNotFoundException e){
            out.print("Contect to DateBase error:"+e.getMessage());
        }    try{
        con=DriverManager.getConnection(url, Auser, Apassword);
        }catch(SQLException e){
            out.print(e.toString());
        }剩下的具体内容可以上网查一下,非常全的;
      

  6.   

    String url="jdbc:sqlserver://localhost:1433;databaseName=tempdb;user=sa;password=sa";貌似这里有问题
     url="jdbc:sqlserver://localhost:1433;databaseName=tempdb",
     user="sa",password="sa"
      

  7.   

    你try了吗?没有加异常的抓取
      

  8.   

    晕啊,各位批评得是,
    我这个是测试,所以没有
    try {} catch ..另外,回2楼网友,我的连接字符串是对的,因为jdbc的版本问题,所以和你提供的有差别
    不好意思啊,才看到大家的回复。
      

  9.   

    还有,我是为了使问题精简,所以才把程序压缩,放到关键点了。其实,错误提示里面已经放出错误了。com.microsoft.sqlserver.jdbc.SQLServerException: 游标是 READ ONLY 的。 所以不能update,不能insert
    但是,我已经
    stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);  有心人再帮看看吧。
    谢谢先。