Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java select语句不工作_Java_Jdbc_Ms Access 2010 - Fatal编程技术网

java select语句不工作

java select语句不工作,java,jdbc,ms-access-2010,Java,Jdbc,Ms Access 2010,我试图从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={M

我试图从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;
}

}

看起来您在任何地方都没有初始化
conn


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

看起来您在任何地方都没有初始化
conn

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

getFromSql等于“从formule中选择form\u nom,form\u StateTFrom 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();
您从与刚才执行的语句不同的语句读取结果集

编辑之二: 你初始化连接的方式也搞砸了。它是一个静态字段,但只有在调用insert方法“ajouterFormule”时才初始化它:

conn = DriverManager.getConnection(database, "", ""); 
您在选择方法“getFormule”中没有这样做,因此如果您选择而不首先插入,您的连接将为空

删除静态字段(conn和s),并在连接和语句的每个方法中使用本地字段(并且,插入/选择后应将其关闭)。

getFromSql等于“从公式中选择表单名称、表单状态”,您必须编写:

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();
您从与刚才执行的语句不同的语句读取结果集

编辑之二: 你初始化连接的方式也搞砸了。它是一个静态字段,但只有在调用insert方法“ajouterFormule”时才初始化它:

conn = DriverManager.getConnection(database, "", ""); 
您在选择方法“getFormule”中没有这样做,因此如果您选择而不首先插入,您的连接将为空


删除静态字段(conn和s),并在连接和语句的每个方法中使用本地字段(而且,插入/选择后应将其关闭)。

似乎“conn”为空,因此无法创建语句。似乎“conn”为空,因此,无法创建语句。请编辑我的代码,以便现在可以看到连接。我甚至可以添加数据库,但是我不能用select语句获取记录。我编辑了代码,现在你可以看到连接了。我甚至可以添加DB,但我不能用select语句获取记录。是的,我添加了空格,但没有解决主要问题。请看我的编辑,s和stmt之间的混淆。摆脱“静态语句”,这太糟糕了。真的!我也修复了这个问题,但是错误消息仍然是相同的,但是如果我只声明一次,就不会更好了??这就是我一直试图做的,但它没有工作,即使当我在构造函数中初始化连接时,也没有更好的效果。每个查询都需要一个连接和一条语句,在select和insert之间共享它们是危险的,而且根本不是线程安全的。你可以“共享”的东西是“Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);”,你可以把它放在一个静态块中。是的,我添加了空格,但它没有解决主要问题。请看我的编辑,s和stmt之间的混淆。摆脱“静态语句”,这太糟糕了。真的!我也修复了这个问题,但是错误消息仍然是相同的,但是如果我只声明一次,就不会更好了??这就是我一直试图做的,但它没有工作,即使当我在构造函数中初始化连接时,也没有更好的效果。每个查询都需要一个连接和一条语句,在select和insert之间共享它们是危险的,而且根本不是线程安全的。您可以“共享”的东西是“Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);”,您可以将它放在一个静态块中。