我正在尝试从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;
}
}
答案 0 :(得分:2)
getFromSql等于“SELECT form_nom,form_statutfrom formule”,你必须写:
String getFormSql = "SELECT form_nom,form_statut "
+ "from formule";
注意法定后的空格
编辑: 当你这样做时
Statement stmt = conn.createStatement();
// System.out.println(stmt);
stmt.execute(getFormSql);
ResultSet rs = s.getResultSet();
您从与刚刚执行的语句不同的语句中读取ResultSet。
编辑之二: 初始化连接的方式也搞砸了。它是一个静态字段,但只有在调用insert方法'ajouterFormule'时才初始化它:
conn = DriverManager.getConnection(database, "", "");
你没有在你的select方法'getFormule'中这样做,所以如果你选择不插入,你的连接将是null。
删除静态字段(conn和s)并在每种方法中使用本地字段作为连接和语句(并且,一旦插入/选择,您应该关闭它们。)
答案 1 :(得分:1)
您似乎没有在任何地方初始化conn
。
您需要在访问它之前对其进行初始化。