jdbc_数据类型与日期问题_访问大段文本数据_二进制类型的数据

数据类型与日期问题_访问大段文本数据_二进制类型的数据

 

 /**********************java.util.Date转成java.sql.Date存储****************************************/
 /**********************用jdbc存储大段文本数据(mysql中字段类型为text)****************************************/
 /**********************用jdbc存储二进制数据(mysql中字段类型为BLOB)****************************************/

 

  /**********************java.sql.Date转成java.util.Date输出****************************************/
  /**********************用jdbc输出大段文本数据(流方式)****************************************/
  /**********************用jdbc输出二进制数据(流方式)****************************************/

 



 

-- Table "clob_test" DDL

CREATE TABLE `clob_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `birthday` date DEFAULT NULL,
  `big_text` text,
  `big_bit` longblob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=gbk;


 

 

ClobTest.java

package com.dwt1220;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;


public class ClobTest {
	
	public static void main(String[] args) throws Exception {
		create(new Date());
		
		read();
	}
	
	static void create(Date date) throws SQLException, IOException {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			// 2.建立连接
			conn = JdbcUtils.getConnection();
		
			// 3.创建语句
			String sql="insert into clob_test(birthday,big_text,big_bit)values(?,?,?)";
			ps =conn.prepareStatement(sql);

	/**********************java.util.Date转成java.sql.Date存储****************************************/
			ps.setDate(1, new java.sql.Date(new Date().getTime()));
	
			
	/**********************用jdbc存储大段文本数据(mysql中字段类型为text)****************************************/
			File file=new File("src/com/dwt1220/JdbcUtils.java");
			Reader reader=new BufferedReader(new FileReader(file));	
			//不支持中文ps.setAsciiStream(2,reader,(int)file.length())
			//输入大数据,支持中文
			ps.setCharacterStream(2,reader,(int)file.length());
			
	/**********************用jdbc存储二进制数据(mysql中字段类型为BLOB)****************************************/
			File fileImg=new File("111.jpg");
			FileInputStream fis = new FileInputStream(fileImg);	
		//ps.setBinaryStream(3,fis,fis.available());报语法错误,使用下面3行代码来实现。

			byte buf[] = new byte[fis.available()];
			fis.read(buf);
			ps.setBytes(3,buf);
			
			// 4.执行语句
			int i=ps.executeUpdate();
			
//			in.close();
			
			System.out.println("i="+i);
			
		} finally {
			JdbcUtils.free(rs, ps, conn);
		}
	}
	
	static void read() throws SQLException, IOException {
		Connection conn = null;
		PreparedStatement ps = null;//使用PreparedStatement防止SQL注入
		ResultSet rs = null;

		try {
			// 2.建立连接
			conn = JdbcUtils.getConnection();

			// 3.创建语句
			String sql="select birthday,big_text,big_bit from clob_test";
			ps = conn.prepareStatement(sql);
			
			// 4.执行语句
			rs = ps.executeQuery();

			// 5.处理结果
			while (rs.next()) {
		/**********************java.sql.Date转成java.util.Date输出****************************************/
				System.out.println(rs.getDate("birthday") + "\t"//java.sql.Date继承自java.util.Date。
						+ rs.getObject("big_text"));
		
		/**********************用jdbc输出大段文本数据(流方式)****************************************/
				Reader reader=null;
				//Clob clob=rs.getClob("big_text");
				//reader=clob.getCharacterStream();
				//or
				reader=rs.getCharacterStream("big_text");
				File file=new File("JdbUtils_bak.java");
				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();
				
		/**********************用jdbc输出二进制数据(流方式)****************************************/
				InputStream in=null;
//				Blob blob=rs.getBlob("big_bit");
//				in=blob.getBinaryStream();
//				or
				in=rs.getBinaryStream("big_bit");
				File img=new File("111_bak.jpg");
				OutputStream out=new BufferedOutputStream(new FileOutputStream(img));
				byte[] buffImg=new byte[1024];
				for(int i=0;(i=in.read(buffImg))>0;){
					out.write(buffImg,0,i);
				}
				out.close();
				in.close();
				
			}
		} finally {
			JdbcUtils.free(rs, ps, conn);
		}
	}
}


JdbcUtils.java

package com.dwt1220;

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

import java.sql.Connection;

public final class JdbcUtils {
	private static String url = "jdbc:mysql://localhost:3306/jdbc";
	private static String user = "root";
	private static String password = "123456";

	private JdbcUtils() {
	}

	static {// 静态代码快,只执行一次。
		try {
			// 注册驱动
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			throw new ExceptionInInitializerError(e);
		}
	}

	public static Connection getConnection() throws SQLException {
		return DriverManager.getConnection(url, user, password);
	}

	public static void free(ResultSet rs, Statement st, Connection conn) {
		try {
			if (rs != null)
				rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (st != null)
					st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				if (conn != null)
					try {
						conn.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
			}
		}
	}
}



 

 

 

你可能感兴趣的:(mysql,Date,jdbc,String,File,存储)