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



我的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语句未执行!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周围使用单引号,例如"hello"

试试这个

  s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");

您需要在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注入攻击的保护。

这是因为您需要在字符串中添加引号。请尝试这样做:

>     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’)"

最新更新