現在mysql數據庫db有一張表test(id bigint,createTime datetime),部分表數據如下:
id | createTime |
---|---|
1 | 2017-01-02 10:34:33 |
2 | 2017-01-05 11:35:31 |
3 | 2017-01-07 13:20:01 |
4 | 2017-01-13 10:06:33 |
5 | 2017-01-15 11:22:53 |
6 | 2017-01-20 10:34:33 |
7 | 2017-01-25 10:46:25 |
現在要通過java代碼拚接sql字符串的形式查出所有創建時間在2017-01-15 00:00:00
之後的數據。
限定 : 通過以下
两种方式
查詢
第一種 :拚接字符串
String sql = "select id,createTime from db.test where createTime > " + javaCreateTime
第二種 : 预编译
的形式傳入查詢參數:
String sql = "select id,createTime from db.test where createTime > ?"
請問 : 第一種方式的
javaCreateTime
應該怎麼傳?第二種预编译
的方式參數又應該怎麼傳?
從網上找到解決的辦法了:
第一種傳入:
String sql = "select id,createTime from db.test where createTime > '2017-01-15 00:00:00' "
第二種
String sql = "select id,createTime from db.test where createTime > ? ";
PreparedStatement preStat = connection.prepareStatement(sql);
preStat.setString(1, '2017-01-15 00:00:00');
ResultSet rs = preStat.executeQuery();
以上兩種方式都是直接傳入字符串,而且都是yyyy-MM-dd HH:mm:ss
。請問為什麼可以達到目的?
mysql會自動將字符串轉化為datetime
?。
其底層運行機製到底是什麼原因呢?
高洛峰2017-04-18 10:56:42
mysql會自動將字串轉換為datetime?
這要看你將它們加入表格的時候,它們本身的datatype
是不是datetime
又或者是它們在mysql
的column可能已經set成datetime
你可以打 desc test;
查看
另外 2017-01-15 00:00:00
本身的格式已經是 datetime
.