准备语句的Java ExecuteUpdate方法挂起

时间:2015-04-24 15:28:45

标签: java mysql jdbc prepared-statement

所以我一直在努力尝试获取某个准备好的语句来将值插入到我的数据库中。作为参考,我使用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是布尔值,spons_by是整数。无论我使用什么数据通过eclipse运行此代码都会导致executeUpdate()行无限期挂起。

但是,使用相同的数据,我可以通过服务器命令行插入事件。陌生人仍然是其他插入语句完美无缺。我认为问题可能是日期时间转换,但硬编码日期时间转换为语句仍导致挂起。

任何人都可以了解为什么会这样吗?

现在我唯一的想法是它是我的服务器+驱动程序配置,但我重新下载了我的笔记本电脑上的软件,问题仍然存在,所以我不相信这是一个问题。我还假设我可以在准备好的语句中使用通配符没有限制,但是如果有可能导致问题的话?另外在代码的前面我将连接设置为autocommit,但我不确定我的驱动程序是否支持,并且考虑到我的其他插件工作的事实,我不确定这是否是问题。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

所以我通过准备我的陈述来解决问题:

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。

答案 1 :(得分:-1)

尝试使用ps.executeQuery()代替ps.executeUpdate()。它适用于我的情况。

编辑:原谅我之前的回答。