我想创建一个表,这个表的名称将从文本字段中插入。但是,当我运行查询时,它给了我一个错误,对此有任何帮助吗?我会在这里粘贴代码:
public boolean CreateTable() {
TableNumber = jTextField4.getText();
try {
String password = null;
String s = "CREATE TABLE '"+TableNumber+ "' (Item char(50),Price char(50))";
ConnectionForOrders();
stmt = conn.createStatement();
stmt.executeUpdate(s);
boolean f = false;
ConnectionForOrdersclose();
答案 0 :(得分:3)
我首先假设你的'"
gaff是一个拼写错误,因为它甚至不应该以这种方式编译(我编辑了问题以便为后来的那些修复它)。
除此之外,您不要将表名括在单引号中。它不是:
CREATE TABLE'tablename'(...)
你只需写:
CREATE TABLE tablename(...)
但你甚至不应该这么做,因为你从文本字段中获取了你的tablename。什么是阻止某人在该文本字段中输入这样的内容:
a(b int); DROP TABLE用户; -
(当然假设你有一个用户表)。重要的是要记住,攻击者可以在第一个;
之后输入任意任意sql,并且您的数据库将盲目地运行它。
答案 1 :(得分:1)
TableNumber
好吧......一个数字?如果是,则可能导致语法错误。
答案 2 :(得分:1)
看起来撇号和引号在TableNumber
(右侧)周围反转,这会产生编译错误。