Java 实际上没有插入MySQL,但自动增量字段正在增加?
我真的不知道发生了什么事。我是Java新手,对MySQL也相当陌生 我试图在Java中向MySQL数据库中插入行。它不会抛出任何异常,当我打印SELECT*时,它会显示我更新的行。但当我再次运行程序或在Workbench中运行程序时,这些行不会粘住 pk中的一列是自动递增字段。此字段正在递增,但数据不存在 当我通过Workbench添加数据时,它会粘住,当我执行SELECT*时,我可以在Java程序中检索它。只有当我通过下面的代码添加它时,数据才会消失 这是代码。我遵循了一个教程:Java 实际上没有插入MySQL,但自动增量字段正在增加?,java,mysql,jdbc,Java,Mysql,Jdbc,我真的不知道发生了什么事。我是Java新手,对MySQL也相当陌生 我试图在Java中向MySQL数据库中插入行。它不会抛出任何异常,当我打印SELECT*时,它会显示我更新的行。但当我再次运行程序或在Workbench中运行程序时,这些行不会粘住 pk中的一列是自动递增字段。此字段正在递增,但数据不存在 当我通过Workbench添加数据时,它会粘住,当我执行SELECT*时,我可以在Java程序中检索它。只有当我通过下面的代码添加它时,数据才会消失 这是代码。我遵循了一个教程: import
import java.sql.*;
public class SaveMap {
public static boolean MapSave(String mapName) {
Connection con = null;
Statement st = null;
ResultSet rs = null;
String url = "jdbc:mysql://127.0.0.1:3306/";
String db = "game_Maps";
String driver = "com.mysql.jdbc.Driver";
String user = "root";
String pass = "pass";
try {
Class.forName(driver);
con = DriverManager.getConnection(url + db, user, pass);
con.setAutoCommit(false);
st = con.createStatement();
System.out.println(st.executeUpdate("INSERT INTO Maps (mapName, mapSize) VALUES('DB Test', 5)"));
st.executeBatch();
String sql = "SELECT * FROM Maps";
rs = st.executeQuery(sql);
System.out.println("No \t Name");
while(rs.next()){
System.out.println(rs.getString(1) + " \t");
System.out.println(rs.getString(2) + " \t");
System.out.println(rs.getString(3) + " \t");
}
rs.close();
st.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}
这是因为您将自动提交设置为false con.setAutoCommitfalse;,但是没有提交事务 非合并插入不存储行,但它们会自动递增字段
您需要提交事务,以便在事务结束后保留行。尝试使用准备好的语句-这样您的数据库就不会受到sql注入的影响。对您的值进行类似以下修复:
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = (Connection) DriverManager.getConnection(DBurl, user, password);
String read = "INSERT INTO Maps (mapName, mapSize) VALUES(?, ?)"
PreparedStatement p = (PreparedStatement) con.prepareStatement(read);
p.setString(1, "DB Test");
p.setInt(2, 5);
p.executeUpdate();
long insertId = p.getLastInsertID();
con.close();
设置con.setAutoCommitfalse
在st.executeBatch之后
添加con.commit 我觉得自己像个白痴。我不确定这是什么意思,于是开始查找,但忘记了。谢谢