stmt.executeUpdate("INSERT INTO pmailbox(id,reid,senduid,sendname,title,mailt
ext,sdate,newmail) VALUES(id 的值,'"+reid+"', '"+uname+"','"+sendname+"','"+ti
tle+"','"+mailtext+"',GETDATE(),0)");
该数据表中的列id时用来记录表中的记录数 如将插入的是第三条记录id 的值应为三 如将插入的是第10条记录“id 的值”应为10
  如将插入的是第100条记录“id 的值”应为100
也就是“id 的值”这一变量要表示将插入的记录是第几条啊
我曾经尝试
ResultSet rs=stmt.executeQuery("select count(*) as ccount from pmailbox");
rs.next();
int intRow=rs.getInt("ccount")+1;
stmt.executeUpdate("INSERT INTO pmailbox(id,reid,senduid,sendname,title,mailte
xt,sdate,newmail) VALUES(intRow,'"+reid+"', '"+uname+"','"+sendname+"','"+titl
e+"','"+mailtext+"',GETDATE(),0)");出现如下错误啊
root cause java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]在此上下文中不允许使用 'intRow'。此处只允许使用常量、表达式或变量。不允许使用列名。intRow怎么变成列名?????????
高手指教oracle好像用个nextval之类的东西处理“id 的值”就可以解决问题啊

解决方案 »

  1.   

    引号没错吧?
    values('','','')
    你第一个单引号呢?
      

  2.   

    把pmailbox的字段ID做成自增长列不就行了么,还用这么费劲
      

  3.   

    这个不用在jsp里处理,sql数据库中加个增序的识别列,这列根本就不需要你修改只要你添加一条数据他自然就会在这列添加你这是添加的第几条数据!
      

  4.   

    up
    sql server 中用indentity 
    oracle中用序列
    mysql中对列用increment
      

  5.   

    /*
     *Create Database in SQL Server:
     *
     *create table mytb
     *(
     * id int primary key,
     * name char(10)
     *)
     */
    import java.sql.*;
    public class Increament
    {
    public static void main(String[] args) throws Exception
    {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    String url = ("jdbc:odbc:Demo");
    Connection conn = DriverManager.getConnection(url);

    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("select count(id) from mytable");

    int rowCount = 0;
    rs.next();

    System.out.println(rs.getInt(1));

    rowCount = rs.getInt(1) + 1;
    System.out.println(rowCount);

    rs.close();

    stmt.close();

    PreparedStatement pstmt = conn.prepareStatement("insert into mytb values(?,?)");

    pstmt.setInt(1,rowCount);
    pstmt.setString(2,"abc");

    pstmt.executeUpdate();

    pstmt.close();
    conn.close();


    }
    }