【发布时间】:2015-04-24 15:28:44
【问题描述】:
所以我一直在努力尝试让某个准备好的语句能够将值插入到我的数据库中。作为参考,我使用 MySQL 服务器 5.5 和 Connector/J 作为我的数据库 + 驱动程序。
我尝试运行以下代码:
sql = "INSERT INTO event "
+ "( ename, description, edatetime, location, is_public_e,sponsored_by)"+"VALUES ( ?, ?, ?, ?, ?,?);";
PreparedStatement a1 = con.prepareStatement(sql);
a1.setString(1, ename.toString());
a1.setString(2, desc.toString());
a1.setString(3, date);
a1.setString(4, location.toString());
a1.setInt(5, pub);
a1.setString(6, clubid.toString());
a1.executeUpdate();
其中 ename、description 和 location 是字符串,edatetime 是日期时间,is_public 是布尔值,赞助商是整数。无论我使用什么数据通过 Eclipse 运行此代码,都会导致 executeUpdate() 行无限期挂起。
但是,使用相同的数据,我可以通过服务器命令行插入事件。更奇怪的是,其他插入语句完美无缺。我认为问题可能是日期时间转换,但将日期时间硬编码到语句中仍然导致挂起。
谁能提供任何关于为什么会发生这种情况的见解?
现在我唯一的想法是这是我的服务器 + 驱动程序配置,但我在笔记本电脑上重新下载了该软件,但问题仍然存在,所以我认为这不是问题。我还假设我可以在准备好的语句中使用的通配符没有限制,但如果有可能会导致问题?此外,在代码的前面,我将连接设置为自动提交,但我不确定我的驱动程序是否支持它,并且鉴于我的其他插入工作我不确定这是否是问题。
感谢您的帮助!
【问题讨论】:
-
它无限期挂起,你没有得到任何错误?尝试在调试模式下运行,看看发生了什么:它真的是挂起的数据库代码吗?数据库锁可能会导致插入挂起。确保正确关闭之前的语句(插入、更新、读取)。
-
我认为问题不在于您向我们展示的代码。我们能看到更多吗?
-
@OP:如果您使用
Statement而不是PreparedStatement,在这个特定的插入中,行为如何? -
语句在这种情况下给出了相同的行为。今天晚些时候我回家后会添加更多代码。也没有错误,它只是粘在那条线上,即使我有它是第一个执行它的插入,它仍然挂起,所以我不相信应该有锁,但我回家时会检查.
标签: java mysql jdbc prepared-statement