0

我正在尝试从 Access DB(2010) 中的表中返回记录,但每次运行该语句时,我都会收到此错误:

"AWT-EventQueue-0" java.lang.NullPointerException 我初始化stmt的线程中的异常

我没有在这段代码中显示数据库的名称。这是我的代码:

public class util {

static String path = "path to db";         
static String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+path;

  static Connection conn ; 
  static Statement s;

 public static boolean  ajouterFormule(String formule){
     boolean success = false;
      PreparedStatement stmt;
    try{
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       conn = DriverManager.getConnection(database, "", ""); 
       String ajout_sql = "INSERT INTO FORMULE(form_nom)"
             + "VALUES(?)";

       stmt= conn.prepareStatement(ajout_sql);
       stmt.setString(1, formule);
       int num_row = stmt.executeUpdate();
       if(num_row > 0)
           success =true;
    }
    catch(Exception e){
        System.out.println(e.getMessage());
             System.out.println("ERROR2");
    }
     return success;
 }


public static String[] getFormule()throws SQLException{
  String[] arr = new String[10];
   String getFormSql = "SELECT form_nom, form_statut "
            + "from formule";
    int i=0;
      System.out.println("NO");
    //Statement stmt = null;
    // ResultSet rs ;
    try{                   
        Statement stmt =  conn.createStatement();
      //  System.out.println(stmt);
        stmt.execute(getFormSql);
        ResultSet rs = s.getResultSet();
        while(rs.next()){
           String txt = rs.getString("form_nom");
    //       arr[i] = rs.getString("form_nom");
           System.out.println("Nothing..."+txt);

           i++;
        }
    }
    catch(SQLException e){
         System.out.println(e.getMessage());
          System.out.println("Error..");
    }
    System.out.print("Length "+ arr.length);

    return arr;
}

}

4

2 回答 2

2

getFromSql 等于“SELECT form_nom,form_statutfrom formule”,你必须写:

String getFormSql = "SELECT form_nom,form_statut "
            + "from formule";

注意statut后面的空格''

编辑:当你这样做的时候

Statement stmt =  conn.createStatement();
      //  System.out.println(stmt);
        stmt.execute(getFormSql);
        ResultSet rs = s.getResultSet();

您从与刚刚执行的语句不同的语句中读取 ResultSet。

编辑之二:初始化连接的方式也搞砸了。它是一个静态字段,但只有在调用插入方法 'ajouterFormule' 时才对其进行初始化:

conn = DriverManager.getConnection(database, "", ""); 

你没有在你的选择方法'getFormule'中这样做,所以如果你选择而不先插入你的连接将为空。

删除您的静态字段(conn 和 s),并在每种方法中为您的连接和您的语句使用本地字段(此外,您应该在完成插入/选择后关闭它们)。

于 2013-04-10T15:22:05.340 回答
1

看起来你还没有conn在任何地方初始化。

您需要在访问它之前对其进行初始化。

于 2013-04-10T15:07:03.980 回答