Mysql+TEXT(大文本文件)的存儲和讀取

package servletDemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCTEXT{
	//在oracle裏面大文本數據叫clob 在mysql裏面叫做text 可以存放 .txt .doc 但是文件太大還是不能存
	
	private static final String URL = "jdbc:MySQL://localhost:3306/hotel?&useSSL=false&serverTimezone=UTC";
	private static final String USERNAME = "root";
	private static final String PWD = "root";
	public static void update(){//增刪改
		Connection connection = null;//因爲有可能還麼有用到connection就報錯了 那麼這個對象是空的就不能使用close方法
		PreparedStatement pstmt = null;//同理
		try{
			//1導入驅動,加載具體的驅動類
			Class.forName("com.mysql.cj.jdbc.Driver");
			//2與DB建立連接
			connection = DriverManager.getConnection(URL, USERNAME, PWD);
			//3發送sql語句,執行(增刪改)
			//pstmt需要預編譯sql
			String sql = "insert into my_novel values (?,?)";
			pstmt = connection.prepareStatement(sql);
			pstmt.setInt(1, 2);
			File file = new File("D:\\01.doc");
			InputStream in = new FileInputStream(file);
			//轉換流可以設置編碼
			Reader reader = new InputStreamReader(in,"UTF-8");
			pstmt.setCharacterStream(2, reader, (int)file.length());
	
			int count = pstmt.executeUpdate();//返回表示增刪改 了幾條數據
			//4處理結果集
			if(count>0){
				System.out.println("操作成功!");
			}
			reader.close();
			in.close();
		}catch (ClassNotFoundException e) {//Class.forName()的異常
			e.printStackTrace();
		} catch (SQLException e) {//connection.createStatement()異常
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}finally{//用finally的原因是無論有沒有異常都需要關閉連接
			try{
				if(pstmt!=null){//執行sql語句
					pstmt.close();
				}
				if(connection!=null){//建立java代碼和數據庫的連接
					connection.close();
				}
			}catch(SQLException e) {//前面兩個close 都會拋SQLException異常
				e.printStackTrace();
			}
		}		
	}
	public static void query(){//增刪改
		Connection connection = null;//因爲有可能還麼有用到connection就報錯了 那麼這個對象是空的就不能使用close方法
		PreparedStatement pstmt = null;//同理
		ResultSet rs= null;
		try{
			//1導入驅動,加載具體的驅動類
			Class.forName("com.mysql.cj.jdbc.Driver");
			//2與DB建立連接
			connection = DriverManager.getConnection(URL, USERNAME, PWD);
			//3發送sql語句,執行(查)
			//pstmt需要預編譯sql
			String sql = "select novel from my_novel where id_novel = ?";
			pstmt = connection.prepareStatement(sql);
			//找出來編號爲1 的 文件
			pstmt.setInt(1, 2);
			//執行 返回 表格
			rs = pstmt.executeQuery();
			//因爲這次只有一個setXxxx getXxxx      setInt  getInt
			if(rs.next()){
				//列名叫做novel
				Reader reader = rs.getCharacterStream("novel");
				Writer writer = new FileWriter("src/02.doc");
				//Reader已經讀取到內存中了 現在用Writer 寫到硬盤上
				//這個是內存與硬盤中的緩衝區
				char [] chs = new char [100];
				int len = -1;
				while((len = reader.read(chs))!=-1){
					writer.write(chs,0,len);
				}
				writer.close();
				reader.close();
			}
 		}catch (ClassNotFoundException e) {//Class.forName()的異常
			e.printStackTrace();
		} catch (SQLException e) {//connection.createStatement()異常
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}finally{//用finally的原因是無論有沒有異常都需要關閉連接
			try{
				if(pstmt!=null){//執行sql語句
					pstmt.close();
				}
				if(connection!=null){//建立java代碼和數據庫的連接
					connection.close();
				}
			}catch(SQLException e) {//前面兩個close 都會拋SQLException異常
				e.printStackTrace();
			}
		}		
	}

	public static void main(String [] args){
//		update();
		query();
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章