为什么SQL INSERT查询将输入的值作为列名称

时间:2013-02-19 04:49:13

标签: mysql mysql-insert-id insert-query

我遇到了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()+”的情况是,它只是输入一些垃圾值。

6 个答案:

答案 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注入攻击保护作为额外的好处。