jdbc读取数据库文本数据

1.在mysq的mydatabasel数据库中建立一张表

use database;
create table if not exists my_clob_test(
id int primary key auto_increment,
big_text text not null
)charset utf8;


2. 工具类(jdbc链接过程代码)

(1)注册驱动
(2)创建链接
(3)释放资源

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Statement;

public final class JdbcUtils {

	private static String url = "jdbc:mysql://localhost:3306/mydatabase";
	private static String user = "root";
	private static String password = "123";

	private JdbcUtils() {
	}

	/**
	 * 注册驱动
	 */
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 创建链接
	 * 
	 * @return
	 */
	public static Connection getConnection() {
		Connection conn = null;

		try {
			conn = (Connection) DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	/**
	 * 释放资源
	 * 
	 * @param rs
	 * @param st
	 * @param conn
	 */
	public static void free(ResultSet rs, Statement st, Connection conn) {
		// 释放ResultSet
		try {
			if (rs != null)
				rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 释放Statement
			try {
				if (st != null)
					st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				// 释放Connection
				try {
					if (conn != null)
						conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

		}

	}

}


3.运行下面的函数create()向数据库中插入一条文本数据

/**
	 * 写数据到表中
	 * @param name
	 * @param birthday
	 * @param money
	 * @throws IOException 
	 */
	static void create() throws IOException {

		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			// 2.创建链接
			conn = (Connection) JdbcUtils.getConnection();
			// 3.建立语句
			String sql = "insert into my_clob_test(big_text) values(?)";
			ps = (PreparedStatement) conn.prepareStatement(sql);			
			//将该目录下的文件内容写到数据库的my_clob_test表中
			File file = new File("src/cn/itcast/jdbc/JdbcUtilsSing.java"); 
			Reader reader = new BufferedReader(new FileReader(file));
			//将“?”代替成数据流
			ps.setCharacterStream(1,reader,file.length());
			
			// 4.执行语句
			int i = ps.executeUpdate();
			reader.close();
			
			System.out.println("i=" + i);

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.free(rs, ps, conn); // 关闭资源
		}
	}

4.运行下面函数read()读取数据库中的文本数据,而后将内容写到当前目录的copy.java文件中

/**
	 * 读取text数据
	 * @throws IOException
	 */
	static void read() throws IOException {

		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			// 2.创建链接
			conn = (Connection) JdbcUtils.getConnection();
			// 3.建立语句
			String sql = "select big_text from my_clob_test";
			ps = (PreparedStatement) conn.prepareStatement(sql);
			// 4.执行语句
			rs = ps.executeQuery();
			
			//5.处理结果
			while(rs.next()){
				
				//	Clob clob = rs.getClob(1);
				//Reader reader = clob.getCharacterStream();
				//以上两句语句可使用下面一句代码代替
				Reader reader = rs.getCharacterStream(1);
				
				//封装数据源
				File file = new File("copy.java");
				//建立写数据流
				Writer writer =new BufferedWriter(new FileWriter(file));
				
				//建立缓存区
				char[] buff = new char[1024];
				//读写数据方式1
				int len=0;
				while((len = reader.read(buff))>0){
					writer.write(buff,0,len);
				}
				//读写数据方式2
//				for(int i = 0;(i = reader.read(buff))>0;){
//					writer.write(buff,0,i);
//				}
				
				writer.close();
				reader.close();
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.free(rs, ps, conn); // 关闭资源
		}
	}
总结:以上几步实现了(1)创建java与mysql数据库的链接(2)将text数据写入数据库(3)读取数据库中的text数据