0

我真的不知道发生了什么事。我是 Java 新手,对 MySQL 还很陌生。

我正在尝试将行插入到 Java 中的 MySQL 数据库中。它不会抛出任何异常,当我打印出 a 时SELECT *,它会显示我更新的行。但是当我再次运行程序或在 Workbench 中运行程序时,这些行并没有粘住。

其中一列(pk)是一个自动递增的字段。该字段正在递增,但数据不存在。

当我通过 Workbench 添加数据时,它会粘住,当我执行SELECT *. 只有当我通过下面的代码添加它时,数据似乎才会消失。

这是代码。我遵循了一个教程:

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;
}
}
4

3 回答 3

5

这是因为您将自动提交设置为 false ( con.setAutoCommit(false);),但没有提交事务。

未提交的插入不存储行,但它们会增加自动增量字段。

您需要提交事务以在事务结束后保留​​行。

于 2012-11-27T03:06:49.983 回答
2

你设置con.setAutoCommit(false);

st.executeBatch();

添加con.commit();

于 2012-11-27T06:24:50.380 回答
1

尝试使用准备好的语句 - 这样您的数据库就可以防止 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();
于 2012-11-27T03:11:22.630 回答