`
BradyZhu
  • 浏览: 247777 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JDBC学习之路(四)大文本和二进制文件的写入

 
阅读更多

老早就纳闷,每次使用MYSQL都是放一些小文本,小东西,不是听说数据库都是很牛逼的,能放灰常大的东西嘛?现在终于知道了向MYSQL中放入大文本大图片或者大二进制的方法了,不过貌似MYSQL对单个文件的放入有些限制,你得学会更改MYSQL的my.ini配置文件才行.

废话不多说,下面上代码,首先是大文本的写入

package com.bird.jdbc;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @use 在Mysql数据库中建立一个TEXT字段用来存放大文本
 * @author bird
 *
 */
public class InsertBigText {
	public static void insertBigText() throws SQLException, IOException{//插入大文本
		Connection conn = null;
		PreparedStatement pt = null;
		ResultSet rs = null;
		try {
			conn = JdbcUtil.getConnecttion();// 建立连接
			
			File file = new File("d:\\test.txt");
			Reader reader = new BufferedReader(new FileReader(file));//使用两层包装

			String sql = "insert into big_text(big) values (?)";// 问号代替num
			pt = conn.prepareStatement(sql);// 创建语句
			pt.setCharacterStream(1, reader);//使用字符流进行传输文本

			int i = pt.executeUpdate();// 执行语句
			System.out.println(i);
			reader.close();
		} finally {
			JdbcUtil.free(rs, pt, conn);
		}

	}
	
	
	public static void read() throws SQLException, IOException{//将数据读出来
		Connection conn = null;
		PreparedStatement pt = null;
		ResultSet rs = null;
		try {
			conn = JdbcUtil.getConnecttion();// 建立连接

			String sql = "select big from big_text ";// 问号代替num
			pt = conn.prepareStatement(sql);// 创建语句

			rs = pt.executeQuery();// 执行语句

			while (rs.next()) {// 得到数据
				Reader reader = rs.getCharacterStream(1);//重点
				File file = new File("d:\\1.txt");
				Writer writer = new BufferedWriter(new FileWriter(file));
				char [] buff = new char[1024];//设立缓冲区
				for(int i = 0; (i = reader.read(buff))> 0 ; ){
					writer.write(buff, 0, i);
				}
				writer.close();//一定要关闭,否则不刷新缓冲区,数据读取不全
				reader.close();
			}
		} finally {
			JdbcUtil.free(rs, pt, conn);
		}
	}
	
	public static void main(String [] args) throws SQLException, IOException{
		insertBigText();
		//read();
	}
}

1.注意,本人是事先在MYSQL中建立好了一个表,表名在代码中写了,创建存放大文本的字段时候一定要注意,一定要使用TEXT类型,如果你觉得小,就使用LONGTEXT,我就是使用LONGBLOB,详情查看MYSQL手册。


下面写二进制文件的写入

package com.bird.jdbc;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class BlobTest {

	/**
	 * @use 存放图片,数据库设置为LONGBLOB
	 * @author bird
	 * @throws IOException
	 * @throws SQLException
	 */
	public static void main(String[] args) throws SQLException, IOException {
		//create();
		read();
	}

	static void read() throws SQLException, IOException {//读取字节流写入文件
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			// 2.建立连接
			conn = JdbcUtil.getConnecttion();
			// conn = JdbcUtilsSing.getInstance().getConnection();
			// 3.创建语句
			st = conn.createStatement();

			// 4.执行语句
			rs = st.executeQuery("select photo from blob_test");

			// 5.处理结果
			while (rs.next()) {
				// Blob blob = rs.getBlob(1);
				// InputStream in = blob.getBinaryStream();
				InputStream in = rs.getBinaryStream("photo");

				File file = new File("d:\\IMG_0002_bak.jpg");
				OutputStream out = new BufferedOutputStream(
						new FileOutputStream(file));
				byte[] buff = new byte[1024];
				for (int i = 0; (i = in.read(buff)) > 0;) {
					out.write(buff, 0, i);
				}
				out.close();//记住,一定要关闭
				in.close();
			}
		} finally {
			JdbcUtil.free(rs, st, conn);
		}
	}

	static void create() throws SQLException, IOException {//向数据库中写入图片
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// 2.建立连接
			conn = JdbcUtil.getConnecttion();
			// conn = JdbcUtilsSing.getInstance().getConnection();
			// 3.创建语句
			String sql = "insert into blob_test(photo) values (?) ";
			ps = conn.prepareStatement(sql);
			File file = new File("d:\\Lighthouse.jpg");
			InputStream in = new BufferedInputStream(new FileInputStream(file));

			ps.setBinaryStream(1, in, (int) file.length());
			// 4.执行语句
			int i = ps.executeUpdate();

			in.close();

			System.out.println("i=" + i);
		} finally {
			JdbcUtil.free(rs, ps, conn);
		}
	}
}

1.我第一次插入图片的时候很悲催的失败了,说什么数据库版本不符合,扯淡。


2.提前在数据库中插入表,字段为LONGBLOB


3.注意,如果mysql是gbk编码的要在mysql安装目录下的配置文


件my.ini将字符集设置Latin1,输入图片后再改回来,否则无法插


入正确。


4.很多类型的单个最大文件插入上线都可以在配置文件中更改


5多查一查Mysql手册


注意如果mysql是gbk编码的要先把mysql的字符集设置Latin1,输入完图片后再设回来


分享到:
评论

相关推荐

    Java核心技术II(第8版)

    1.3 读入和写出二进制数据 1.3.1 随机访问文件 1.4 ZIP文档 1.5 对象流与序列化 1.5.1 理解对象序列化的文件格式 1.5.2 修改缺省的序列化机制 1.5.3 序列化单例和类型安全的枚举 1.5.4 版本管理 1.5.5 为克隆使用...

    Python Cookbook

    1.11 检查一个字符串是文本还是二进制 23 1.12 控制大小写 25 1.13 访问子字符串 26 1.14 改变多行文本字符串的缩进 29 1.15 扩展和压缩制表符 31 1.16 替换字符串中的子串 33 1.17 替换字符串中的子串-Python...

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    MySQL5.1参考手册官方简体中文版

    8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-...

    MySQL 5.1中文手冊

    8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-...

    MySQL 5.1参考手册

    8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-...

    MySQL 5.1参考手册 (中文版)

    8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-...

    mysql官方中文参考手册

    8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-...

    MYSQL中文手册

    8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. ...

    MySQL 5.1参考手册中文版

    8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和数据库...

    JAVA_API1.6文档(中文)

    javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...

    MySQL 5.1官方简体中文参考手册

    8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-...

    mysql5.1中文手册

    mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. ...

Global site tag (gtag.js) - Google Analytics