我对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做的次数。
答案 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());
}
}