JDBC處理mysql大資料

來源:互聯網
上載者:User

標籤:png   date   lease   output   建立   tchar   err   stream   rip   

 

  大資料也稱之為LOB(Large Objects),LOB又分為:clob和blob,clob用於儲存大文本,blob用於儲存位元據,例像、聲音、二進位文等。

  在實際開發中,有時是需要用程式把大文本或位元據直接儲存到資料庫中進行儲存的。

  對MySQL而言只有blob,而沒有clob,mysql儲存大文本採用的是Text,Text和blob分別又分為:
  TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
  TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB

一.工具類
public class JdbcUtils {    private static String driver = null;    private static String url = null;    private static String username = null;    private static String password = null;    static{        try{            url = "jdbc:mysql://localhost:3306/test";            driver = "com.mysql.jdbc.Driver";            username = "root";            password = "root";            //載入資料庫驅動            Class.forName(driver);        }catch (Exception e) {            throw new ExceptionInInitializerError(e);        }    }    /**     * @return Connection資料庫連接對象     * @throws SQLException     */    public static Connection getConnection() throws SQLException{        return DriverManager.getConnection(url, username,password);    }    /**     * 要釋放的資源套件括Connection資料庫連接對象,負責執行SQL命令的Statement對象,儲存查詢結果的ResultSet對象     */    public static void release(Connection conn,Statement st,ResultSet rs){        if(rs!=null){            try{                //關閉儲存查詢結果的ResultSet對象                rs.close();            }catch (Exception e) {                e.printStackTrace();            }            rs = null;        }        if(st!=null){            try{                //關閉負責執行SQL命令的Statement對象                st.close();            }catch (Exception e) {                e.printStackTrace();            }        }        if(conn!=null){            try{                //關閉Connection資料庫連接對象                conn.close();            }catch (Exception e) {                e.printStackTrace();            }        }    }}
二.使用jdbc處理MySQL的大文本sql語句
CREATE TABLE `testclob` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `resume` text,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
在resource下建立一個data.txt
“百度知道”,是使用者自己根據具有針對性地提出問題,通過積分獎勵機制發動其他使用者,來解決該問題的搜尋模式。 同時,這些問題的答案又會進一步作為搜尋結果,提供給其他有類似疑問的使用者,達到分享知識的效果。百度知道的最大特點,就在於和搜尋引擎的完美結合,讓使用者所擁有的隱性知識轉化成顯性知識,使用者既是百度知道內容的使用者,同時又是百度知道的創造者,在這裡累積的知識資料可以反映到搜尋結果中。通過使用者和搜尋引擎的相互作用,實現搜尋引擎的社區化。百度知道也可以看作是對搜尋引擎功能的一種補充,讓使用者頭腦中的隱性知識變成顯性知識,通過對回答的沉澱和組織形成新的資訊庫,其中資訊可被使用者進一步檢索和利用。這意味著,使用者既是搜尋引擎的使用者,同時也是創造者。百度知道可以說是對過分依靠技術的搜尋引擎的一種人性化完善。

測試代碼如下:

public class JdbcOperaClob {    /**     * @Method: add     * @Description:向資料庫中插入大文本資料     * @Anthor:孤傲蒼狼     *     */    @Test    public void add(){        Connection conn = null;        PreparedStatement st = null;        ResultSet rs = null;        Reader reader = null;        try{            conn = JdbcUtils.getConnection();            String sql = "insert into testclob(resume) values(?)";            st = conn.prepareStatement(sql);           //相對路徑,web容器載入class檔案的時候,就是載入這個檔案夾下的class檔案.            File file = new File("target/classes/data.txt");            reader = new FileReader(file);            st.setCharacterStream(1, reader,(int) file.length());            int num = st.executeUpdate();            if(num>0){                System.out.println("插入成功!!");            }            //關閉流            reader.close();        }catch (Exception e) {            e.printStackTrace();        }finally{           // JdbcUtils.release(conn, st, rs);        }    }    /**     * @Method: read     * @Description: 讀取資料庫中的大文本資料     */    @Test    public void read(){        Connection conn = null;        PreparedStatement st = null;        ResultSet rs = null;        try{            conn = JdbcUtils.getConnection();            String sql = "select resume from testclob where id=3";            st = conn.prepareStatement(sql);            rs = st.executeQuery();            String contentStr ="";            String content = "";            if(rs.next()){                //使用resultSet.getString("欄位名")擷取大文本資料的內容                content = rs.getString("resume");                //使用resultSet.getCharacterStream("欄位名")擷取大文本資料的內容                Reader reader = rs.getCharacterStream("resume");                char buffer[] = new char[1024];                int len = 0;                FileWriter out = new FileWriter("D:\\1.txt");                while((len=reader.read(buffer))>0){                    contentStr += new String(buffer);                    out.write(buffer, 0, len);                }                out.close();                reader.close();            }            System.out.println(content);            System.out.println("-----------------------------------------------");            System.out.println(contentStr);        }catch (Exception e) {            e.printStackTrace();        }finally{            JdbcUtils.release(conn, st, rs);        }    }}
三.使用jdbc處理MySQL的位元據sql語句
CREATE TABLE `testblobim` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `image` longblob,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
在resource放一張照片:迪麗熱巴.jpg

測試代碼:
public class JdbcOperaBloblmgs {    /**     * @Description:向資料庫中插入位元據     */    @Test    public void add(){        Connection conn = null;        PreparedStatement st = null;        ResultSet rs = null;        try{            conn = JdbcUtils.getConnection();            String sql = "insert into testblobim(image) values(?)";            st = conn.prepareStatement(sql);            //相對路徑,class下的相對路徑            File file = new File("target/classes/迪麗熱巴.jpg");            FileInputStream fis = new FileInputStream(file);//產生的流            st.setBinaryStream(1, fis,(int) file.length());            int num = st.executeUpdate();            if(num>0){                System.out.println("插入成功!!");            }            fis.close();        }catch (Exception e) {            e.printStackTrace();        }finally{            JdbcUtils.release(conn, st, rs);        }    }    /**     * @Description: 讀取資料庫中的位元據     */    @Test    public void read() {        Connection conn = null;        PreparedStatement st = null;        ResultSet rs = null;        try {            conn = JdbcUtils.getConnection();            String sql = "select image from testblobim where id=?";            st = conn.prepareStatement(sql);            st.setInt(1, 1);            rs = st.executeQuery();            if (rs.next()) {                //InputStream in = rs.getBlob("image").getBinaryStream();//這種方法也可以                InputStream in = rs.getBinaryStream("image");                int len = 0;                byte buffer[] = new byte[1024];                FileOutputStream out = new FileOutputStream("D:\\1.jpg");                while ((len = in.read(buffer)) > 0) {                    out.write(buffer, 0, len);                }                in.close();                out.close();            }        } catch (Exception e) {            e.printStackTrace();        } finally {            JdbcUtils.release(conn, st, rs);        }    }}

 

JDBC處理mysql大資料

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.