Java jdbc连接器不插入行但我没有收到错误消息

时间:2018-04-18 13:17:48

标签: java mysql jdbc

我对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做的次数。

2 个答案:

答案 0 :(得分:1)

当您在DB中更改某些内容时,它将不会持久存在。它只能在您的会话中显示。如果你想要它是持久的,那么你应该提交。提交会话时,所有更改都将成为持久性,这意味着所有会话都可以访问这些数据。

在您的情况下,您关闭auto_commit,因此插入的行仅显示在此会话中。因此,如果从java代码中进行选择,则可以看到插入的行。但是你无法从phpmyadmin看到这些插入的行,因为它连接到具有不同会话的DB。

<强>解决方案: 将setAutoCommit更改为true。

  connection.setAutoCommit(true);

修改
默认的auto_commit值为true,如评论中提到的Mark Rotteveel。所以最好不要使用setAutoCommit(true)。你可以删除这一行。

答案 1 :(得分:0)

问题可能是'0'&#39;&#39;。删除引号有时帮我解决了插入问题。使用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());
    }
}