Проблема с вставкой данных в базу данных SQLite - PullRequest
0 голосов
/ 25 апреля 2011
public static void main(String[] args) {
    try {
        Class.forName("org.sqlite.JDBC");  
        connection = DriverManager.getConnection("jdbc:sqlite:C:\\users\\tim\\airline\\flightschedule.db");  
        PreparedStatement statement = connection.prepareStatement("INSERT INTO flights (flightID,departure,arrival)VALUES(?,?,?)");
            statement.setInt(1,5);
            statement.setString(2,"David");
            statement.setString(3,"Ortiz");
            statement.executeUpdate();

    } catch (Exception e) {  
        e.printStackTrace();  
    } finally {  
        try {  
            resultSet.close();  
            statement.close();  
            connection.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }

}

Ответы [ 2 ]

10 голосов
/ 25 апреля 2011

Вы должны вызвать другой метод.

Хотя обо всем по порядку:

Неверный код (широко открыт для атаки SQL-инъекцией):

        statement = connection.createStatement();  
        resultSet = statement.executeQuery(
            "INSERT INTO flights 
               ('flightID','departure','arrival')
               VALUES('"+flightID+"','"+departure+"','"+arrival+"')");  

Хороший код:

        PreparedStatement statement = connection.prepareStatement(
            "INSERT INTO flights (flightID,departure,arrival)
               VALUES(?,?,?)");
        statement.setString(1,flightID);
        statement.setString(2,departure);
        statement.setString(3,arrival);
        statement.executeUpdate();

        // thanks to @lobster1234 for reminder!
        connection.commit();

Вы заметили, что я выполняю executeUpdate () вместо executeQuery ()? Потому что это причина твоих неприятностей.

P.S. Я также заметил, что вы передаете flightID в метод как int, но вставляете его в базу данных в виде строки. Обычно это не очень хорошая практика. Придерживайтесь одного типа данных. Если ID действительно число, сделайте его номером в базе данных, а затем вызовите setInt (1, flightID); в качестве альтернативы, передайте его как String.

4 голосов
/ 25 апреля 2011

Попробуйте позвонить connection.commit() после executeUpdate(). Вы также можете получить значение, возвращаемое executeUpdate(), и убедиться, что вы получите 1, а не 0, поскольку этот вызов возвращает количество строк, затронутых оператором.

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