gpt4 book ai didi

java - SQL 可在 PMA 上运行,但不能在 Java 上运行

转载 作者:行者123 更新时间:2023-11-29 12:24:27 26 4
gpt4 key购买 nike

我有一个准备好的声明,如下所示:

CREATE TABLE IF NOT EXISTS ? (uuid VARCHAR(128), item VARCHAR(48), value FLOAT, UNIQUE (uuid))

如果我直接在 PMA 中执行此操作,但替换 ?对于任何文本文本,它都能完美运行并正确创建表格。但是,如果我从 Java 运行它,它就不起作用。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Murder_PlayerData' (uuid VARCHAR(128), item VARCHAR(48), value FLOAT, UNIQUE (u' at line 1

这是Java代码

    String table = "Murder_PlayerData";
String execute = "CREATE TABLE IF NOT EXISTS ? (uuid VARCHAR(128), item VARCHAR(48), value FLOAT(11), UNIQUE (uuid))";

PreparedStatement statement = sql.getConnection().prepareStatement(execute);
statement.setString(1, table);
statement.execute();

为什么它在 PMA 中有效,但在 Java 中却无效?

最佳答案

准备好的语句不能用于定义表名,但可以定义与列相关的值(插入值、wherehaving条件等)。一种理解方式是:Prepared Statements 用于 DML 操作,而不是 DDL 操作。

如果要在运行时构建表,则需要“手动”构建 SQL 语句:

String table = "Murder_PlayerData"
String strSQL = "create table if not exists " + table + "("
// Add your column definitions
+ ")"
Statement stmt = conn.createStatement();
stmt.execute(strSQL);

请注意,如果变量 table 可以用用户提供的数据填充,您的代码将容易受到 SQL Injection Attacks 的攻击。 。如果用户必须提供名称,我建议您不要创建表,而是在没有任何用户交互的情况下创建表,然后插入值,使用某种键来识别属于哪些记录每个用户。

关于java - SQL 可在 PMA 上运行,但不能在 Java 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28553851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com