[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语言编写的类和接口组成 ...
随机推荐
- string遍历
#include <iostream>#include <string> using namespace std;int main(int argc, const char * ...
- Python四种实现单例模式的方法
在这之前,先了解super()和__new__()方法 super()方法: 返回一个父类或兄弟类类型的代理对象,让你能够调用一些从继承过来的方法. 它有两个典型作用: a. 在单继承的类层次结构中, ...
- XTemplate模板学习和使用总结
XTemplate模板学习和使用总结 前言 XTemplate是我接触的第一个模板语言,用在公司的一个NodeJS项目中,跟它打交道经常是因为需要使用它的语法向模板中注入数据.因为是刚入门前端不久 ...
- 在Wi-Fi路由器中发现了新的安全漏洞
黑客利用两种互联网通用协议的互动的漏洞:传输控制协议,或TCP和Wi-Fi.该漏洞利用并不针对任何传统的安全漏洞.相反,安全方面的弱点在于20多年前制定的基本Wi-Fi设计决策极难改变. 中国黑客教父 ...
- display:line-block
1.那是因为第二个标签是inline-block,它的对齐方式是基线对齐,对齐的是第一个元素里面字的下划线,所以第二个元素的下边缘对齐的是1的下划线,只要在第二个元素里面加内容或者加个空格( )就可以 ...
- Python---进阶---文件操作---获取文件夹下所有文件的数量和大小
一.####编写一个程序,统计当前目录下每个文件类型的文件数 ####思路: - 打开当前的文件夹 - 获取到当前文件夹下面所有的文件 - 处理我们当前的文件夹下面可能有文件夹的情况(也打印出来) - ...
- 链接收藏:bullet物理引擎不完全指南
这个也是博客园的文章,编辑得也很好,就不copy了,结尾还有PDF: https://www.cnblogs.com/skyofbitbit/p/4128347.html 完结
- mysql Alias操作符 语法
mysql Alias操作符 语法 作用:为列名称和表名称指定别名 大理石构件 语法:SELECT column_name(s) FROM table_name AS alias_name mysql ...
- Activiti组任务(十)
1 Candidate-users 候选人 1.1需求 在流程定义中在任务结点的 assignee 固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn 文件中,如果临时任务负责人变更则需要修 ...
- R Seurat 单细胞处理pipline 代码
options(stringsAsFactors = F ) rm(list = ls()) library(Seurat) library(dplyr) library(ggplot2) libra ...