天天看點

JDBC中大文本類型處理

clob(test) blob

public class App_text {
  // 全局參數
  private Connection con;
  private Statement stmt;
  private PreparedStatement pstmt;
  private ResultSet rs;
 
  @Test
  // 1. 儲存大文本資料類型   ( 寫longtext)
  public void testSaveText() {
    String sql = "insert into test(content) values(?)";
    try {
      // 連接配接
      con = JdbcUtil.getConnection();
      // pstmt 對象
      pstmt = con.prepareStatement(sql);
      // 設定參數
      // 先擷取檔案路徑
      String path = App_text.class.getResource("tips.txt").getPath();
      FileReader reader = new FileReader(new File(path));
      pstmt.setCharacterStream(1, reader);
      // 執行sql
      pstmt.executeUpdate();
      // 關閉
      reader.close();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      JdbcUtil.closeAll(con, pstmt, null);
    }
  }
  @Test
  // 2. 讀取大文本資料類型   ( 讀longtext)
  public void testGetAsText() {
    String sql = "select * from  test;";
    try {
      // 連接配接
      con = JdbcUtil.getConnection();
      // pstmt 對象
      pstmt = con.prepareStatement(sql);
      // 讀取
      rs = pstmt.executeQuery();
      if (rs.next()) {
        // 擷取長文本資料, 方式1:
        //Reader r = rs.getCharacterStream("content");
        // 擷取長文本資料, 方式2:
        System.out.print(rs.getString("content"));
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      JdbcUtil.closeAll(con, pstmt, null);
    }
  }
}      
public class App_blob {
  // 全局參數
  private Connection con;
  private Statement stmt;
  private PreparedStatement pstmt;
  private ResultSet rs;
 
  @Test
  // 1. 二進制資料類型   ( 寫longblob)
  public void testSaveText() {
    String sql = "insert into test(img) values(?)";
    try {
      // 連接配接
      con = JdbcUtil.getConnection();
      // pstmt 對象
      pstmt = con.prepareStatement(sql);
      // 擷取圖檔流
      InputStream in = App_text.class.getResourceAsStream("7.jpg");
      pstmt.setBinaryStream(1, in);
      // 執行儲存圖檔
      pstmt.execute();
      // 關閉
      in.close();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      JdbcUtil.closeAll(con, pstmt, null);
    }
  }
  @Test
  // 2. 讀取大文本資料類型   ( 讀longblob)
  public void testGetAsText() {
    String sql = "select img from  test where id=2;";
    try {
      // 連接配接
      con = JdbcUtil.getConnection();
      // pstmt 對象
      pstmt = con.prepareStatement(sql);
      // 讀取
      rs = pstmt.executeQuery();
      if (rs.next()) {
        // 擷取圖檔流
        InputStream in = rs.getBinaryStream("img");
        // 圖檔輸出流
        FileOutputStream out = new FileOutputStream(new File("c://1.jpg"));
        int len = -1;
        byte b[] = new byte[1024];
        while ((len = in.read(b)) != -1) {
          out.write(b, 0, len);
        }
        // 關閉
        out.close();
        in.close();
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      JdbcUtil.closeAll(con, pstmt, null);
    }
  }
}