JAVA - вставить в БД проблему - PullRequest
0 голосов
/ 11 августа 2010

У меня проблема с вставкой данных в базу данных. Возвращается, что вставляется 1 строка, но когда я на самом деле проверяю базу данных, ничего нового фактически не было вставлено.

Вот моя функция обновления:

public int update(String sqlStatement) {
    int rows = 0;
    try {
        Statement st = this.conn.createStatement();
        rows = st.executeUpdate(sqlStatement);
        this.conn.commit();
        st.close();
            } catch (Exception err) {
        System.out.println("Got err doing update: " + err.getMessage());
    }   
    return rows;
}

А вот функция, вызывающая ее через объект:

            db = new Database();
            int rows = 0;
            String sql = "INSERT INTO tblStudent (firstName, lastName, username, password, isAdmin) ";
         sql += String.format("VALUES ('%s', '%s', '%s', '%s', %d)", fName, lName, username, passwd, isAdmin);
            System.out.println("Trying " + sql);
            if((rows = db.update(sql)) == 0) {
                System.out.println("Could not create new user");
                throw new Exception();
            }
            System.out.println("Rows " + rows);

Как я уже сказал, он сообщает, что в БД вставлена ​​одна строка, но на самом деле там ничего нет. БД является БД MS Access.

Любая помощь приветствуется.

G

1 Ответ

0 голосов
/ 12 августа 2010

Хорошо, исправили проблему.

Кажется, вам нужно закрыть соединение.Даже если не используется повторно.

Я добавил следующую функцию в класс базы данных:

    public void close() {
    try {
        this.conn.close();
    } catch (Exception err) {
        System.out.println("Error while closing connection: " + err.getMessage());
    }
}

И затем добавил закрытие к другим функциям в предложении finally:

        try {
            db = new Database();
            int rows = 0;
            String sql = "INSERT INTO tblStudent (firstName, lastName, username, password, isAdmin) ";
            sql += String.format("VALUES ('%s', '%s', '%s', '%s', %d)", fName, lName, username, passwd, isAdmin);
            System.out.println("Trying " + sql);
            if((rows = db.update(sql)) == 0) {
                System.out.println("Could not create new user");
                throw new Exception();
            }
            System.out.println("Rows " + rows);
        } catch (Exception err) {
            System.out.println("Got err in registerUser: " + err.getMessage());
            return false;
        } finally {
            db.close();
        }

Заставляет меня задуматься, почему тогда существует даже возможность коммитить, поскольку он фактически не выполняет коммит, даже если вы сказали ему коммитить.

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