现在的位置: 首页 > 综合 > 正文

使用 JDBC 插入 Timestamp 值

2013年04月06日 ⁄ 综合 ⁄ 共 1876字 ⁄ 字号 评论关闭

        问题描述
        MySQL 数据库一个简单的表

CREATE TABLE `client_file` (
  `fileId` bigint(20) NOT NULL AUTO_INCREMENT,
  `fileName` varchar(260) DEFAULT NULL,
  `isFolder` char(1) DEFAULT NULL,
  `fileTime` datetime DEFAULT NULL,
  PRIMARY KEY (`fileId`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

        对于 fileTime 字段,如果使用 java.sql.PreparedStatement 的 setDate 方法,数据库会得到类似 '2011-10-26 00:00:00' 的结果,我们想要类似 '2011-10-26 17:12:50' 的记录。如何使用 JDBC 插入 Timestamp 值?不要使用数据库函数,如 MySQL sysdate。
        解决办法
        创建一个返回当前 timestamp 的函数,例如:

private static java.sql.Timestamp getCurrentTimeStamp() {
 
	java.util.Date today = new java.util.Date();
	return new java.sql.Timestamp(today.getTime());
 
}

        然后通过 preparedStatement.setTimestamp() 设置 timestamp:

String insertTableSQL = "INSERT INTO client_file"
	+ "(fileName, isFolder, fileTime) VALUES"
	+ "(?,?,?)";
preparedStatement = dbConnection.prepareStatement(insertTableSQL);
preparedStatement.setTimestamp(3,getCurrentTimeStamp());

        相关问题
        如果想批量插入一些 client_file 记录呢?
        可以用 java.sql.PreparedStatement 的 addBatch 依次添加多条记录:

	public void insertClientFile(Connection conn, char from) {
		Random random = new Random();
		String sql = "INSERT client_file (fileName, isFolder, fileTime) VALUES(?,?,?)";
		PreparedStatement prest = null;
		try {
			conn.setAutoCommit(false);
			prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
					ResultSet.CONCUR_READ_ONLY);


			// 每个用户 5000 个目录,5000 个文件
			for (int x = 0; x < 5000; x++) {
				
				long fileTime = System.currentTimeMillis();
				fileTime += random.nextInt(100000000);
				// 先加入一个 folder
				prest.setString(1, this.getFileName(from, random));
				prest.setString(2, "1");
				prest.setTimestamp(3, new Timestamp(fileTime));
				prest.addBatch();
				
				// 再加入一个 file
				prest.setString(1, this.getFileName(from, random));
				prest.setString(2, "0");
				prest.setTimestamp(3, new Timestamp(fileTime + random.nextInt(10000)));
				prest.addBatch();
			}
			prest.executeBatch();
			prest.close();
			conn.commit();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

        参考资料

抱歉!评论已关闭.