【发布时间】:2019-12-11 21:40:22
【问题描述】:
我已尝试添加 stmt.executeUpdate();插入数据库,但它仍然无法正常工作!处理后,没有显示错误,但没有数据插入数据库。
try {
// do insert
String preparedSQL = "insert into abc (NUM, ID) VALUES (?,?)";
for(int i = 1; i < r.length; i++)
{
stmt = conn.prepareStatement(preparedSQL);
// SQL parameters
setString(stmt, i++, Num);
setString(stmt, i++, r[i]);
stmt.executeQuery();
}
stmt.executeUpdate();
stmt.close();
} catch (SQLException e) {
PrintWriter out = new PrintWriter(new OutputStreamWriter(res
.getOutputStream(), "Big5"), true);
res.setContentType("text/html; charset=utf-8");
res.setHeader("cache-control", "no-cache");
res.setHeader("Pragma", "no-cache");
res.setIntHeader("expiry", -1000);
out.println("..<!--" + RSCommonUtil.HTMLEncode(e.toString()) + "para in title not valid" +
RSCommonUtil.HTMLEncode(pDate.toString())
+ " " + RSCommonUtil.HTMLEncode(startPubDateAndEndPubDate[0].toString()) + " "
+ RSCommonUtil.HTMLEncode(startPubDateAndEndPubDate[1].toString()) + "-->");
debug.p("insert error" + e);
failed = true;
} finally {
try {
// finalize DB
if (stmt != null) {
stmt.close();
stmt = null;
}
} catch (SQLException sqle) {
}
}
【问题讨论】:
-
“紧急帮助”从您的问题标题中删除:请记住,虽然问题对您来说很紧急,但对我们来说不应该变得紧急,因为您的问题/问题并不比任何人都重要其他的在这个网站上。为了提高您获得快速和体面答案的机会,而不是说“紧急”,请尽量按照How to Ask 链接提出最好的问题。
-
您使用的是 executeQuery(),而不是 executeUpdate()。而且你只需要准备一次声明:这就是准备好的声明的全部意义。
-
这,
catch (SQLException sqle) { }可能并不明智。至少打印堆栈跟踪,因为您可能缺少关键异常。 -
如果出现错误,您不会在控制台上打印任何内容。仅在 HTML 注释中,
out。我的猜测是您还没有阅读此方法生成的 HTML 注释。您真的不应该将 HTML 生成与数据库访问代码混为一谈。 -
另一个可能的问题:如果您的数据库连接未设置为自动提交,那么您的插入未提交。此外,您将在
try正文的末尾关闭您的stmt一次,然后在finally块中关闭第二次。