JDBC入门(5)— 时间档次、大数量

 

光阴档次的转换:

 

数据库类型与Java中项目的附和关系:

 

当存储数据超出设定值时会报如下非凡:

保存关闭,重启MySQL服务器即可解决。

 

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.

 

类型 长度
tinytext 28-1B(256B)
text 216-1B(64K)
mediumtext 224-1B(16M)
longtext 232-1B(4G)

 

MySQL 1

 

二、大数据

类型 长度
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四种档次,而是使用如下四连串型来拍卖文本大数据:

TIMESTAMP->java.sql.提姆estamp:表示时间戳,有年月日时分秒,以及毫秒。

DATE->java.sql.Date:表示日期,只有年月日,没有时分秒,会丢掉时间。

 

 

 

  • 世界对象(domain)中的所有属性无法出现java.sql包下的对象,即不可能采纳java.sql.Date
  • ResultSet#getDate()重回的是java.sql.Date()
  • PreparedStatement#setDate(int,Date),其中第二个参数也是java.sql.Date

所谓大数额,就是大的字节数据,或大的字符数据。标准SQL中提供了如下类型来保存大数据类型:

需要对mysql配置文件(Mac中 /etc/my.cnf)相应岗位展开添加修改:

 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 }

 

 

java.util.Date date = new java.util.Date();

long l = date.getTime();

java.sql.Date sqlDate = new java.sql.Date(l);

 

一、时间档次

实例:

 

TIME->java.sql.提姆(Tim)e:表示时间,唯有时分秒,没有年月日,会丢掉日期。

  • MySQL,java.util.Date ->java.sql.Date、Time、Timestamp
    • 把util的Date转换成毫秒值
    • 行使毫秒值创制sql的Date、提姆(Tim)e、提姆estamp
  • java.sql.Date、Time、Timestamp->java.util.Date 
    • 这一不不需要处理了:因为java.sql.Date是java.util.Date的子类。  
网站地图xml地图