JDBC Item3: LOB(Large objects)
博客专区 > _Roger_ 的博客 > 博客详情
JDBC Item3: LOB(Large objects)
_Roger_ 发表于2年前
JDBC Item3: LOB(Large objects)
  • 发表于 2年前
  • 阅读 18
  • 收藏 1
  • 点赞 1
  • 评论 0

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

摘要: 在实际开发中,有时是需要用程序把大文本或二进制数据直接保存到数据库中进行储存的。 对于mysql而言,主要是text和blob

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("插入成功!!");
    }


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 28
博文 82
码字总数 39915
×
_Roger_
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: