一、时间类型

数据库类型与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服务器即可解决。

最新文章

  1. 高程(3):操作符、for、for...in循环、break/continue/return语句、函数等
  2. 数据结构Java实现01----算法概述
  3. Python 基礎 - 字典的操作使用
  4. 留只脚印(DP)
  5. mysql中的if判断
  6. Python学习笔记17—Tornado
  7. Linux虚拟主机通过程序实现二级域名绑定到子目录
  8. Modal的跳转方法为什么会显得那么奇怪
  9. sql records
  10. MVC3 Razor视图引擎的基础语法
  11. Service Reference
  12. java 计算器SWT/RAP(版本3)键盘鼠标兼容
  13. mongodb工具
  14. jquery1.9学习笔记 之层级选择器(三)
  15. Linux进程间通信——使用消息队列
  16. [转]Jailbreak Detection Methods
  17. 1.JavaScript 教程:基础语法
  18. python设置虚拟环境
  19. mint修改host
  20. Battle Zone 战争地带

热门文章

  1. iOS --UIScrollView的学习(三)自动轮播
  2. python中type、class、object的区别
  3. 浅谈javascript和python语言的深拷贝
  4. POJ 2196
  5. k-近邻算法 python实现
  6. flask _bootstrap中使用flash
  7. appium Capabilities的各个标签
  8. mysql grant权限总结
  9. Mac 10.12安装截图工具Jietu
  10. linux安装oracle 报错[INS-20802] Oracle Net Configuration Assistant failed 解决办法