JavaWeb笔记-17-时间类型的转换、mysql存储大数据、批处理、JdbcUtils

1、时间类型


数据库类型与java中类型的对应关系:
DATE  java.sql.Date
TIME   java.sql.Time
TIMESTAMP  java.sql.Timestamp

    领域对象(domain)中的所有属性不能出现java.sql包下的东西!即不能使用java.sql.Date;
    ResultSet#getDate()返回的是java.sql.Date()
    PreparedStatement#setDate(int, Date),其中第二个参数也是java.sql.Date

时间类型的转换:
    java.util.Date  java.sql.Date、Time、Timestamp
    把util的Date转换成毫秒值
    使用毫秒值创建sql的Date、Time、Timestamp
    java.sql.Date、Time、Timestamp  java.util.Date
    这一步不需要处理了:因为java.sql.Date是java.util.Date;
    java.util.Date date = new java.util.Date();
    long l = date.getTime();
    java.sql.Date sqlDate = new java.sql.Date(l);

2、mysql存储大数据:


mysql默认存储大小为4M 需要重新设置最大值:
在my.ini中添加如下配置!
max_allowed_packet=10485760 (10M)
public class Demo4 {

    //把MP3保存到数据库中
    @Test
    public void fun1() throws Exception{
        //得到Connection
        Connection con  = JdbcUtils.getConnection();

        //给出sql模板,创建pstmt
        String sql  = "INSERT INTO tab_bin VALUE(?,?,?)";
        PreparedStatement pstmt = con.prepareStatement(sql);

        //设置sql模板中的参数
        pstmt.setInt(1, 1);
        pstmt.setString(2, "思疆调.mp3");

        //得到Blob,把想要存的mp3转为Blob字段
            //分析: Blob可以通过byte[] 数组转化,需要先将文件转为Byte[]数组
            //做法:使用 io1.4jar包中将文件转为数组的方法.toByteArray  传参为输入流文件。

        //将文件转化为字节数组
        byte[] bytes = IOUtils.toByteArray(new FileInputStream("C:/Users/11316/Music/思疆调.mp3"));

        //将字节数组转化为 Blob类型  使用 构造方法SerialBlob()  传参为字节数组
        Blob blob = new SerialBlob(bytes);

        //设置参数。
        pstmt.setBlob(3, blob);

        //调用pstmt的 executeUpdate() 执行。
        pstmt.executeUpdate();
    }

    //从数据库中读取mp3
    @Test
    public void fun2() throws Exception{
        //得到连接
        Connection con = JdbcUtils.getConnection();

        //给出模板
        String sql = "select * from tab_bin";

        //创建pstmt
        PreparedStatement pstmt = con.prepareStatement(sql);

        //执行  得到结果集 
        ResultSet rs = pstmt.executeQuery();

        //移动行光标,获取名为data的列数据。
        while(rs.next()){
            Blob blob = rs.getBlob("data");

            //把blob转为磁盘上的文件
                /*
                 * 通过Blob得到输入流对象(将blob中内容放进输入流对象中) 
                 * 创建文件输出流对象,用来指定文件存放地址
                 * 把输入流的东西复制到输出流中 
                 */
            //通过blob 得到输入流对象  可以理解为blob的内容将会流进该对象中
            InputStream ips= blob.getBinaryStream();

            //创建输出流对象 ,指定文件存放地址
            OutputStream ops = new FileOutputStream("E:/sjd.mp3");

            //使用IOUtils包下的复制功能。
            IOUtils.copy(ips, ops);
        }
    }
}
    //知识点:  
    //PRIMARY KEY AUTO_INCREMENT  主键,自增,不可重复

3、批处理


mysql默认批处理关闭,需要在连接时设置url参数
    打开批处理:  
    jdbc:mysql://localhost:3306/mydb1?rewriteBatchedStatements=true
public class Demo5 {

    //pstmt对象内部有集合 ,会将大量参数先存进容器里.addBatch(); 最后在统一执行添加。
    //1.用用循环向sql中添加参数。preparedStatement对象内部有模板
    //2.调用执行方法,完成向数据库发送。
    @Test
    public void fun5() throws Exception{
        //得到连接
        Connection con = JdbcUtils.getConnection();

        //给出模板
        String sql = "INSERT INTO stu VALUES(?,?,?,?)";

        //创建pstmt
        PreparedStatement pstmt = con.prepareStatement(sql);

        for(int i = 0; i < 10000; i++){
            pstmt.setInt(1,i+1);
            pstmt.setString(2,"stu_"+i);
            pstmt.setInt(3,i);
            pstmt.setString(4,i%2==0?"男":"女");

            pstmt.addBatch();  //将参数添加进批
        }
        long start = System.currentTimeMillis();
        pstmt.executeBatch();  //执行批。
        long end = System.currentTimeMillis();

        System.out.println(end-start);
    }
}

4、JdbcUtils 简化得到连接


public class JdbcUtils {
    private static Properties props = null;

    // 只在JdbcUtils类被加载时执行一次!
    static {
        // 给props进行初始化,即加载dbconfig.properties文件到props对象中
        try {
            InputStream in = JdbcUtils.class.getClassLoader()
                    .getResourceAsStream("dbconfig.properties");
            props = new Properties();
            props.load(in);
        } catch(IOException e) {
            throw new RuntimeException(e);
        }

        // 加载驱动类
        try {
            Class.forName(props.getProperty("driverClassName"));
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    // 获取连接!
    public static Connection getConnection() throws SQLException {
        // 得到Connection
        return DriverManager.getConnection(props.getProperty("url"),
                props.getProperty("username"), 
                props.getProperty("password"));
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41307491/article/details/81475047