二进制数据

mysql提供了四种类型来存储二进制数据:

  • TinyBlob    最多可存储255字节
  • Blob   最多可存储65KB
  • MediumBlob    最多可存储16MB
  • LongBlob   最多可存储4GB
 //从properties文件中加载数据库配置
Properties properties = new Properties();
InputStream inputStream = Class.forName("test.Test").getResourceAsStream("/mysql.properties");
properties.load(inputStream); String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password"); Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password); //插入
String sql1="insert into test_tb (id,blob_col) values (?,?)";
PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
InputStream is = new FileInputStream("resource/a.png");
preparedStatement1.setInt(1,1);
preparedStatement1.setBlob(2,is); //参数是InputStream型
preparedStatement1.executeUpdate(); //查询
String sql2="select blob_col from test_tb where id=?";
PreparedStatement preparedStatement2=connection.prepareStatement(sql2);
preparedStatement2.setInt(1,1);
ResultSet resultSet = preparedStatement2.executeQuery();
if (resultSet.next()){
FileOutputStream os=new FileOutputStream("resource/b.png");
Blob blob = resultSet.getBlob("blob_col");
InputStream binaryStream = blob.getBinaryStream();
byte[] data=binaryStream.readAllBytes();
os.write(data);
} connection.close();

存储的只是文件中的数据,文件名需要使用单独的一列来保存。

一般我们是把文件上传到服务器上,数据库中存储文件路径。如果文件特别小,也可以直接存到数据库中。

日期

mysql中提供了date表示日期,格式:yyyy-mm-dd。

 //插入
String sql1 = "insert into test_tb (date_col) values (?)";
PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
Date date1 = new Date(System.currentTimeMillis()); //获取当前日期。使用当前时间的时间戳构造出日期
preparedStatement1.setDate(1,date1);
preparedStatement1.executeUpdate(); //查询
String sql2 = "select date_col from test_tb";
PreparedStatement preparedStatement2 = connection.prepareStatement(sql2);
ResultSet resultSet = preparedStatement2.executeQuery();
while (resultSet.next()){
Date date2 = resultSet.getDate("date_col");
System.out.println(date2);
}

时间

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。

         //插入
String sql1 = "insert into test_tb (timestamp_col) values (?)";
PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
Timestamp timestamp1 = new Timestamp(System.currentTimeMillis()); //也可使用new Date().getTime()来构造
preparedStatement1.setTimestamp(1,timestamp1);
preparedStatement1.executeUpdate(); //查询
String sql2 = "select timestamp_col from test_tb";
PreparedStatement preparedStatement2 = connection.prepareStatement(sql2);
ResultSet resultSet = preparedStatement2.executeQuery();
while (resultSet.next()){
Timestamp timestamps2 = resultSet.getTimestamp("timestamp_col"); Date date=new Date(timestamps2.getTime()); //此句的Date是java.util.Date
System.out.println(date); //Sun Aug 18 18:56:35 CST 2019的形式,不友好 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
String formatDT = sdf.format(timestamps2); //使用指定的格式来格式化,参数可以是Timestamp、long型的时间戳、Date
System.out.println(formatDT); //2019-08-18 19:06:06
}

也可以使用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 操作二进制数据、日期时间的更多相关文章

  1. Java JDBC批处理插入数据操作

    在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...

  2. Java JDBC批处理插入数据操作(转)

    在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...

  3. JAVA中计算两个日期时间的差值竟然也有这么多门道

    上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...

  4. Java 之 JDK1.8之前日期时间类

    一.JDK1.8之前日期时间类 二. java.lang.System类 System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1 ...

  5. JAVA IO操作:数据操作流:DataOutputStream和DataInputStream

    掌握DataOutputStream和DataInputStream的作用. 可以使用DataOutputStream和DataInputStream写入和读取数据. 在IO包中提供了两个与平台无关的 ...

  6. JDBC操作MySQL数据

    对原始jdbc进行封装 package com.utils; import java.sql.Connection; import java.sql.DriverManager; import jav ...

  7. Java jdbc 操作数据库详解

    原文地址https://www.cnblogs.com/huguodong/p/5910859.html JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  8. Java基础——常用类之日期时间类

    如果有机会,请尝试Java8中全新的时间日期API!(参见Java8新特性随笔) 如果还是使用Java7及之前的版本,那么你可以尝试一些工具类(参考使用工具类相关的Hutool-DateUtil) 如 ...

  9. java JDBC操作MySQL数据库

    一,首先在MYSQL建立一个数据库,例如Geek99DB: create database Geek99DB; use Geek99DB; 然后建立一个表CustomerTab: create tab ...

随机推荐

  1. 【oracle】ORA-00257 archiver error. Connect internal only, until freed

    [原因]归档日志太多导致磁盘空间过小. [解决办法]删除日志或加大空间

  2. 转 Git生成SSH

    SSH keys SSH key 可以让你在你的电脑和Code服务器之间建立安全的加密连接. 先执行以下语句来判断是否已经存在本地公钥: cat ~/.ssh/id_rsa.pub 如果你看到一长串以 ...

  3. DS18B20温度获取

    https://detail.tmall.com/item.htm?id=40083203373&spm=a1z09.2.0.0.31cd2e8d1sb06V&_u=e1qf7bf56 ...

  4. Java 并发系列之十:java 并发框架(2个)

    1. Fork/Join框架 2. Executor框架 3. ThreadPoolExecutor 4. ScheduledThreadPoolExecutor 5. FutureTask 6. t ...

  5. BuaaRedSun团队博客目录——北航社团项目

    目录 一.Scrum Meeting 1. Alpha 2. Beta 3. Gamma 二.测试报告 三.发布说明 四.技术博客 后端 前端 五.习得的软工原理/方法/技能? Alpha Beta ...

  6. Nginx通过geo模式实现限速白名单和全局负载均衡 - 运维笔记

    Nginx的geo模块不仅可以有限速白名单的作用,还可以做全局负载均衡,可以要根据客户端ip访问到不同的server.比如,可以将电信的用户访问定向到电信服务器,网通的用户重 定向到网通服务器”,从而 ...

  7. QML学习(五)——<TextInput和TextEdif输入框>

    这一篇来看两个用于文本输入的项目,分别是作为单行文本输入的 TextInput 和多行文本输入的 TextEdit . 下面开始教程. TextInput TextInput 项目用来显示单行可编辑的 ...

  8. Qt应用程序主窗口之二:拖放操作与打印文档

    一.拖放操作 对于一个实用的应用程序,不仅希望能从文件菜单中打开一个文件,更希望可以通过拖动直接将桌面上的文件拖入程序界面上来打开,就像可以将.pro文件拖入Creator中来打开整个项目一样.Qt中 ...

  9. Union 与 Union All 区别(抄的W3C School的,抄一遍就记住了!)

    Union ,UnionAll 俩都是用来合并两个或以上的查询结果集: Union操作符 :select语句中必须有相同的数列 (相等数量的列,不同结果集同一列的数据类型一致,列的顺序必须相同): u ...

  10. js2048小游戏

    js2048小游戏,方格是怎么合并和移动的 index.html <html> <head> <meta charset="utf-8"> &l ...