2012-11-21 33 views
1

我在尝试从Microsoft AccessJDBC - 插入日期到数据库产生一个错误

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Undefined function 'to_date' in expression. 
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956) 
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113) 
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3148) 
..... 

在这里插入一个日期到我的数据库时,这个错误是我使用

addUserSt = con.prepareStatement("insert into Accounts(Username, First_name, last_name, gender, birthday, email, civil_status, password) " 
       + "values(?,?,?,?,to_date('17-January-97', 'DD-Month-RR'),?,?,?)"); 

准备好的声明这里是我如何执行语句.. dc是一个对象。像uname,fname,lname等变量都是字符串。

   dc.addUserSt.setString(1, uname); 
       dc.addUserSt.setString(2, fname); 
       dc.addUserSt.setString(3, lname); 
       dc.addUserSt.setString(4, gender); 
       dc.addUserSt.setString(5, email); 
       dc.addUserSt.setString(6, civil); 
       dc.addUserSt.setString(7, pass); 

       dc.addUserSt.executeUpdate(); 

我不知道为什么它说to_date函数是未定义的。 任何人都可以帮助我吗? 在此先感谢。

+2

此查询是否在SQL客户端中工作?没有? MSSQL似乎[没有这个功能](http://stackoverflow.com/questions/2569998/to-date-in-sql-server-2005)。 – Kai

回答

2

您需要使用CDate()功能。这是to_date()的Microsoft Access版本。

1

to_date是一个Oracle函数。而是使用CDate,Access的等价物。

0

功能to_date特定于Oracle。由于您没有连接到Oracle,而是连接到Access,因此该功能不可用。不要使用特定于数据库的函数,而应考虑对日期和时间文字使用JDBC转义语法(如JDBC 4.1规范的13.4.2中所述;每个JDBC驱动程序应支持这些语法)。对于一个日期:

{d 'yyyy-mm-dd'} 

所以在您的特定例如,你可以使用:

values(?,?,?,?,{d '1997-01-17'},?,?,?) 

使用逃逸是一种抽象的数据库之间的差异了。