import java.sql.*;
public class PreparedStatement {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
int sid = Integer.parseInt(args[0]);
String name = args[1];
int grade = Integer.parseInt(args[2]);

try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Manager","sa","");
pstmt = conn.prepareStatement("insert into student values (?,?,?)");

}
}
}
为什么写到这里,pstmt = conn.prepareStatement("insert into student values (?,?,?)");就报错了,大家指点一下吧!

解决方案 »

  1.   

    楼主驱动写的是sql2000的, url是sql2005的
      

  2.   

    好像不是的吧,问题好像是出在pstmt = conn.prepareStatement("insert into student values (?,?,?)");这句话上面,前面用的是statement的,就没有错啊!下面这个:
    import java.sql.*;public class JDBC_DML2 {
    public static void main(String[] args) {
    Connection conn = null;
    Statement stmt = null;
    int number = 0;
        String name = null;
        int grade = 0;
        number = Integer.parseInt(args[0]);
        name = args[1];
        grade = Integer.parseInt(args[2]);
        try{
         Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
         conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Manager","sa","");
         stmt = conn.createStatement();
         stmt.executeUpdate("insert into student values ("+number+", '"+name+"', "+grade+")");
        }catch(ClassNotFoundException e){
         e.printStackTrace();
        }catch(SQLException e){
         e.printStackTrace();
        }finally{
         try{
         if(stmt != null){
         stmt.close();
         stmt = null;
         }
         if(conn != null){
         conn.close();
         conn = null;
         }
         }catch(SQLException e){
         e.printStackTrace();
         }
        }
        
    }}就可以用的。
      

  3.   

    import的包是否正确?
    在我这里是没有编译错误的
      

  4.   

    你数据库中 sid  是不是自动生成的啊?如果是的话就不用insert啦!!不然就会报错的!!
      

  5.   

    正如上面所说你用的是sql2000,还是sql2005呀。或者看一下插入的是否与表中的字段一致
      

  6.   

    不关驱动的事 驱动没问题的
    SID是否自动生成啊 ?
      

  7.   

    你自己定义的类PreparedStatement 和导入的java.sql.PreparedStatement类名字冲突,把public class PreparedStatement{}的类名换一个看看...
      

  8.   

    先不管别的了,就是你的类名有问题PreparedStatement pstmt = null; 这个地方的声明,会让程序执行的时候,以为是本类的对象。
    pstmt = conn.prepareStatement("insert into student values (?,?,?)"); 所以这个地方就会包类型转换错误 
    建议楼主把类名改一下。 或者写成  java.sql.PreparedStatement pstmt = null; 
    这样就没有问题了