bl4*_*0l7 4 java sql database jdbc
这是我昨天以来一直在努力的事情.
我有约会保存在数据库中.它们包括日期和时间,如:
01.02.1970 14:00
Run Code Online (Sandbox Code Playgroud)
(德语格式,在美国我觉得它会像02/01/1970 2:00 pm).
第一个想法:将其保存为SQL.DATE!
所以我创建了一个表:
CREATE TABLE appointments (id NUMBER(10) NOT NULL, datum DATE NOT NULL, PRIMARY KEY id)
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
现在我写了一个DAO,保存我通过网络表单输入的约会.之后我想写一个单元测试,检查约会是否正确保存.
相关测试部分如下:
JdbcDao myDao = new JdbcDao();
myDao.setDataSource(jdbcTemplate.getDataSource());
myDao.saveAppointment(appointmentModel);
// Not needed but I saw, the appointment is saved in the database
setComplete();
// And now for the (sorry for the harsh words) pain in the *** part
String sql = "SELECT id, datum FROM appointments WHERE datum ... // <--
Run Code Online (Sandbox Code Playgroud)
< - :这只是部分,我不知道输入什么,以查看在特定日期数据库中是否已存在日期.
我试过了:
datum = ?
Run Code Online (Sandbox Code Playgroud)
以下的电话
jdbcTemplate.query(sql, args, rowMapper);
Run Code Online (Sandbox Code Playgroud)
在args-array中有一个java.util.Date,一个java.util.Calendar或一个java.lang.String('dd.MM.yyyy'),它保存的参数替换了?在准备好的声明中.
当然,这是一个坏主意,因为数据库有类似的东西
DD.MM.YYYY HH:MI
Run Code Online (Sandbox Code Playgroud)
在表格行中(DD =天,MM =月,YY =年,HH =小时,MI =分钟).
所以我找到了BETWEEN sql命令,重构(并尝试所有类型的格式,输入,字符串,对象传递args-array)SELECT命令:
String sql = "SELECT id, datum FROM appointments WHERE datum BETWEEN to_date( ?, 'DD.MM.YYYY HH24:MI:SS') AND to_date( ?, 'DD.MM.YYYY HH24:MI:SS')
Run Code Online (Sandbox Code Playgroud)
如果我直接通过sql-tool输入它,就像许多其他尝试一样有效,例如
SELECT * FROM appointments WHERE datum BETWEEN to_date('01.02.1970 00:00:00', 'DD.MM.YYYY HH24:MI:SS') AND to_date('01.02.1970 23:59:59', 'DD.MM.YYYY HH24:MI:SS')
Run Code Online (Sandbox Code Playgroud)
输出例如:
ID DATUM
---------------------- -------------------
70 01.02.1970 11:11:11
Run Code Online (Sandbox Code Playgroud)
但我在java中的jdbc调用总是导致一个空的结果集.
长话短说明:
查询数据库的最佳做法是,如果由数据库的sql.DATE列中存在的日期(由java对象表示)与给定时间不同?
小智 5
像这样的东西:
PreparedStatement ps = conn.prepareCall("SELECT * FROM table WHERE someDate = ?");
ps.setDate(1, javaDate)
Run Code Online (Sandbox Code Playgroud)
(从内存中所以语法可能不太正确)
您必须将java.util.Date对象转换为java.sql.Date对象.
这很简单:
java.sql.Date myDate = new java.sql.Date(oldDate.getTime());
Run Code Online (Sandbox Code Playgroud)
oldDatejava.util.Date对象在哪里.
| 归档时间: |
|
| 查看次数: |
1571 次 |
| 最近记录: |