[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(存储大量的二进制数据)的更多相关文章
- [19/05/05-星期日] JDBC(Java DataBase Connectivity,java数据库连接)_mysql基本知识
一.概念 (1).是一种开放源代码的关系型数据库管理系统(RDBMS,Relational Database Management System):目前有很多大公司(新浪.京东.阿里)使用: (2). ...
- [19/05/06-星期一] JDBC(Java DataBase Connectivity,java数据库连接)_基本知识
一.概念 JDBC(Java Database Connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准API. J ...
- JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language
JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据 ...
- [19/05/08-星期三] JDBC(Java DataBase Connectivity)_ORM(Object Relationship Mapping, 对象关系映射)
一.概念 基本思想: – 表结构跟类对应: 表中字段和类的属性对应:表中记录和对象对应: – 让javabean的属性名和类型尽量和数据库保持一致! – 一条记录对应一个对象.将这些查询到的对象放到容 ...
- JDBC (Java DataBase Connectivity)数据库连接池原理解析与实现
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- 【学习笔记】JDBC数据库连接技术(Java Database Connectivity)
一.JDBC简介 Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称.它可以把数据持久保存,是一种持久化机制. 1.持久化 持久化就是将程序中的数据在瞬时状态和 ...
- JDBC(Java Database Connectivity)编写步骤
JDBC是代表一组公共的接口,是Java连接数据库技术: JDBC中的这些公共接口和DBMS数据库厂商提供的实现类(驱动jar),是为了实现Java代码可以连接DBMS,并且操作它里面的数据而声名的. ...
- JDBC——Java语言连接数据库的标准
JDBC概述 API JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...
- JDBC:Java连接数据库的桥梁
JDBC(Java DataBase Connection),java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成 ...
随机推荐
- Intelli IDEA快捷键(配合IdeaVim)(转)
Intelli IDEA快捷键(配合IdeaVim)(转) Intelli IDEA开发环境,个人总结的一些常用的快捷键. 想要使用vim方式编辑代码,可以使用Intelli IDEA的IdeaVim ...
- vue-jwt 实战
作用:把用户的信息储存到客户端 每次客户端带上token 校验是否登陆过 1.使用主要有两个api jwt.sign(payload, secretOrPrivateKey, [options, ca ...
- js 变量类型
变量类型分为:基础类型和引用类型 基础类型:boolean, string, number, null, undefined, symbol 引用类型: array, object typeof: 判 ...
- Java HashMap 实现概况及容量
原文链接:https://mp.weixin.qq.com/s/JcnSOGKQlDgaTTFKZFbXnA?scene=25#wechat_redirect 1 简单说说 HashMap 的底层原理 ...
- LeetCode--142--环形链表II(python)
给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...
- CSS背景和CSS3背景background属性
css背景属性用于定义HTML元素的背景 背景属性既可以为单个的单元设置背景,也可以为整个页面设置背景,可以对上述二者的任意组合设置背景,段落.文字.不同状态的链接.图像.内容区域修改其背景样式.设置 ...
- 8:Spring Boot中thymeleaf模板中使用 Shiro标签
1,添加 pom.xml grade: compile('com.github.theborakompanioni:thymeleaf-extras-shiro:1.2.1') 2, Subject ...
- vue.js动态表格增删改代码
新建一个html文件,内容如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...
- 配置服务器(anaconda + jupyter + R)
总结一下整体的流程: 1. 服务器安装anaconda 首先清华镜像站下载anaconda3. 2. 将下载好的文件用scp命令传入服务器 注意:指定端口用-P命令 p大写 本机地址 用户名@服务器I ...
- RabbitMQ消息如何100%投递成功(六)
消息如何保障100%的投递成功? 什么是生产端的可靠性投递? 保障消息的成功发出 保障MQ节点的成功接收 发送端收到MQ节点(Broker)确认应答 完善的消息进行补偿机制(如网络问题没有返回确认应答 ...