Java JDBC 操作二进制数据、日期时间
二进制数据
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 操作二进制数据、日期时间的更多相关文章
- Java JDBC批处理插入数据操作
在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...
- Java JDBC批处理插入数据操作(转)
在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...
- JAVA中计算两个日期时间的差值竟然也有这么多门道
上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...
- Java 之 JDK1.8之前日期时间类
一.JDK1.8之前日期时间类 二. java.lang.System类 System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1 ...
- JAVA IO操作:数据操作流:DataOutputStream和DataInputStream
掌握DataOutputStream和DataInputStream的作用. 可以使用DataOutputStream和DataInputStream写入和读取数据. 在IO包中提供了两个与平台无关的 ...
- JDBC操作MySQL数据
对原始jdbc进行封装 package com.utils; import java.sql.Connection; import java.sql.DriverManager; import jav ...
- Java jdbc 操作数据库详解
原文地址https://www.cnblogs.com/huguodong/p/5910859.html JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...
- Java基础——常用类之日期时间类
如果有机会,请尝试Java8中全新的时间日期API!(参见Java8新特性随笔) 如果还是使用Java7及之前的版本,那么你可以尝试一些工具类(参考使用工具类相关的Hutool-DateUtil) 如 ...
- java JDBC操作MySQL数据库
一,首先在MYSQL建立一个数据库,例如Geek99DB: create database Geek99DB; use Geek99DB; 然后建立一个表CustomerTab: create tab ...
随机推荐
- RabbitMQ六种队列模式-简单队列模式
前言 RabbitMQ六种队列模式-简单队列 [本文]RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主 ...
- Qt绘制中国象棋棋盘
这里主要用的是#include <QPainter>里面的paintEvent void Board::paintEvent(QPaintEvent*) { QPainter painte ...
- Unix/Linux小计
1. centos查看cpu信息 cat /proc/cpuinfo processor有几个就是有几个cpu,每一列是每个cpu的信息 每个processor中的cores是当前cpu中有几个核心. ...
- 2018-2019-2 20165313 《网络对抗技术》 Exp 8 Web基础
一.实践要求: (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. (2).Web前端javascip ...
- 【Gamma】“北航社团帮”展示博客
目录 团队介绍 项目愿景 整个项目的预期典型用户 功能展示 原预期用户数量 项目使用情况数据分析 用户量变化 学生认证人数 社长认证人数 入社申请数 活动发布 新闻发布 网页端使用情况 小程序打开次数 ...
- 依赖注入之unity(winform方式)
依赖注入之unity(winform方式) 要讲unity就必须先了解DI和IOC及DIP,如下链接提供DI和IOC的基础:https://www.cnblogs.com/zlp520/p/12015 ...
- 【转】调用百度API,HTML在线文字转语音播报
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- AKKA HTTP 简单示例
AKKA HTTP 简单示例 依赖包: compile("com.typesafe.akka:akka-http_2.13:10.1.8") compile("com.t ...
- java8新特性七-Date Time API
Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理. 在旧版的 Java 中,日期时间 API 存在诸多问题,其中有: 非线程安全 − java.ut ...
- 【剑指offer】构建乘积数组
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...