我遇到了SQL INSERT QUERY的问题。每当我在下面的代码中执行INSERT QUERY时,会发生什么,查询是否理解要作为列名输入的值。我的代码是:
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost/db","root","123456");
Statement s = con.createStatement();
int start = 8, end = 10;
char buf[] = new char[end-start]; // for extracting day alone.
dvalue = new String();
ddvalue = new String(); // for adding the extracted day to the table.
dvalue = cb3.getSelectedItem().toString();
dvalue.getChars(start, end, buf, 0);System.out.println(buf);
ddvalue = String.copyValueOf(buf);
s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values (hello,"+cb3.getSelectedItem()+")");
}
catch(SQLException s)
{
System.out.println("SQL statemnet is not executed!");
System.out.println(s);
}
执行查询后得到的错误是: -
SQL statemnet未执行! com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'字段列表'中的未知列'hello'
- 编辑 - 实际上,我的代码是:
s.executeUpdate("insert into "+nameoftab+" (sname,"+""+ddvalue+""+") values ("+cb5.getSelectedItem()+","+cb3.getSelectedItem()+")");
当我像所有人所说的那样插入引号时,会发生的是“cb5.getSelectedItem()”一词正在输入到表中。 “+ cb3.getSelectedItem()+”的情况是,它只是输入一些垃圾值。
答案 0 :(得分:1)
您需要在查询中引用字符串hello
。
s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");
答案 1 :(得分:0)
尝试使用hello周围的单引号 - 例如'hello'
答案 2 :(得分:0)
试试这个
s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");
答案 3 :(得分:0)
这是因为您需要在字符串中添加引号。请尝试这样做:
> s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values
> ('hello','"+cb3.getSelectedItem()+"')");
注意我在您尝试插入的字符串的开头和末尾添加了字符'
。
为什么SQL认为你的字符串是一个列? 想象一下你发送给sql的字符串是:
"insert into OneTable (Field1, Field2) values (Hello, George)"
Instead of (the correct one):
“插入OneTable(Field1,Field2)值('Hello','George')”
答案 4 :(得分:0)
你需要在hello
周围插入引号,这就是mysql知道值是整数还是字符串的方式,
使用' '
s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");
或\" \"
都可以正常工作
s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values (\"hello\","+cb3.getSelectedItem()+")");
答案 5 :(得分:0)
您可能需要考虑使用PreparedStatement
,以便不必处理此类引用问题 - 并且您可以获得SQL注入攻击保护作为额外的好处。