import java.sql.*;public class PreStmt
{
    public static void main(String args[])
    {
         try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection conn=DriverManager.getConnection("jdbc:odbc:taobao");
            String sql = "insert into 123(a2,a3,a4) values('?','?','?')";
            PreparedStatement stmt = conn.prepareStatement(sql);
            conn.setAutoCommit(false);
            stmt.setString(1,"abcdefg");
            stmt.setString(2,"abcdefg");
            stmt.setString(2,"abcdefg");
            System.out.println(stmt);
            stmt.execute(sql);
            stmt.close();
            conn.commit();
            conn.close();
            System.out.println("success");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}在Access中直接运行SQL语句insert into 123(a2,a3,a4) values('?','?','?')能够插入JAVA中报出
java.lang.NullPointerException
        at sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter(JdbcOdbcPreparedStatement.java:1023)
        at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setChar(JdbcOdbcPreparedStatement.java:3057)
        at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:766)
        at CsvtoDb.PreStmt.main(PreStmt.java:26)
百思不得其解。求高人。

解决方案 »

  1.   

    PreparedStatement stmt = conn.prepareStatement(sql);
      conn.setAutoCommit(false);
      stmt.setString(1,"abcdefg");
      stmt.setString(2,"abcdefg");
      stmt.setString(2,"abcdefg");
      System.out.println(stmt);
      stmt.execute(sql);
    -》stmt.executeUpdate();
      

  2.   

    ls真快啊。ls已经告诉你错误原因了。
    lz分析下root cause看看是你代码具体哪行就知道了,以后这样的错误就知道如何找了。
      

  3.   

     stmt.setString(1,"abcdefg");
      stmt.setString(2,"abcdefg");
      stmt.setString(2,"abcdefg");
    改成 stmt.setString(1,"abcdefg");
      stmt.setString(2,"abcdefg");
      stmt.setString(3,"abcdefg");
      

  4.   

    不是这个问题。即使改成stmt.setString(1,"abcdefg");
    stmt.setString(2,"abcdefg");
    stmt.setString(3,"abcdefg");还是一样出错。
    运行到stmt.setString(1,"abcdefg");就报错停止了。
    实在头大
      

  5.   

    at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:766)