[19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存储大量的文本数据)与BLOB(存储大量的二进制数据)

Posted id-qingxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存储大量的文本数据)与BLOB(存储大量的二进制数据)相关的知识,希望对你有一定的参考价值。

一、 CLOB(Character Large Object )

– 用于存储大量的文本数据

– 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的。而非一般的字段,一次即可读出数据。

mysql中相关类型:

– TINYTEXT最大长度为255  (28–1)字符的TEXT列。

– TEXT[(M)]最大长度为65,535  (216–1)字符的TEXT列。

– MEDIUMTEXT最大长度为16,777,215  (224–1)字符的TEXT列

– LONGTEXT最大长度为4,294,967,295或4GB (232–1)字符的TEXT列。

/***
 * 操纵大字段  测试CLOB 文本大对象
 */
package com.sxt.jdbc;

import java.io.ByteArrayInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Demo06 {
    public static void main(String[] args) throws Exception  {
        Class.forName("com.mysql.jdbc.Driver");
        Connection coon=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

        //1、向数据库中写入大字节的数据
        PreparedStatement ps1=coon.prepareStatement("update t_user set myInfo=?  where id=1");
        ps1.setClob(1, new FileReader("d://LiBai.txt"));//从文件中读取数据    
        //ps1.executeUpdate();

        PreparedStatement ps2=coon.prepareStatement("update t_user set myInfo=?  where id=2");
        ps2.setClob(1, new InputStreamReader(new ByteArrayInputStream("杜甫,唐朝诗人".getBytes())));
        //ps2.executeUpdate();//读取字节流,将程序中的字符串输入到数据库中

        //2、从数据库中读取数据
        PreparedStatement ps3=coon.prepareStatement("select *from t_user where id=?");
        ps3.setObject(1, 1);
        ResultSet rs=ps3.executeQuery();
        while (rs.next()) {//
            Clob cl=rs.getClob("myInfo");
            Reader reader=cl.getCharacterStream();//返回一个字符流 然后需要读取字符流
            
            int temp=0;
            while ((temp=reader.read())!=-1) {
                System.out.print((char)temp);                        
            }        
        }    
    }
}

 

二、BLOB(Binary Large Object)

– 用于存储大量的二进制数据

– 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的。而非一般的字段,一次即可读出数据。

• Mysql中相关类型:

– TINYBLOB最大长度为255(28–1)字节的BLOB列。

– BLOB[(M)]最大长度为65,535(216–1)字节的BLOB列。

– MEDIUMBLOB最大长度为16,777,215(224–1)字节的BLOB列。

– LONGBLOB最大长度为4,294,967,295或4GB(232–1)字节的BLOB列。

/***
 * 操纵大字段  测试BLOB 文本大对象 例如插入用户头像
 */
package com.sxt.jdbc;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Demo07 {
    public static void main(String[] args) throws Exception  {
        Class.forName("com.mysql.jdbc.Driver");
        Connection coon=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

        //1、向数据库中写入二进制的数据 如jpg图片
        PreparedStatement ps1=coon.prepareStatement("update t_user set headImg=?  where id=1");
        ps1.setBlob(1, new FileInputStream("d://LiBai.jpg"));//从文件中读取数据    
        ps1.executeUpdate();
        

        //2、从数据库中读取数据
        PreparedStatement ps3=coon.prepareStatement("select *from t_user where id=?");
        ps3.setObject(1, 1);
        ResultSet rs=ps3.executeQuery();
        while (rs.next()) {//
            Blob bl=rs.getBlob("headImg");
            InputStream reader=bl.getBinaryStream();//返回一个输入流 然后需要读取输入流
            
            OutputStream os=new FileOutputStream("libai.jpg");
            int temp=0;
            while ((temp=reader.read())!=-1) {
                os.write(temp);                
            }
            reader.close();
            os.close();
        }
    }
}

三、封装一些信息

MySQL:

mysqlDriver=com.mysql.jdbc.Driver

mysqlURL=jdbc\:mysql\://localhost\:3306/testjdbc

mysqlUser=root

mysqlPwd=123456

Oracle:

oracleDriver=oracle.jdbc.driver.OracleDriver

oracleURL=jdbc\:oracle\:thin\:@localhost\:1521\:orcl

oracleUser=scott

oraclePwd=tiger

 

【资源文件】

mysqlDriver=com.mysql.jdbc.Driver
mysqlURL=jdbc\:mysql\://localhost\:3306/testjdbc
mysqlUser=root
mysqlPwd=123456

 【基本信息】

/**
 * 可以帮连接数据的信息写出一各类
 * 具体信息在db.properties这个文件中
 */
package com.sxt.jdbc;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;


public class JDBCUtil {
    static Properties pros=null;
    static{//静态代码块 在执行JDBCUtil这个类时只执行一次,用作初始化
         pros=new Properties();
        try {//读取具体信息
            pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }    
    }
    
    public static Connection getMysqlConnection() throws Exception {
        Class.forName(pros.getProperty("mysqlDriver"));//便于修改源数据库的账号和密码等信息
        return  DriverManager.getConnection(pros.getProperty("mysqlURL"),
                pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));
        
    }

}

 

以上是关于[19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存储大量的文本数据)与BLOB(存储大量的二进制数据)的主要内容,如果未能解决你的问题,请参考以下文章

Java 使用 JDBC 连接数据库的代码整合[MySqlSqlServerOracle]-[经过设计模式改造](2020年寒假小目标01)

java中如何获取日期时间中的星期几?

java怎样通过日期获取星期几?

帮编写 java 获取星期几

java知道当前时间,怎样知道星期几???

java编程打印大学四年的生日都是星期几?