[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)