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 ...
随机推荐
- Electron实现第一个应用 "hello world"
一. 什么是Electron? 它和NW.js的区别是什么? Electron是GitHub开发的桌面应用开发框架,它支持使用HTML.CSS.JavaScript来构建跨平台的桌面应用. Elect ...
- python--协程知识初识
线程和进程的操作是由程序触发系统接口,最后的执行者是系统:协程的操作则是程序员. 协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续).协程 ...
- django -- ORM实现图书增删改查
表结构设计 上篇我们实现了出版社的增删改查,出版社数据表有两个字段id和name,那图书的表结构怎么设计呢?图书也要有一个主键id,还要有一个名称title,是哪个出版社的,要有个字段press和Pr ...
- cf1206解题报告
目录 cf1206解题报告 A B C D E,F cf1206解题报告 A 模拟 #include <bits/stdc++.h> using namespace std; int n, ...
- 根据 oracle 标准计算超长字符串的长度
Oracle 数据库使用 sql语句 : select lengthb('输入字符串') from dual , 来计算 字符串 所占的字节长度(比如,一个汉字3个字节),但是用这个leng ...
- MySQL重要知识点
可能是全网最好的MySQL重要知识点 | mp.weixin.qq.com 点击蓝色“程序猿DD”关注我 回复“资源”获取独家整理的学习资料! 标题有点标题党的意思,但希望你在看了文章之后不会有这个 ...
- k8s删除pod一直处于terminating状态
我这里的pod是与nfs有关,nfs挂载有问题导致pod有问题,执行完删除命令以后看到pod一直处于terminating的状态. 这种情况下可以使用强制删除命令: kubectl delete po ...
- .NET技术webconfig加密操作
webconfig 加密 aspnet_regiis.exe -pef secion physical_directory -prov provider section表示要加密的配置节 phy ...
- ReentrantReadWriteLock源码
@SuppressWarnings("restriction") public class ReentrantReadWriteLock1 implements ReadWrite ...
- 30分钟用 Laravel 实现一个博客
介绍 Laravel 是一款 MVC架构. 目前最流行的 PHP框架. Laravel的优点在于: 丰富的composer类库支持, 优雅的代码, 未来的主流框架(目前市场占有率最高的框架) Lara ...