所以我一直在努力让某个准备好的语句能够将值插入到我的数据库中。作为引用,我使用 MySQL server 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 是 boolean 值,sponsored_by 是整数。无论我使用什么数据,通过 eclipse 运行此代码都会导致 executeUpdate() 行无限期挂起。
但是,使用相同的数据,我可以通过服务器命令行插入事件。更奇怪的是其他插入语句可以完美地工作。我认为问题可能出在日期时间转换上,但将日期时间硬编码到语句中仍然导致挂起。
任何人都可以深入了解为什么会发生这种情况吗?
现在我唯一的想法是它是我的服务器 + 驱动程序配置,但我在我的笔记本电脑上重新下载了软件,问题仍然存在,所以我认为这不是问题。我还假设我可以在准备好的语句中使用的通配符没有限制,但是如果有可能会导致问题吗?此外,在代码的前面,我将连接设置为自动提交,但我不确定我的驱动程序是否支持它,并且考虑到我的其他插入工作的事实,我不确定这是否是问题所在。
感谢您的帮助!
最佳答案
所以我通过准备声明解决了这个问题:
a1.setString(1, ename);
a1.setString(2, desc);
a1.setString(3, date + " " + time);
a1.setString(4, location);
a1.setInt(5, 1);
a1.setInt(6, cid);
我认为这是通过将日期时间重新格式化为 yyyy-mm-dd hh:mm:ss 格式来解决的,我认为这是格式化的,没有正确抛出 sqlException。
关于准备好的语句的 Java ExecuteUpdate 方法挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29851533/