2012-02-12 77 views
0

这是我的代码,的PreparedStatement未正确执行

String insertSQL = "INSERT INTO customer (c_id, f_name, l_name, address, email, phone)" 
        + " VALUES (?,?,?,?,?,?)"; 
      PreparedStatement prepStmt = connection.prepareStatement(insertSQL); 
      prepStmt.setString(1, c_id); 
      prepStmt.setString(2, f_name); 
      prepStmt.setString(3, l_name); 
      prepStmt.setString(4, address); 
      prepStmt.setString(5, email); 
      prepStmt.setString(6, telephone); 
      runUpdateQuery(prepStmt); 

      insertSQL = "INSERT INTO reservation (c_id, book_date, s_time, e_time, amount) " 
        + "VALUES (?,?,?,?,?)"; 
      prepStmt = connection.prepareStatement(insertSQL); 
      prepStmt.setString(1, c_id); 
      prepStmt.setString(2, date); 
      prepStmt.setDouble(3, startTime); 
      prepStmt.setDouble(4, endTime); 
      prepStmt.setString(5, amount); 
      out.println(prepStmt); 
      runUpdateQuery(prepStmt); 

第一条语句执行并更新数据库,但第二次犯规。我已经打印出来了,并直接在psql中运行这个语句,并且sql代码是有效的,为什么它不工作?

+2

“第二个不”实际上没有描述会发生什么。结果是什么?例外?没有例外,但没有价值?什么? – 2012-02-12 15:51:02

+0

似乎没有异常抛出,但执行()方法后的任何代码不会运行 – user195257 2012-02-12 15:54:25

+0

发现问题,日期是sql中的日期类型,但在java中的字符串,需要将字符串转换为日期! – user195257 2012-02-12 15:58:01

回答

1

错误或日志消息将帮助你和我们。

除了没有保留记录之外,是否没有迹象表明存在什么问题?

架构细节可能会有所帮助。也许你违反了主键或外键约束。

我把这些重构成两个独立的方法,并单独测试它们。

这两个INSERT是单个事务的一部分吗?他们应该是。如果预订INSERT失败,你希望发生什么?用户是否应该回滚?

您的代码段不显示如何清理资源。你最好也考虑一下,否则你会在后来感到悲伤。

0

我从您自己的意见中发现,您发现问题与JDBC日期类型转换有关 - 很高兴您解决了这个问题。这种问题出现很多,值得深入了解JDBC类型转换。下面的链接是一个很好的解释和参考:

http://docs.oracle.com/javase/6/docs/technotes/guides/jdbc/getstart/mapping.html

多年来,我已经在页面的结尾反复提到的表,你也一样。 (我不能在Java 1.7版本的文档中找到它,但它应该是相同的。)