mySql语法错误行为?

时间:2013-04-19 09:57:45

标签: mysql java-ee syntax-error tomcat6

我正在执行此查询:

INSERT INTO sent_emails(mailBody,azRatesFilesSendingId,fileName,tarrif_id,destination,cc,bcc,email_content,attached_file)VALUES('亲爱的先生,

请查找随附的TELTAC WORLDWIDE Rate通知。


根据客户经理的批准,今天有效。

< / p>

请将您的收据确认给ra@teltacworldwide.com

问候,


================================== 价格部门

Teltac World Wide Inc.

Verdun Racreet 3楼Ibisa Bldg

POBox:43 Br

电话:+9632分机:114

F338

电子邮件:ratom

================= ==================

','33435','Teltac-Rate Sheet-ATel 2013-Apr-19 ”, '276', 'ratcation.com', 'ratrldwide.com', '', '查看', '开')

当有人试图执行它时,它会给我一个语法错误:

DBHandler中的

错误--- executeUpdateQuery - &gt; com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在“MsoNormal”附近使用正确的语法style =“margin:0in 0in 0pt;”&gt;亲爱的先生,

但是当我在MySql服务器中执行它时,语句成功执行并返回一行有效! 所以我可以看到它不是语法错误,但我无法弄清楚问题是什么!

3 个答案:

答案 0 :(得分:0)

这似乎是String连接和查询构建的问题。如果没有实际代码,这只是猜测,但它是受过教育的。

使用String概念将任意String插入数据库时​​,这是一个非常常见的问题。例如

final String query = "SELECT * FROM my_table WHERE value = '" + value + "'";

上面的查询看起来很好,它做了它应该做的事情。但如果value意外发生了什么呢?

final String value = "damn, it's got an apostrophe";

现在突然你的查询破了。更糟糕的是,如果我们有什么

final String value = "something'; DROP DATABASE myDatabase --";

然后我们遇到了一个真正的问题。

您应该使用PreparedStatement来执行查询,否则您可能会遇到各种奇怪的问题,通常称为SQL注入。

以下是使用您的查询和SET语法的示例,该语法在PreparedStatement s中更清晰。

final String query = "INSERT INTO sent_emails SET"
        + "mailBody = ?,"
        + "azRatesFilesSendingId = ?,"
        + "fileName = ?,"
        + "tarrif_id = ?,"
        + "destination = ?,"
        + "cc = ?,"
        + "bcc = ?,"
        + "email_content = ?,"
        + "attached_file = ?";
final PreparedStatement preparedStatement = conn.prepareStatement(query);
preparedStatement.setString(1, mailBody);
preparedStatement.setInt(2, azRatesFilesSendingId);
//and the rest of the parameters.

答案 1 :(得分:0)

问题在于格式化。

您的邮件正文中可能包含样式信息的HTML代码,其中也包含“'”。

在将文本插入数据库之前,应确保转义所有单括号和双括号。

答案 2 :(得分:0)

我使用了来自apache .jar的StringEscapeUtils,它就像一个魅力!我读到它不安全,因为它可能带来一个SQL注入问题,但由于这个应用程序只在内部使用,我认为它是安全的!