Не удалось вставить данные в MySQL, используя Java - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь использовать Java-код для вставки данных в базу данных MySQL.Я построил пользовательскую таблицу в базе данных.Таблица пользователей имеет 4 поля: id, имя пользователя, пароль и адрес.

mysql> desc user;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| username | varchar(32) | YES  |     | NULL    |                |
| password | varchar(64) | YES  |     | NULL    |                |
| address  | varchar(64) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

Это мой код Java.

    Connection conn = null;
    PreparedStatement stmt = null;
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC";
        String mysqlUserName = "root";
        String mysqlPassword = "123456";
        conn = DriverManager.getConnection(url, mysqlUserName, mysqlPassword);
        String sql = "INSERT INTO user(username,password,address) VALUES (?,?,?)";
        stmt = conn.prepareStatement(sql);
        stmt.setString(1,"11dsa1");
        stmt.setString(2,"111");
        stmt.setString(3,"111");
        stmt.close();
        conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        try {
            if (conn!=null)
                conn.close();
        }catch (SQLException e){

        }
        try {
            if (stmt!=null)
                stmt.close();
        }catch (SQLException e){

        }
    }

Ошибка не возникла .Но в моей базе данных нет данных.

mysql> select * from user; 
Empty set (0.01 sec)

Но я могу вставить данные с помощью оболочки.

mysql> insert into user(username,password,address) values ("aaa","aaa","aaa");
Query OK, 1 row affected (0.09 sec)

mysql> select * from user;
+----+----------+----------+---------+
| id | username | password | address |
+----+----------+----------+---------+
| 22 | aaa      | aaa      | aaa     |
+----+----------+----------+---------+
1 row in set (0.00 sec)

Но идентификатор равен 22, а не 1!

На самом деле Я запускал этот код Java 21 раз до .Насколько я понимаю, этот Java-код может вставлять данные в MySQL, но немедленно удалить данные из базы данных.Я действительно не могу понять эту нелепую ситуацию

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Вы не забыли на самом деле выполнить заявление?

Перед закрытием просто поместите stmt.executeUpdate () , так что это

String sql = "INSERT INTO user(username,password,address) VALUES (?,?,?)";
stmt = conn.prepareStatement(sql);
stmt.setString(1,"11dsa1");
stmt.setString(2,"111");
stmt.setString(3,"111");
stmt.executeUpdate()

Я бы также посоветовал вам закрыть подготовленный оператор в блоке finally или, еслиВы используете Java 7+, посмотрите, как вы можете использовать подготовленные операторы с try-with-resources здесь .Кроме того, если вы закрываете свое соединение в блоке finally, почему вы хотите закрыть его и в блоке try (последняя команда)?Это абсолютно избыточно.

В целом, поддерживая чистоту вашего кода, вы сможете лучше его прочитать и, следовательно, лучше увидеть возможные проблемы.

0 голосов
/ 24 июня 2018

Перед stmt.close();, добавьте это stmt.executeupdate();, потому что вы должны обновить свою таблицу, а затем обновить свои запросы.

0 голосов
/ 03 июня 2018

Решение:

Перед тем, как stmt.close() добавить это ..

stmt.executeUpdate();

Это должно работать !!

Предложение:

Кроме того, если вы используете версию Java выше 6, вам следует использовать подход с использованием ресурсов, который управляет критически важным ресурсом более разумным способом.!!

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