mysql存储大文本采用的是Text,Text和blob分别又分为:
TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB
一、使用JDBC处理MySQL的大文本
对于MySQL中的Text类型,可调用如下方法设置:
PreparedStatement.setCharacterStream(index, reader, length);//注意length长度须设置,并且设置为int型
对MySQL中的Text类型,可调用如下方法获取:
Reader reader = resultSet. getCharacterStream(String columnLabel);string s = resultSet.getString(String columnLabel);
eg:插入大文本到数据库
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); //这种方式获取的路径,其中的空格会被使用“%20”代替 String path = JdbcOperaClob.class.getClassLoader().getResource("data.txt").getPath(); //将“%20”替换回空格 path = path.replaceAll("%20", " "); File file = new File(path); reader = new FileReader(file); st.setCharacterStream(1, reader,(int) file.length()); int num = st.executeUpdate(); if(num>0){ System.out.println("插入成功!!"); }
二、使用JDBC处理MySQL的二进制数据
对于MySQL中的BLOB类型,可调用如下方法设置:
PreparedStatement.setBinaryStream(i, inputStream, length);
对MySQL中的BLOB类型,可调用如下方法获取:
InputStream in = resultSet.getBinaryStream(String columnLabel);InputStream in = resultSet.getBlob(String columnLabel).getBinaryStream();
eg:插入二进制文件到数据库
Connection conn = null;PreparedStatement st = null;ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "insert into testblob(image) values(?)"; st = conn.prepareStatement(sql); //这种方式获取的路径,其中的空格会被使用“%20”代替 String path = JdbcOperaBlob.class.getClassLoader().getResource("01.jpg").getPath(); //将“%20”替换会空格 path = path.replaceAll("%20", " "); File file = new File(path); FileInputStream fis = new FileInputStream(file);//生成的流 st.setBinaryStream(1, fis,(int) file.length()); int num = st.executeUpdate(); if(num>0){ System.out.println("插入成功!!"); }