JDBC读取Oracle DATE类型数据没有时分秒

27 篇文章 0 订阅

众所周知,Oracle中的日期类型有Date,Timestamp等多种类型,当我们使用ResultSet.getDate()来获取上述类型的数据时,即使数据库中保存的数据包含时分秒的信息,但是获取出来的数据仍然不会包含时分秒的信息。哪怕我们对其进行格式转换,得到的也最多是yyyy-MM-dd 00:00:00。

Oracle的Date类型对应Java中的java.sql.Date,Timestamp类型对应java.sql.Timestamp,java.sql.Date和java.sql.Timestamp均属于java.util.Date的子类。

Oracle类型Java类型getDate()getObject()getTimestamp()
Datejava.sql.Datey-M-dy-M-dy-M-d H-i-s
Timestampjava.sql.TimestampN/Ay-M-d H-i-s msy-M-d H-i-s ms

Oracle的驱动在处理Date类型的数据时,只要我们使用ResultSet.getDate()来获取,都会忽略掉时分秒等信息,ResultSet.getObject()也是如此,因为当我们使用ResultSet.getObject()来获取Date类型的数据时,默认返回的仍然是java.sql.Date类型的数据。

如果我们想要获取Oracle Date类型中包含的时分秒等信息,则需要使用ResultSet.getTimestamp()来获取。

对于Oracle中Timestamp类型的数据,如果我们使用的是ResultSet.getObject()来获取,则默认返回的oracle.sql.Timestamp类型的数据。值得注意的是,该类型并不是java.util.Date的子类,也没有重写toString()方法。因此对于Timestamp类型的数据必须使用ResultSet.getTimestamp()方法来获取。

最后,我们不建议在Oracle Date类型的字段中保存时分秒等信息,如果需要保存该部分信息,请使用Timestamp类型,这样我们可以在Java中编写如下代码来获取Oracle日期、时间戳类型的数据。

 

int type = rsmd.getColumnType(i);

//循环获取ResultSet中的数据的部分代码

switch (type) {

case Types.TIMESTAMP: // 如果是时间戳类型

 value = rs.getTimestamp(i);

 break;

case Types.TIME: // 如果是时间类型

value = rs.getTime(i);

 break;

default: //日期类型可以使用getObject()来获取

value = rs.getObject(i);

break;

}

map.put(rsmd.getColumnLabel(i), value);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Java JDBC 读取 Oracle 数据库并插入数据的示例代码: 1. 首先需要安装 OracleJDBC 驱动程序,可以从官方网站下载并安装。 2. 在 Java 代码导入 JDBC 驱动程序: ``` import java.sql.*; ``` 3. 连接到 Oracle 数据库: ``` String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String user = "username"; String password = "password"; Connection conn = DriverManager.getConnection(url, user, password); ``` 其 url 的 localhost:1521 是 Oracle 数据库的主机地址和端口号,orcl 是要连接的数据库实例名。user 和 password 分别是数据库的用户名和密码。 4. 从 Oracle 数据读取数据: ``` Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); // do something with the data } rs.close(); stmt.close(); ``` 这里使用了 Statement 对象执行了一条 SELECT 查询语句,并使用 ResultSet 对象获取查询结果。查询结果可以使用 rs.next() 方法逐行遍历,然后通过列名获取每一行的数据。 5. 插入数据Oracle 数据库: ``` PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable (id, name, age) VALUES (?, ?, ?)"); pstmt.setInt(1, 1); pstmt.setString(2, "John"); pstmt.setInt(3, 30); pstmt.executeUpdate(); pstmt.close(); ``` 这里使用了 PreparedStatement 对象执行了一条 INSERT 插入语句,通过占位符 ? 传递参数。pstmt.executeUpdate() 方法用于执行插入操作。 6. 最后记得关闭数据库连接: ``` conn.close(); ``` 完整的代码示例: ```java import java.sql.*; public class OracleJDBCExample { public static void main(String[] args) throws SQLException { String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String user = "username"; String password = "password"; Connection conn = DriverManager.getConnection(url, user, password); // read data from Oracle database Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); // do something with the data } rs.close(); stmt.close(); // insert data into Oracle database PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable (id, name, age) VALUES (?, ?, ?)"); pstmt.setInt(1, 1); pstmt.setString(2, "John"); pstmt.setInt(3, 30); pstmt.executeUpdate(); pstmt.close(); conn.close(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值