2013-04-10 38 views
0

我試圖從表中的Access數據庫(2010)返回的記錄,但我每次運行語句時我不斷收到此錯誤:螺紋"AWT-EventQueue-0" java.lang.NullPointerException 其中java的SELECT語句不工作

異常我初始化了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

看起來'conn'是空的,所以語句無法創建 – 2013-04-10 15:07:04

回答

1

看起來你還沒有初始化conn任何地方。

你需要訪問它之前進行初始化。

+0

我編輯了我的代碼,現在你可以看到連接了。我甚至可以加得的DB,但我不能得到記錄與SELECT語句.. – Komlan 2013-04-10 15:13:16

2

getFromSql等於 「選擇form_nom,form_statutfrom一級方程式」,你必須寫:

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」,因此,如果您選擇不首先你插入連接將爲空。

刪除您的靜態字段(康涅狄格州和s),並使用本地領域中的每個方法爲您的連接和你的發言(也,你應該關閉它們一旦你完成插入/選擇)。

+0

是的它的真實,我添加了空間,但它並沒有解決主要問題 – Komlan 2013-04-10 15:25:22

+0

見我的編輯與S和語句之間的混亂。擺脫「靜態聲明」;這太可怕了。 – vptheron 2013-04-10 15:26:32

+0

真的!我也修正了這個問題,但是錯誤信息仍然是一樣的 – Komlan 2013-04-10 15:37:01