1

我对 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:“字段列表”中的未知列“你好”

-- 编辑 -- 实际上,我的代码是:

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

当我像每个人所说的那样插入引号时,会发生什么是术语“cb5.getSelectedItem()”被输入到表中。"+cb3.getSelectedItem()+" 的情况是,它只是输入了一些垃圾值。

4

6 回答 6

2

您需要hello在查询中引用字符串。

s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");
于 2013-02-19T04:51:34.263 回答
0

尝试在 hello 周围加上单引号 - 例如 'hello'

于 2013-02-19T04:53:47.543 回答
0

试试这个

  s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");
于 2013-02-19T04:55:35.407 回答
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')”

于 2013-02-19T04:57:09.520 回答
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()+")");
于 2013-02-19T04:57:41.883 回答
0

您可能需要考虑使用PreparedStatement,以免不得不处理此类引用问题——并且您可以获得免受 SQL 注入攻击的额外好处。

于 2013-02-19T04:57:53.840 回答