Java JDBC соединитель не вставляет строку, но я не получаю сообщение об ошибке

0

У меня возникла странная проблема с JDBC и java, у меня есть этот код:

Connection connection;
Statement st;
String sentence;

public ConnectorMYSQL() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }try {
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ehu", "root", "root");
        connection.setAutoCommit(false);
        st = connection.createStatement();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}


public void crearProyecto(String pNombreProyecto, String Creador, String Buscado) {

    java.sql.Timestamp date = new java.sql.Timestamp(new java.util.Date().getTime());

    String cadena = "INSERT INTO proyecto (nombreproyecto, fechacreacion, creador, buscado,eliminado) VALUES ('"
            + pNombreProyecto + "','" + date + "','" + Creador + "','" + Buscado + "','0');";
    System.out.println(cadena);
    try {
        //st.executeUpdate(cadena);
        st.execute(cadena);

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("Error con: " + cadena);
        System.out.println(e.getMessage());
    }

}

Когда я запускаю crearProyecto(), я не получил сообщение об ошибке, но он не добавил строку в таблицу, но если я вхожу в тот же запрос с phpmyadmin, он работает. Более того, id - Auto_increment, и он подсчитывает время, которое я сделал через java.

  • 1
    Вы пытались совершить? Так как вы установили автоматическую фиксацию на false
  • 0
    @VeselinDavidov Очень хороший улов. А также используйте готовые операторы (хотя я считаю, что вставка должна работать как сейчас).
Показать ещё 2 комментария
Теги:
jdbc

2 ответа

1
Лучший ответ

Когда вы что-то меняете в БД, это не будет постоянным. Он может отображаться только на вашем сеансе. Если вы хотите, чтобы он был постоянным, вы должны зафиксировать его. Когда сеанс завершен, все изменения становятся постоянными, что означает, что все сеансы могут обращаться к этим данным.

В вашем случае вы закрываете auto_commit, поэтому вставленные строки отображаются только в этом сеансе. Таким образом, вы можете видеть вставленные строки, если вы выберете из java-кода. Но вы не можете видеть эти вставленные строки из phpmyadmin, потому что он подключается к БД с другим сеансом.

Решение: Измените setAutoCommit на true.

  connection.setAutoCommit(true);

Редактировать:
Значение по умолчанию auto_commit равно true, как указано в комментарии Mark Rotteveel. Поэтому лучше не использовать setAutoCommit (true). Вы можете удалить эту строку.

  • 0
    По умолчанию используется автоматическая фиксация true, OP явно отключает ее, поэтому было бы лучше предложить удалить эту строку или явно использовать commit.
0

Проблемой может быть '0' в "". Удаление котировок помогло мне несколько раз решить мои вставки. Лучше использовать PreparedStatement, потому что в этом случае драйвер JDBC позаботится о правильном форматировании данных.

public void crearProyecto(String pNombreProyecto, String Creador, String Buscado) {

    java.sql.Timestamp date = new java.sql.Timestamp(new java.util.Date().getTime());
    PreparedStatement preparedStatement = null;
    try {
        preparedStatement = connection.prepareStatement("INSERT INTO 'proyecto' "
            + "('nombreproyecto', 'fechacreacion', 'creador', 'buscado', 'eliminado')"
            + "VALUES (?, ?, ?, ?, ?)");
            preparedStatement.setString(1, pNombreProyecto);
            preparedStatement.setDate(2, date);
            preparedStatement.setString(3, Creador);
            preparedStatement.setString(4, Buscado);
            preparedStatement.setInt(5, 0); 
            preparedStatement.executeUpdate();

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("Error con: " + cadena);
        System.out.println(e.getMessage());
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню