JDBC入门(5)--- 时间类型、大数据
一、时间类型
数据库类型与Java中类型的对应关系:
DATE->java.sql.Date:表示日期,只有年月日,没有时分秒,会丢失时间。
TIME->java.sql.Time:表示时间,只有时分秒,没有年月日,会丢失日期。
TIMESTAMP->java.sql.Timestamp:表示时间戳,有年月日时分秒,以及毫秒。
- 领域对象(domain)中的所有属性不能出现java.sql包下的对象,即不能使用java.sql.Date
- ResultSet#getDate()返回的是java.sql.Date()
- PreparedStatement#setDate(int,Date),其中第二个参数也是java.sql.Date
时间类型的转换:
- java.util.Date ->java.sql.Date、Time、Timestamp
- 把util的Date转换成毫秒值
- 使用毫秒值创建sql的Date、Time、Timestamp
- java.sql.Date、Time、Timestamp->java.util.Date
- 这一不不需要处理了:因为java.sql.Date是java.util.Date的子类。
java.util.Date date = new java.util.Date();
long l = date.getTime();
java.sql.Date sqlDate = new java.sql.Date(l);
二、大数据
所谓大数据,就是大的字节数据,或大的字符数据。标准SQL中提供了如下类型来保存大数据类型:
| 类型 | 长度 |
| tinyblob | 28-1B(256B) |
| blob | 216-1B(64K) |
| mediumblob | 224-1B(16M) |
| longblob | 232-1B(4G) |
| tinyclob | 28-1B(256B) |
| clob | 216-1B(64K) |
| mediumclob | 224-1B(16M) |
| longclob | 232-1B(4G) |
但是,在mysql中没有提供tinyclob、clob、mediumclob、longclob四种类型,而是使用如下四种类型来处理文本大数据:
| 类型 | 长度 |
| tinytext | 28-1B(256B) |
| text | 216-1B(64K) |
| mediumtext | 224-1B(16M) |
| longtext | 232-1B(4G) |
实例:
1 package demo4;
2
3 import demo3.JdbcUtils;
4 import org.apache.commons.io.IOUtils;
5 import org.junit.Test;
6 import javax.sql.rowset.serial.SerialBlob;
7 import java.io.*;
8 import java.sql.*;
9
10 public class Demo4 {
11 /**
12 * 把map3保存到数据库中、JdbcUtils为自建类
13 */
14 @Test
15 public void fun1() {
16 Connection con = null;
17 PreparedStatement pstmt = null;
18 Blob blob;
19 try {
20 con = JdbcUtils.getConnection();
21 String sql = "INSERT INTO tab_bin VALUES (?,?,?)";
22 pstmt = con.prepareStatement(sql);
23 pstmt.setInt(1,1);
24 pstmt.setString(2,"薛之谦-一半.mp3");
25 /**
26 * 需要得到Blob
27 * 1、我们有的是文件,目标是Blob
28 * 2、先把文件变成byte[]
29 * 3、再使用byte[]创建Blob
30 */
31 byte[] bytes = IOUtils.toByteArray(new FileInputStream("/Users/Shared/薛之谦-一半.mp3"));
32 //使用byte[]创建Blob
33 blob = new SerialBlob(bytes);
34 //设置参数
35 pstmt.setBlob(3,blob);
36 pstmt.executeUpdate();
37 } catch (SQLException e) {
38 e.printStackTrace();
39 } catch (IOException e) {
40 e.printStackTrace();
41 } finally {
42 try {
43 if (pstmt != null) pstmt.close();
44 if (con != null) con.close();
45 } catch (SQLException e) {
46 e.printStackTrace();
47 }
48 }
49 }
50 /**
51 * 从数据库中读取map3
52 */
53 @Test
54 public void fun2() {
55 Connection con = null;
56 PreparedStatement pstmt = null;
57 ResultSet rs = null;
58 Blob blob;
59 //1、得到连接
60 try {
61 con = JdbcUtils.getConnection();
62 //2、给出select语句模板,创建pstmt
63 String sql = "SELECT * FROM tab_bin";
64 pstmt = con.prepareStatement(sql);
65 //3、pstmt执行查询,得到ResultSet
66 rs = pstmt.executeQuery();
67 //获取名为DATA列的数据
68 if (rs.next()) {
69 blob = rs.getBlob("DATA");
70 //把Blob变成硬盘上的文件
71 /*
72 * 1、通过Blob得到输入流对象
73 * 2、自己创建输出流对象
74 * 3、把输入流的数据写到输出流中
75 * */
76 InputStream in = blob.getBinaryStream();
77 OutputStream out = new FileOutputStream("/Users/Mac/Downloads/薛之谦-一半2.mp3");
78 IOUtils.copy(in, out);
79 }
80 } catch (SQLException e) {
81 e.printStackTrace();
82 } catch (IOException e) {
83 e.printStackTrace();
84 } finally {
85 try {
86 if (rs != null) rs.close();
87 if (pstmt != null) pstmt.close();
88 if (con != null) con.close();
89 } catch (SQLException e) {
90 e.printStackTrace();
91 }
92 }
93 }
94 }
当存储数据大于设定值时会报如下异常:
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4188642 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
需要对mysql配置文件(Mac中 /etc/my.cnf)相应位置进行添加修改:

保存关闭,重启MySQL服务器即可解决。
JDBC入门(5)--- 时间类型、大数据的更多相关文章
- JDBC 复习3 存取Oracle大数据 clob blob
1 目录结构记得导包咯 mysql oracle 2 代码,DBUtil工具类见前面的随笔博文 package dbex.mysql; import java.io.BufferedReader; i ...
- java学习第13天( java获取当前时间,有关大数据的运算及精确数字运算,Date类)
一 java获取当前时间 学习一个函数,得到当前时间的准确值 System.currectTimeMillis(). 可以得到以毫秒为单位的当前时间.它主要用于计算程序运行时间,long start= ...
- 关于PHPExcel上传Excel单元格富文本和时间类型读取数据问题
当用PHPExcel做Excel上传文件读取数据时,print_r出来的数据,竟然发现其中有几个单元格返回的是PHPExcel富文本对象,而且时间类型的单元格返回的是一个不是时间戳的五位数.就像下图那 ...
- JDBC 复习2 存取mysql 大数据
大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据 mysql的大数据分为2种 blob 和 text ,没有cl ...
- springboot 入门四-时间类型处理
springboot 自带了jackson来处理时间,但不支持jdk8 LocalDate.LocalDateTime的转换. 对于Calendar.Date二种日期,转换方式有二种: 一.统一app ...
- 为什么我们要使用int类型来保存时间类型的数据。
1.如果数据保存的是timestamp类型那么,如果某个服务器系统时区配置错误,那么悲剧的是通过该服务器写入的时间都是有偏差的. 如果使用int类型保存unix时间戳的话,那么就是在前端展示的时候转 ...
- 如果在使用谷歌的gson的时候,在返回时间类型的数据的时候,
可能会出现在long类型的时间后面多3个0 如下图所示 可以自己创建一个json序列化的类 public class Date2LongSerializer extends JsonSerialize ...
- Python DataFrame to_sql方法插入日期或时间类型的数据时 报ORA-01861 文字与字符串不匹配 的解决方法
业务团队近期提出一个需求: 希望在接口调用之前先批量插入Excel中的数据作为数据预置 这个需求以前已经开发完成 本来以为可以很快调试完毕 没成想遭遇一个难关 DataFrame.to_sql方法在执 ...
- oracle中两个时间类型的数据相减默认得到的是天数。
想要得到月份数,需要使用months_between函数. months_between(to_date('201707','yyyyMM'),to_date('201706','yyyyMM')) ...
- Hadoop入门到实战全套大数据Hadoop学习视频
资料获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章或者后台回复[Hadoop]获取,即可获取资源下载链接 更多资源获取,请关注公总号RaoRao1994
随机推荐
- Android 线刷小白教程
Android 线刷小白教程 再说一遍,绝不使用刷机精灵等软件. 一.概念 安卓系统一般把rom芯片分成7个区,如果再加上内置sd卡这个分区,就是8个: hboot分区----------负责启动. ...
- leetcode-139-单词拆分(递归超时,动归解决)
题目描述: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字 ...
- 2016级算法期末模拟练习赛-F.AlvinZH的青春记忆IV
1086 AlvinZH的青春记忆IV 思路 难题,动态规划. 这是一道很有意思的题,因为它不仅卡了时间,也卡了空间,而且卡的很妙很迷. 光是理解题意已经有点难度,简化题意:两串数字序列,相等的数字定 ...
- Linux RPM和YUM
rpm包的管理:sealed 介绍: 一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中.它生成具有.RPM扩展名的文件. RPM是RedHat Package Manager(Re ...
- jQuery 发送 ajax json 请求。。
$.extend({ postJson: function (data) { data = data || {} $.ajax({ type: "POST", url: data. ...
- geatpy - 遗传和进化算法相关算子的库函数(python)
Geatpy The Genetic and Evolutionary Algorithm Toolbox for Python Introduction Website (including doc ...
- poj3207 Ikki's Story IV - Panda's Trick 2-SAT
题目传送门 题意:在一个圆上顺时针安放着n个点,给出m条线段连接端点,要求线段不相交,线段可以在圆内也可以在圆外,问是否可以. 思路:假设一条线段,放在圆外是A,放在园内是A',那么两条线段如果必须一 ...
- Windows10 安装 .Net 3.5 失败的解决方案
最近因为使用一个公司内部的工具,需要安装.Net 3.5 SP1, 却发现无论如何都安装不上,无论是通过在线和离线安装包,还是通过Windows自带的feature安装功能,每次都是会提示错误0x80 ...
- 【第2次会议记录_2018.5.27】—— [ 算法原理 ]:手工特征提取的概念问题。(by_wanghao)
1.提取 特征点 .特征描述子 与 提取特征向量 之间的区别: (1).特征点:指的是一张图片上比较有代表性的‘位置’,提取特征点就是把图片中这些有代表性的位置给标出来. (2).特征描述子:当提取出 ...
- java翻译到mono C#实现系列(1) 重写返回键按下的事件
今天看到群里的朋友问怎么按下返回键的时候提示信息,百度了下,就参考网上一个java版示例做了.没啥技术含量,就权当丰富下mono for android的小代码. 直接在mono新建的APP上修改的. ...