[英]SQL Error: Insert Query producing error (Column names surrounded with quotes)
[英]Why SQL INSERT query takes the entered values as column names
我对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()+”的情况是,它只是输入一些垃圾值。
您需要在查询中引用字符串hello
。
s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");
尝试用单引号引起来-例如“ hello”
尝试这个
s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");
这是因为您需要在字符串中添加引号。 请尝试这样做:
> s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values
> ('hello','"+cb3.getSelectedItem()+"')");
注意,我在要插入的字符串的开头和结尾添加了char '
。
为什么SQL认为您的字符串是一列? 想象一下您发送到sql的字符串是如何的:
"insert into OneTable (Field1, Field2) values (Hello, George)"
Instead of (the correct one):
“插入到OneTable(Field1,Field2)值('Hello','George')中”
您需要在hello
周围插入引号,这是mysql得知值是整数或字符串的方式,
使用任一' '
s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");
或\\" \\"
都起作用
s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values (\"hello\","+cb3.getSelectedItem()+")");
您可能要考虑改用PreparedStatement
,以便不必处理此类引用问题-并且可以从SQL注入攻击中获得保护,这是附加的好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.