JDBC insert语句不起作用

时间:2012-09-28 04:10:12

标签: java jdbc

我正在尝试创建一个在数据库中插入数据的java应用程序。应用程序非常简单。它从用户输入3个输入并将该输入插入数据库。一切正常但我得到执行插入语句的SQL错误。 这是代码段。

sa.executeUpdate("INSERT INTO history (to, subject, body)"+"VALUES("+ DATA1 + "','" + DATA2 + "','" +DATA3+ "')'");

我确信我在声明中遇到Double Quotes和Single Quotes的问题。

4 个答案:

答案 0 :(得分:6)

你应该总是使用PreparedStatement来做这种事情。它负责为您引用并保护您免受SQL注入攻击:

PreparedStatement statement = connection.prepareStatement("INSERT INTO history (to, subject, body) VALUES (?, ?, ?)");
statement.setString(1, DATA1);
statement.setString(2, DATA2);
statement.setString(3, DATA3);
statement.execute();

不仅如此,数据库驱动程序还可以编译和缓存预准备语句,从而可以提高它们的效率。

请注意,setString索引是从1开始的,而不是从零开始的。

答案 1 :(得分:1)

sa.executeUpdate("INSERT INTO history (to, subject, body)"+"VALUES("+ DATA1 + "','" + DATA2 + "','" +DATA3+ "')'");

此代码将生成如下查询:

INSERT INTO history (to, subject, body)VALUES(vinesh','raja','1111')'

您必须在最后一个')'之后删除单引号,并在'VALUES'之后添加单引号。

请尝试使用此代码:

sa.executeUpdate("INSERT INTO history (to, subject, body)"+"VALUES('"+ DATA1 + "','" + DATA2 + "','" +DATA3+ "')");

答案 2 :(得分:0)

当Vinesh建议解决方案时,我只想告诉你,更好的是你把一个变量作为

String query="SQL QUERY";
then just do System.out.println(query);

然后运行该行,

PreparedStatement statement = connection.prepareStatement(query)

这样,您将正确识别形成的最终查询。

答案 3 :(得分:-1)

1.Rather比使用String Class使用String Buffer或String Builder这是一个可变类。另一方面,String Class是不可变的。你可以像

一样使用字符串缓冲区
  1. String Buffer stbuffer = new String Buffer();

    stbuffer.append("insert into ");
    stbuffer.append("<tablename> ");
    stbuffer.append("<fields >");
    stbuffer.append(" values");
    stbuffer.append("(+");
    stbuffer.append(String);
    stbuffer.append(")");  ....etc
    
  2. 您可以使用stbufffer.toString();

  3. 获取最终的字符串表示形式
  4. 您可以插入此类查询以超越update()

  5. ins.executeUpdate(stbuffer.toString);方法
  6. 您也可以像这样使用Insert语句和Prepared Statement