java jdbc datetime_Java JDBC 操作二进制数据、日期时间
二进制数据
mysql提供了四种类型来存储二进制数据:
TinyBlob 最多可存储255字节
Blob 最多可存储65KB
MediumBlob 最多可存储16MB
LongBlob 最多可存储4GB
1 //从properties文件中加载数据库配置
2 Properties properties = newProperties();3 InputStream inputStream = Class.forName("test.Test").getResourceAsStream("/mysql.properties");4 properties.load(inputStream);5
6 String driver = properties.getProperty("driver");7 String url = properties.getProperty("url");8 String user = properties.getProperty("user");9 String password = properties.getProperty("password");10
11 Class.forName(driver);12 Connection connection =DriverManager.getConnection(url, user, password);13
14 //插入
15 String sql1="insert into test_tb (id,blob_col) values (?,?)";16 PreparedStatement preparedStatement1 =connection.prepareStatement(sql1);17 InputStream is = new FileInputStream("resource/a.png");18 preparedStatement1.setInt(1,1);19 preparedStatement1.setBlob(2,is); //参数是InputStream型
20 preparedStatement1.executeUpdate();21
22 //查询
23 String sql2="select blob_col from test_tb where id=?";24 PreparedStatement preparedStatement2=connection.prepareStatement(sql2);25 preparedStatement2.setInt(1,1);26 ResultSet resultSet =preparedStatement2.executeQuery();27 if(resultSet.next()){28 FileOutputStream os=new FileOutputStream("resource/b.png");29 Blob blob = resultSet.getBlob("blob_col");30 InputStream binaryStream =blob.getBinaryStream();31 byte[] data=binaryStream.readAllBytes();32 os.write(data);33 }34
35 connection.close();
存储的只是文件中的数据,文件名需要使用单独的一列来保存。
一般我们是把文件上传到服务器上,数据库中存储文件路径。如果文件特别小,也可以直接存到数据库中。
日期
mysql中提供了date表示日期,格式:yyyy-mm-dd。
1 //插入
2 String sql1 = "insert into test_tb (date_col) values (?)";3 PreparedStatement preparedStatement1 =connection.prepareStatement(sql1);4 Date date1 = new Date(System.currentTimeMillis()); //获取当前日期。使用当前时间的时间戳构造出日期
5 preparedStatement1.setDate(1,date1);6 preparedStatement1.executeUpdate();7
8 //查询
9 String sql2 = "select date_col from test_tb";10 PreparedStatement preparedStatement2 =connection.prepareStatement(sql2);11 ResultSet resultSet =preparedStatement2.executeQuery();12 while(resultSet.next()){13 Date date2 = resultSet.getDate("date_col");14 System.out.println(date2);15 }
时间
mysql提供了time表示时间,格式:HH:mm:ss,hh是24小时制。
操作方法和日期的相同,把Date换为Time即可,也是使用System.currentTimeMillis()来构造。
与Date不同的是,Time还可以使用new java.util.Date().getTime()来构造。java.util.Date()构造的Date对象既包括当前日期,也包括当前时间。getTime()获取的是long型的时间戳。
日期时间
mysql提供了timestamp、datetime来存储日期时间,使用方式都差不多,格式都是:yyyy-mm-dd HH:mm:ss。
1 //插入
2 String sql1 = "insert into test_tb (timestamp_col) values (?)";3 PreparedStatement preparedStatement1 =connection.prepareStatement(sql1);4 Timestamp timestamp1 = new Timestamp(System.currentTimeMillis()); //也可使用new Date().getTime()来构造
5 preparedStatement1.setTimestamp(1,timestamp1);6 preparedStatement1.executeUpdate();7
8
9 //查询
10 String sql2 = "select timestamp_col from test_tb";11 PreparedStatement preparedStatement2 =connection.prepareStatement(sql2);12 ResultSet resultSet =preparedStatement2.executeQuery();13 while(resultSet.next()){14 Timestamp timestamps2 = resultSet.getTimestamp("timestamp_col");15
16 Date date=new Date(timestamps2.getTime()); //此句的Date是java.util.Date
17 System.out.println(date); //Sun Aug 18 18:56:35 CST 2019的形式,不友好
18
19 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");20 String formatDT = sdf.format(timestamps2); //使用指定的格式来格式化,参数可以是Timestamp、long型的时间戳、Date
21 System.out.println(formatDT); //2019-08-18 19:06:06
22 }
也可以使用2列来存储,一列存储Date,一列存储Time。
未说明类型的Date、Time、Timestamp,是java.sql包下的。
new Date().getTime()的Date是java.util.Date,默认取当前日期时间,java.sql.Date的构造函数是需要参数的。
datetime、timestamp的异同点
存储格式都是yyyy-mm-dd HH:mm:ss
datetime占用8个字节,timestamp占用4个字节
因为占用的字节数不同,能表示的时间日期范围不一样。timestamp:1970-01-01 00:00:01 ~ 2038-01-19 , datetime范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。
很多时候使用timestamp就够了,对数据库空间的利用率高。
有些字段需要使用系统当前时间,比如添加一个用户时,可能要用字段create_time来记录当前时间,设置默认值为now() 即可。
java jdbc datetime_Java JDBC 操作二进制数据、日期时间相关推荐
- java流与文件——读写二进制数据(DataOutput + DataInput)
[0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--读写二进制数据(DataOutput + DataInput)的相关知识: 0.2) ...
- sqlite 操作二进制数据
sqlite 操作二进制数据需要用一个辅助的数据类型:sqlite3_stmt * . 这个数据类型记录了一个"sql语句".为什么我把 "sql语句" 用双引 ...
- Java使用JDBC向数据库存取二进制数据(如图片,视频,音频等)
前言 上次写了一个用JDBC向数据库存取小说等大文本的案例用到了PreparedStatement和io流的相关知识.Java使用JDBC向数据库存取大文本(比如小说等)https://blog.cs ...
- Java实验9 T3.对二进制数据文件中的所有数据求和
题目要求 (对二进制数据文件中的所有数据求和)假设已经使用DataOutputStream中的writeInt(int)创建一个名为Exercise 19_3.dat的二进制数据文件,文件包含数目不确 ...
- Javascript 操作二进制数据
一个类型化数组(TypedArray)对象描述了一个底层的二进制数据缓冲区(binary data buffer)的一个类数组视图(view).事实上,没有名为 TypedArray 的全局属性,也没 ...
- 高级JAVA开发必备技能:java8 新日期时间API((一)JSR-310:ZoneId 时区和偏移量)(JAVA 小虚竹)
技术活,该赏 点赞再看,养成习惯 大家好,我是小虚竹.之前有粉丝私聊我,问能不能把JAVA8 新的日期时间API(JSR-310)知识点梳理出来.答案是肯定的,谁让我宠粉呢.由于内容偏多(超十万字了) ...
- 6 日期字符串转日期_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...
因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...
- java 包结构 枚举类_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...
因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...
- Java 8系列(一): 日期/时间- JSR310( Date and Time API)
为什么80%的码农都做不了架构师?>>> 全新API的众多好处之一就是明确了日期时间概念,例如:瞬时(instant).长短(duration).日期.时间.时区和周期.同时继 ...
最新文章
- windows10 mysql 5.5.36 安装
- 详细讲解Python中继承内容之 单继承;(一)
- 人才短缺、成本高昂,制造企业智能化转型路径如何破局?
- 如何利用python在yi'ge_【GE查找Python面试题】面试问题:使用 TVM … - 看准网
- 浅谈HTML5中canvas中的beginPath()和closePath()的重要性
- java程序运行时,数据的存储地!
- 随想录(学习《许式伟的架构课》)
- 在android 两个类之间 get,set方法传参使用
- 锐捷认证客户端常见问题解决及简介
- 第四季-专题2-U-Boot新手入门
- 用Hough投票做物体检测的3篇文献
- 实验、配置Eigrp 验证,汇总
- 直播APP源码开发,直播APP源码搭建,如何优化程序?
- [CTF]ROT5/13/18/47位移密码
- oracle入门教程+视频教程
- 大数据分析-第十二章 Spark与数据分析
- pandas从入门到进阶
- 将视频作为网站背景html,将视频作为网页背景
- C 语 言制定了一套 ANSI 标准
- 计算机管理 未分配磁盘,电脑磁盘显示未分配怎么办?磁盘数据如何恢复?
热门文章
- redhat 禁止selinux步骤
- 简单看看PageHelper的配置
- 抢占大数据产业发展先机
- 《C++游戏编程入门(第4版)》——2.4 使用带else子句的if语句序列
- swift懒加载(lazy load)VS OC懒加载
- hdu 5505(GT and numbers)
- REDIS的几个测试结果
- 电容和频率的关系_为什么会有直流电和交流电?频率为什么是50hz?白话科普专业知识...
- android exchange服务,带有“ Service com.android.exchange.ExchangeService
- 查看git是否安装_Java程序员的必备Linux运维技能-安装git