二进制数据

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 操作二进制数据、日期时间相关推荐

  1. java流与文件——读写二进制数据(DataOutput + DataInput)

    [0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--读写二进制数据(DataOutput + DataInput)的相关知识: 0.2) ...

  2. sqlite 操作二进制数据

    sqlite 操作二进制数据需要用一个辅助的数据类型:sqlite3_stmt * . 这个数据类型记录了一个"sql语句".为什么我把 "sql语句" 用双引 ...

  3. Java使用JDBC向数据库存取二进制数据(如图片,视频,音频等)

    前言 上次写了一个用JDBC向数据库存取小说等大文本的案例用到了PreparedStatement和io流的相关知识.Java使用JDBC向数据库存取大文本(比如小说等)https://blog.cs ...

  4. Java实验9 T3.对二进制数据文件中的所有数据求和

    题目要求 (对二进制数据文件中的所有数据求和)假设已经使用DataOutputStream中的writeInt(int)创建一个名为Exercise 19_3.dat的二进制数据文件,文件包含数目不确 ...

  5. Javascript 操作二进制数据

    一个类型化数组(TypedArray)对象描述了一个底层的二进制数据缓冲区(binary data buffer)的一个类数组视图(view).事实上,没有名为 TypedArray 的全局属性,也没 ...

  6. 高级JAVA开发必备技能:java8 新日期时间API((一)JSR-310:ZoneId 时区和偏移量)(JAVA 小虚竹)

    技术活,该赏 点赞再看,养成习惯 大家好,我是小虚竹.之前有粉丝私聊我,问能不能把JAVA8 新的日期时间API(JSR-310)知识点梳理出来.答案是肯定的,谁让我宠粉呢.由于内容偏多(超十万字了) ...

  7. 6 日期字符串转日期_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  8. java 包结构 枚举类_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  9. Java 8系列(一): 日期/时间- JSR310( Date and Time API)

    为什么80%的码农都做不了架构师?>>>    全新API的众多好处之一就是明确了日期时间概念,例如:瞬时(instant).长短(duration).日期.时间.时区和周期.同时继 ...

最新文章

  1. windows10 mysql 5.5.36 安装
  2. 详细讲解Python中继承内容之 单继承;(一)
  3. 人才短缺、成本高昂,制造企业智能化转型路径如何破局?
  4. 如何利用python在yi'ge_【GE查找Python面试题】面试问题:使用 TVM … - 看准网
  5. 浅谈HTML5中canvas中的beginPath()和closePath()的重要性
  6. java程序运行时,数据的存储地!
  7. 随想录(学习《许式伟的架构课》)
  8. 在android 两个类之间 get,set方法传参使用
  9. 锐捷认证客户端常见问题解决及简介
  10. 第四季-专题2-U-Boot新手入门
  11. 用Hough投票做物体检测的3篇文献
  12. 实验、配置Eigrp 验证,汇总
  13. 直播APP源码开发,直播APP源码搭建,如何优化程序?
  14. [CTF]ROT5/13/18/47位移密码
  15. oracle入门教程+视频教程
  16. 大数据分析-第十二章 Spark与数据分析
  17. pandas从入门到进阶
  18. 将视频作为网站背景html,将视频作为网页背景
  19. C 语 言制定了一套 ANSI 标准
  20. 计算机管理 未分配磁盘,电脑磁盘显示未分配怎么办?磁盘数据如何恢复?

热门文章

  1. redhat 禁止selinux步骤
  2. 简单看看PageHelper的配置
  3. 抢占大数据产业发展先机
  4. 《C++游戏编程入门(第4版)》——2.4 使用带else子句的if语句序列
  5. swift懒加载(lazy load)VS OC懒加载
  6. hdu 5505(GT and numbers)
  7. REDIS的几个测试结果
  8. 电容和频率的关系_为什么会有直流电和交流电?频率为什么是50hz?白话科普专业知识...
  9. android exchange服务,带有“ Service com.android.exchange.ExchangeService
  10. 查看git是否安装_Java程序员的必备Linux运维技能-安装git