对于某些字符串值,插入文本失败但对其他字符串不会

时间:2016-11-18 20:42:03

标签: java database ms-access jdbc odbc

String addQuer = "INSERT INTO emaildata VALUES('" + email + "','" + fname + "','" + lname + "','" + subject + "','" + content + "')";
        statement.execute(addQuer);

我有上面的代码将数据插入表中。我正在使用MS Access数据库。所有字段都是类型(长文本)。插入以下数据集时,查询正常工作

  1. email = SALMAN MAJID
  2. 萨勒曼
  3. 马吉德
  4. 测试邮件
  5. mY nAME iS sALMAN。
  6. 但是当我在最后一个字段中使用以下数据集时,同样的查询会出错。错误是语法错误缺少操作员....请不要介意这么长的文本,因为这个文本给出了错误所以我发布了整个文本。

    java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ''Get the free Outlook app.
    

    我们已将Outlook应用升级为更快,更易于使用。无论您使用哪种电子邮件服务'。

    1. “Outlook.com”
    2. 不可用
    3. 不可用
    4. 立即下载:Outlook应用
    5. 获取免费的Outlook应用。

      我们已将Outlook应用升级为更快,更易于使用。无论您使用哪种电子邮件服务,Outlook应用程序都可以让您做得更多。

    6. [下载Outlook。] http://communication.microsoft.com/Key-6859501.C.ChVBd.C.K4.-.HJ67kt

      字段5在这里结束。上面的文字很长但我无法粘贴整个文本。但错误发生在我发布的这篇文章中。

1 个答案:

答案 0 :(得分:4)

您正在遭受" SQL注入"问题。包含单引号的文本(例如,"我们' ve ...")将导致您的SQL命令无效。您需要使用参数化查询,它看起来像这样:

String addQuer = "INSERT INTO emaildata VALUES (?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(addQuer);
ps.setString(1, email);
ps.setString(2, fname);
ps.setString(3, lname);
ps.setString(4, subject);
ps.setString(5, content);
ps.executeUpdate();