深入浅出JDBC-操作时间与大对象(Clob/Blob)

一、时间(Date、Time、Timestamp)

  java.sql.Date/java.sql.Time/java.sql.Timestamp extends java.util.Date

public class TimeData {
    PreparedStatement pStatement=null;
    //操作日期类型的数据
    public void insertDate(Connection connection,long time){
        try {
            String sql="insert into user(regTime)values(?)";
            pStatement=connection.prepareStatement(sql);
            //插入的时间为当前日期
            pStatement.setDate(1,new Date(time));
            pStatement.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.getInstance().close(pStatement);
            DBUtil.getInstance().close(connection);
        }
    }

    //操作时间类型的数据
    public void insertTimestamp(Connection connection,long time){
        try {
            String sql="insert into user(loginTime)values(?)";
            pStatement=connection.prepareStatement(sql);
            java.sql.Timestamp timestamp=new java.sql.Timestamp(time);
            //插入的时间为当前时间
            pStatement.setTimestamp(1,timestamp);
            pStatement.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.getInstance().close(pStatement);
            DBUtil.getInstance().close(connection);
        }
    }

    /**
     *批量添加某一区间的数据
     * @param connection
     * @param first 注册时间
     * @param seconed  登录时间
     * @param rowNum 添加的记录的条数
     */
    public void insertBatch(Connection connection,long first,long seconed,int rowNum){
        try {
            String sql="insert into user(regTime,loginTime) values(?,?)";
            pStatement=connection.prepareStatement(sql);
            for(int i=0;i<rowNum;i++){
                long regTime=new Random().nextInt(100000000)+first;
                long loginTime=seconed-new Random().nextInt(10000000);
                pStatement.setDate(1,new java.sql.Date(regTime));
                pStatement.setTimestamp(2,new Timestamp(loginTime));
                pStatement.executeUpdate();
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.getInstance().close(pStatement);
            DBUtil.getInstance().close(connection);
        }
    }

    //插入指定时间的数据
    public long StringToDate(String dateString){
        try {
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            return sdf.parse(dateString).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

    //查询日期、时间
    public void query(Connection connection){
        Statement statement=null;
        ResultSet rs=null;
        try {
            statement=connection.createStatement();
            String sql="select regTime,loginTime from user";
            statement.executeQuery(sql);
            rs=statement.executeQuery(sql);
            while(rs.next()){
                Date date=rs.getDate("regTime");
                Timestamp ts=rs.getTimestamp("loginTime");
                System.out.println(date+"-----"+ts);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

二、时间单元测试

public class TestTimeData {

    Connection connection=DBUtil.getInstance().getConnection();
    TimeData timeData=new TimeData();

    @Test
    public void insertDate(){
        timeData.insertDate(connection,System.currentTimeMillis());
    }

    @Test
    public void insertTimestamp(){
        timeData.insertTimestamp(connection,System.currentTimeMillis());
    }

    @Test
    public void insertAppointedDate(){
        //插入指定时间
        long t=timeData.StringToDate("2017-01-01 15:30:00");
        timeData.insertDate(connection,t);
    }

    @Test
    public void insertBatchDate(){
        //批量插入某一时间段时间
        long start=timeData.StringToDate("2016-01-01 12:50:20");
        long end=timeData.StringToDate("2017-12-30 02:00:00");
        timeData.insertBatch(connection,start,end,50);
    }

    @Test
    public void query(){
        timeData.query(connection);
    }
}

三、大数据对象(Clob、Blob)

public class BigData{
    PreparedStatement pStatement=null;
    /**
     * 插入海量文字通过读取本地文件
     * @param filePath 文件的物理路径
     * @param connection
     */
    public void insertClobByReadFile(Connection connection,String filePath )   {
        try {
            String sql="insert into user(resume)values(?)";
            pStatement=connection.prepareStatement(sql);
            pStatement.setClob(1,new FileReader(new File(filePath)));
            pStatement.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.getInstance().close(pStatement);
            DBUtil.getInstance().close(connection);
        }
    }

    /**
     * 读取存储在数据库的海量文字文件
     */
    public void queryClob(Connection connection,int id) {
        ResultSet rs=null;
        try {
            String sql="select resume from user where id=?";
            pStatement=connection.prepareStatement(sql);
            pStatement.setInt(1,id);
             rs=pStatement.executeQuery();
            while (rs.next()){
                Clob clob=rs.getClob("resume");
                Reader r=clob.getCharacterStream();
                int temp=0;
                while((temp=r.read())!=-1){
                    System.out.print((char)temp);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.getInstance().close(rs);
            DBUtil.getInstance().close(pStatement);
            DBUtil.getInstance().close(connection);
        }

    }

    /**
     * 存储图片文件
     * @param connection
     * @param imgPath 图片的物理路径
     */
    public void insertBlob(Connection connection,String imgPath) {
        try {
            pStatement=connection.prepareStatement("insert into user(headImg) values(?);");
            //获得图片的输入流
            pStatement.setBlob(1,new FileInputStream(new File(imgPath)));
            pStatement.execute();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.getInstance().close(pStatement);
            DBUtil.getInstance().close(connection);
        }
    }

    /**
     *  获取图片文件,并且输入到本地:F:/hello.jpg。
     * @param connection
     * @param id
     */
    public void queryBlob(Connection connection,int id){
        ResultSet rs;
        try {
            String sql="select headImg from user where id=?";
            pStatement=connection.prepareStatement(sql);
            pStatement.setInt(1,id);
            rs=pStatement.executeQuery();
            while(rs.next()){
                //获得文件的blob对象
                Blob blob=rs.getBlob("headImg");
                //获取文件的输入流
                InputStream is=blob.getBinaryStream();
                //建立输出流用于输入图片查看结果
                OutputStream os=new FileOutputStream(new File("F:/hello.txt"));
                int temp=0;
                while((temp=is.read())!=-1){
                    os.write(temp);
                }
                os.flush();
                os.close();
            }

        }catch (Exception e){
            e.printStackTrace();
        }

    }

}

大数据对象单元测试

public class TestBigData {
  //获取数据库连接
    Connection connection=DBUtil.getInstance().getConnection();
    BigData bigData=new BigData();
    @Test
    public void insertClob(){
        try {
            String filePath="F:/testclob.txt";
            bigData.insertClobByReadFile(connection,filePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void queryClob(){
        try {
            bigData.queryClob(connection,1);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBUtil.getInstance().close(connection);
        }
    }

    @Test
    public void insertBlob(){
        String imgPath="F:/testclob.txt";
        bigData.insertBlob(connection,imgPath);
    }

    @Test
    public void queryBlob(){
        bigData.queryBlob(connection,15906);
    }
}  
时间: 2024-10-12 23:06:54

深入浅出JDBC-操作时间与大对象(Clob/Blob)的相关文章

JDBC:数据库操作:处理大对象CLOB数据

目标: 了解大对象处理基本原理, 掌握CLOB数据的读,写操作. 可以使用CLOB类处理大文本数据. 大对象处理主要指CLOB和BLOB两种类型字段.可以大量存储文字. 要想在程序中处理这样的大数据操作,则必须使用preparedStatement完成.所有文件内容通过IO流方式从大文本字段中保存和读取. 写入大数据对象: 使用PreparedStatement接口中的方法. void setAsciiStream(int parameterIndex, InputStream x, int l

JDBC 复习3 存取Oracle大数据 clob blob

1 目录结构记得导包咯 mysql oracle 2 代码,DBUtil工具类见前面的随笔博文 package dbex.mysql; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.sql.Connection; import java.sql.P

内置对象Clob对从数据库表中取的字符大对象CLOB类型的列值进行读取操作

1 package readclobDemo.bao; 2 3 import java.io.IOException; 4 import java.io.Reader; 5 import java.sql.Clob; 6 import java.sql.Connection; 7 import java.sql.PreparedStatement; 8 import java.sql.ResultSet; 9 import java.sql.SQLException; 10 11 import

处理大数据对象clob数据和blob数据

直接上下代码: 1 package com.learn.jdbc.chap06; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.InputStream; 6 import java.sql.Connection; 7 import java.sql.PreparedStatement; 8 9 import com.learn.jdbc.model.Album; 10 import com.

oracle存储大文本clob、blob

1 package cn.itcast.web.oracle.util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.Statement; 7 8 public class JdbcUtil { 9 private static String driver = "oracle.jdbc.driver.OracleDri

如何 操作Blob 大对象、映射派送属性 、映射组成关系

1. 项目结构 2. 三个持久化类 ① Pay.java package com.baidu.cfghbm; public class Pay { //月薪 private Integer monthlyPay; //年薪 private Integer yearPay; //带薪假 private Integer vocationWithPay; // private Worker worker; public Worker getWorker() { return worker; } pub

sqlite3中BLOB数据类型存储大对象运用示例

1:常用接口 个人比较喜欢sqlite, 使用最方便,唯一的准备工作是下载250K的源:而且作者很热心,有问必答. 以下演示一下使用sqlite的步骤,先创建一个数据库,然后查询其中的内容.2个重要结构体和5个主要函数: sqlite3               *pdb, 数据库句柄,跟文件句柄FILE很类似 sqlite3_stmt      *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句 sqlite3_open(),   打开数据库 sqlite3_e

使用SSH操作Oracle中BLOB大对象

package entity; /** * Bigobject entity. @author MyEclipse Persistence Tools */ public class Bigobject implements java.io.Serializable { // Fields private Integer id; private byte[] tblob; private String filename; // Constructors /** default construct

hibernate操作大文本字段Blob和Clob

hibernate操作大文本字段Blob和Clob解决方案: 1.大文本字段Blob和Clob(流); 2.截串存取 第一步: 创建新表:Elec_CommonMsg_Content create table Elec_CommonMsg_Content( comID varchar(50) not null primary key comment '主键ID', type char(2) null comment '判断站点运行和设备运行的标示', content varchar(5000)