java и msaccess вставка sql не работает

У меня 2 проблемы.

  1. Приведенные ниже запросы INSERT не вставляют записи в базу данных msAccess. Может кто-нибудь объяснить, почему это происходит и как я могу это исправить? Я заменил одинарные кавычки на двойные, но это тоже не помогает.

  2. В приведенном ниже коде выполняется только 1 запрос, первый, остальные пропускаются. Я должен каждый раз комментировать предыдущие запросы и перекомпилировать для выполнения следующего. Есть ли другой способ сделать это?

    try {
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       Connection conn=null;
       conn= DriverManager.getConnection("jdbc:odbc:SS");
       Statement s;
       s=conn.createStatement();
       ResultSet rs;
       rs=s.executeQuery("drop table users");
       rs=s.executeQuery("CREATE TABLE users ( id AUTOINCREMENT, username varchar(255) , pass varchar(255), PRIMARY KEY(id) ) ");
       rs=s.executeQuery(" insert into users (username, pass) values( 'name1', 'pass1') ");
       rs=s.executeQuery(" insert into users (username, pass) values( 'name2', 'pass2') ");
    } catch (SQLException ex) { 
       ex.printStackTrace(); 
    } catch(Exception ee) {
       ee.printStackTrace();
    }
    

person jeet    schedule 04.03.2013    source источник
comment
у вас есть исключения?   -  person Obl Tobl    schedule 04.03.2013
comment
Используйте PreparedStatement.   -  person MadProgrammer    schedule 04.03.2013
comment
Проблема может заключаться в том, что s.executeQuery("drop table users") вызовет исключение, если таблица не существует. Вам нужно проверить, существует ли таблица, прежде чем ее удалить.   -  person Arun P Johny    schedule 04.03.2013
comment
Исключения, которые я получаю, следующие: набор результатов не был сгенерирован. Кроме того, я использовал оператор drop только для существующей таблицы. Основная проблема в том, что он ничего не вставляет в базу данных.   -  person jeet    schedule 04.03.2013


Ответы (2)


ResultSet не задействован, потому что вы не делаете никаких запросов, вы должны просто выполнять обновления. Ваша программа должна работать, если вы измените свой код следующим образом:

Connection conn=null;
Statement s=null;
try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    conn = DriverManager.getConnection("jdbc:odbc:SS");
    s = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    s.executeUpdate("drop table users");
    s.executeUpdate("CREATE TABLE users ( id AUTOINCREMENT, username varchar(255) , pass varchar(255), PRIMARY KEY(id) ) ");
    s.executeUpdate("insert into users (username, pass) values( 'name1', 'pass1') ");
    s.executeUpdate("insert into users (username, pass) values( 'name2', 'pass2') ");
} catch (SQLException ex) {
    ex.printStackTrace();
} catch (Exception ee) {
    ee.printStackTrace();
} finally {
    try {
        conn.close();
        s.close();
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
}

Имейте в виду, что для вставки в таблицу базы данных вы должны создать свой оператор с соответствующими параметрами.

Еще одним важным моментом является то, что вы всегда должны закрывать Connection, Statement и ResultSet, когда закончите. Когда вы закроете соединение, вторая вставка будет сброшена в таблицу базы данных.

person Costis Aivalis    schedule 04.03.2013

Для первой проблемы вы должны использовать executeUpdate для операторов, изменяющих базу данных, и executeQuery для извлечения данных из базы данных.

Для второго вы должны создать несколько операторов, а не использовать один и тот же оператор для каждого запроса, который вы пытаетесь выполнить. вы также должны правильно закрыть каждое выражение/соединение.

person G-Man    schedule 04.03.2013