zoukankan      html  css  js  c++  java
  • jdbc结合commons-dbutils-1.6.jar做素材数据处理的例子

      前两个 insertTitle,insertOpening 是刚开始做的针对单一素材数据解析及写入的方法,后面一个 insertMaterial 是后期封装的一个可处理各种素材导入的方法,main方法中是它的一个测试用例。

    package com.binye.data;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Date;
    import java.util.List;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.ArrayListHandler;
    import org.junit.Test;
    
    
    
    public class InsertMeterial {
    
        private static final String driverClassName = "com.mysql.jdbc.Driver";
        private static final String url = "jdbc:mysql://192.168.17.11:3306/test?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8";    
        
        private static final String username = "root";
        private static final String password = "****";
    
        private static Connection conn;
        public static Connection getConnection() {
            if (conn == null) 
            {
                try {
                    Class.forName(driverClassName);
                    conn = DriverManager.getConnection(url, username, password);
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
    
            }
    
            return conn;
        }    
        
        public static void closeConnection() {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        
        @Test
        public void insertTitle(){
            QueryRunner query = new QueryRunner();
    
            String getTagValue = "SELECT id,tag_value FROM tags";
            String getTitleInfo = "SELECT `标题` FROM title";
    
            // 获取所有标签类型
            List<Object[]> tags = null;
            try {
                tags = query.query(getConnection(), getTagValue, new ArrayListHandler());
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            // 获取标题
            List<Object[]> titles = null;
            try {
                titles = query.query(getConnection(), getTitleInfo, new ArrayListHandler());
            } catch (SQLException e) {
                e.printStackTrace();
            }        
    
            // 准备标题插入素材表和关系表的预处理语句
            PreparedStatement pstmtForTitle = null;
            PreparedStatement pstmtForMaterialTag = null;
            PreparedStatement pstmtForInsertTest = null;
            
            for (Object[] result1:titles){
                String titleId = UUIDUtil.getOrigUUID();
                String title = result1[0].toString();
    
                // 向素材表中插入新标题
                String titleSQL = "INSERT INTO material(id,type,value,create_time,status) VALUES( ?, 6, ?, NOW(), 0)";
                try {
                    pstmtForTitle = (PreparedStatement) getConnection().prepareStatement(titleSQL);
                    pstmtForTitle.setString(1, titleId);
                    pstmtForTitle.setString(2, title);
                    pstmtForTitle.executeUpdate();
                    pstmtForTitle.close();
                    
                    // 向标签与素材的关系表中插入数据
                    String tagSQL = "SELECT column FROM title WHERE `标题` = titleInfo";
                    // 遍历标题表中各个标签的取值情况(若等于1则插入相应关系)
                    for (Object[] result2:tags){
                        String tag = result2[1].toString();
                        String getStateOfEachTag = tagSQL.replace("column", "`"+ tag +"`").replace("titleInfo", "'" + title + "'");
                        List<Object[]> states = query.query(getConnection(), getStateOfEachTag, new ArrayListHandler());;
                        if (states.get(0)[0].toString().equals("1")){
                            String materialTagSQL = "INSERT INTO material_tags(material_id,tag_id) VALUES(?,?)";
                            pstmtForMaterialTag = (PreparedStatement) getConnection().prepareStatement(materialTagSQL);
                            pstmtForMaterialTag.setString(1, titleId);
                            pstmtForMaterialTag.setString(2, result2[0].toString());
                            pstmtForMaterialTag.executeUpdate();
                            pstmtForMaterialTag.close();
                        }
                    }
                
                    // 查看插入情况
                    String insertTestSQL = "select m.id,m.status,m.type,m.value,t.tag_value" +
                    " from material m,material_tags mt,tags t" + " where m.id = mt.material_id and mt.tag_id=t.id and m.id=?";
                    pstmtForInsertTest = (PreparedStatement) getConnection().prepareStatement(insertTestSQL);
                    pstmtForInsertTest.setString(1,titleId);
                    ResultSet rs = pstmtForInsertTest.executeQuery();
                    int col = rs.getMetaData().getColumnCount();
                    System.out.println("============================");
                    // 逐行打印数据,字段之间以空格格开,所列字段依次是: 素材id,状态,素材类型,素材内容,标签
                    while (rs.next()) {
                        for (int i = 1; i <= col; i++) {
                            System.out.print(rs.getString(i) + " ");
                         }
                        System.out.println("");
                    }
                    System.out.println("============================");
                    pstmtForInsertTest.close();
    
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
            }
    
        }
    
        @Test
        public void insertOpening(){
            QueryRunner query = new QueryRunner();
    
            String getTagValue = "SELECT id,tag_value FROM tags";
            String getOpeningInfo = "SELECT `开场白` FROM opening";
    
            // 获取所有标签类型
            List<Object[]> tags = null;
            try {
                tags = query.query(getConnection(), getTagValue, new ArrayListHandler());
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            // 获取开场白
            List<Object[]> openings = null;
            try {
                openings = query.query(getConnection(), getOpeningInfo, new ArrayListHandler());
            } catch (SQLException e) {
                e.printStackTrace();
            }
            
            PreparedStatement pstmtForOpening = null;
            PreparedStatement pstmtForMaterialTag = null;
            PreparedStatement pstmtForInsertTest = null;
            
            for (Object[] result1:openings){
                String openingId = UUIDUtil.getOrigUUID();
                String opening = result1[0].toString();
    
                // 向素材表中插入新开场白
                String openingSQL = "INSERT INTO material(id,type,value,create_time,status) VALUES( ?, 5, ?, NOW(), 0)";
                try {
                    pstmtForOpening = (PreparedStatement) getConnection().prepareStatement(openingSQL);
                    pstmtForOpening.setString(1, openingId);
                    pstmtForOpening.setString(2, opening);
                    pstmtForOpening.executeUpdate();
                    pstmtForOpening.close();
                    
                    // 找到相应的标签
                    String tagSQL = "SELECT column FROM opening WHERE `开场白` = openingInfo";
                    for (Object[] result2:tags){
                        String tag = result2[1].toString();
                        String getStateOfEachTag = tagSQL.replace("column", "`"+ tag +"`").replace("openingInfo", "'" + opening + "'");
                        List<Object[]> states = query.query(getConnection(), getStateOfEachTag, new ArrayListHandler());;
                        if (states.get(0)[0].toString().equals("1")){
                            String materialTagSQL = "INSERT INTO material_tags(material_id,tag_id) VALUES(?,?)";
                            pstmtForMaterialTag = (PreparedStatement) getConnection().prepareStatement(materialTagSQL);
                            pstmtForMaterialTag.setString(1, openingId);
                            pstmtForMaterialTag.setString(2, result2[0].toString());
                            pstmtForMaterialTag.executeUpdate();
                            pstmtForMaterialTag.close();
                        }
                    }
                    
                    // 查看插入情况
                    String insertTestSQL = "select m.id,m.status,m.type,m.value,t.tag_value" +
                    " from material m,material_tags mt,tags t" + " where m.id = mt.material_id and mt.tag_id=t.id and m.id=?";
                    pstmtForInsertTest = (PreparedStatement) getConnection().prepareStatement(insertTestSQL);
                    pstmtForInsertTest.setString(1,openingId);
                    ResultSet rs = pstmtForInsertTest.executeQuery();
                    int col = rs.getMetaData().getColumnCount();
                    System.out.println("============================");
                    // 逐行打印数据,字段之间以空格格开,所列字段依次是: 素材id,状态,素材类型,素材内容,标签
                    while (rs.next()) {
                        for (int i = 1; i <= col; i++) {
                            System.out.print(rs.getString(i) + " ");
                         }
                        System.out.println("");
                    }
                    System.out.println("============================");
                    pstmtForInsertTest.close();
    
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
            }
    
        }
        
        public static enum MaterialType {
            TITLE,OPENING
        }
    
        public static void insertMaterial(MaterialType materialType){
            QueryRunner query = new QueryRunner();
    
            String getTagValue = "SELECT id,tag_value FROM tags";
            String getMaterialInfo = null;
            String materialSQL = null;
            String tagInMaterialSQL = null;
            switch (materialType) {
            case TITLE:
                getMaterialInfo = "SELECT `标题` FROM title";
                materialSQL = "INSERT INTO material(id,type,value,create_time,status) VALUES( ?, 6, ?, NOW(), 0)";
                tagInMaterialSQL = "SELECT column FROM title WHERE `标题` = materialInfo";
                break;
            case OPENING:
                getMaterialInfo = "SELECT `开场白` FROM opening";
                materialSQL = "INSERT INTO material(id,type,value,create_time,status) VALUES( ?, 5, ?, NOW(), 0)";
                tagInMaterialSQL = "SELECT column FROM opening WHERE `开场白` = materialInfo";
                break;
            default:
                break;
            }
    
            // 获取所有标签类型
            List<Object[]> tags = null;
            try {
                tags = query.query(getConnection(), getTagValue, new ArrayListHandler());
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            // 获取标题
            List<Object[]> materials = null;
            try {
                materials = query.query(getConnection(), getMaterialInfo, new ArrayListHandler());
            } catch (SQLException e) {
                e.printStackTrace();
            }        
    
            // 准备标题插入素材表和关系表的预处理语句
            PreparedStatement pstmtForMaterial = null;
            PreparedStatement pstmtForMaterialTag = null;
            PreparedStatement pstmtForInsertTest = null;
            
            for (Object[] result1:materials){
                String materialId = UUIDUtil.getOrigUUID();
                String material = result1[0].toString();
    
                try {
                    // 向素材表中插入新标题
                    pstmtForMaterial = (PreparedStatement) getConnection().prepareStatement(materialSQL);
                    pstmtForMaterial.setString(1, materialId);
                    pstmtForMaterial.setString(2, material);
                    pstmtForMaterial.executeUpdate();
                    pstmtForMaterial.close();
                    
                    // 向标签与素材的关系表中插入数据
                    // 遍历标题表中各个标签的取值情况(若等于1则插入相应关系)
                    for (Object[] result2:tags){
                        String tag = result2[1].toString();
                        String getStateOfEachTag = tagInMaterialSQL.replace("column", "`"+ tag +"`").replace("materialInfo", "'" + material + "'");
                        List<Object[]> states = query.query(getConnection(), getStateOfEachTag, new ArrayListHandler());;
                        if (states.get(0)[0].toString().equals("1")){
                            String materialTagSQL = "INSERT INTO material_tags(material_id,tag_id) VALUES(?,?)";
                            pstmtForMaterialTag = (PreparedStatement) getConnection().prepareStatement(materialTagSQL);
                            pstmtForMaterialTag.setString(1, materialId);
                            pstmtForMaterialTag.setString(2, result2[0].toString());
                            pstmtForMaterialTag.executeUpdate();
                            pstmtForMaterialTag.close();
                        }
                    }
                
                    // 查看插入情况
                    String insertTestSQL = "select m.id,m.status,m.type,m.value,t.tag_value" +
                    " from material m,material_tags mt,tags t" + " where m.id = mt.material_id and mt.tag_id=t.id and m.id=?";
                    pstmtForInsertTest = (PreparedStatement) getConnection().prepareStatement(insertTestSQL);
                    pstmtForInsertTest.setString(1,materialId);
                    ResultSet rs = pstmtForInsertTest.executeQuery();
                    int col = rs.getMetaData().getColumnCount();
                    System.out.println("============================");
                    // 逐行打印数据,字段之间以空格格开,所列字段依次是: 素材id,状态,素材类型,素材内容,标签
                    while (rs.next()) {
                        for (int i = 1; i <= col; i++) {
                            System.out.print(rs.getString(i) + " ");
                         }
                        System.out.println("");
                    }
                    System.out.println("============================");
                    pstmtForInsertTest.close();
    
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
            }
    
        }
    
        public static void main(String[] args) {
            System.out.println("数据插入开始");
            Long start = new Date().getTime();
            
            InsertMeterial.insertMaterial(MaterialType.TITLE);
            InsertMeterial.insertMaterial(MaterialType.OPENING);
            
            //执行结束,关闭连接
            closeConnection();
            
            Long end = new Date().getTime();
            System.out.println("执行时间 "+ (end - start) +" ms;"+ (end - start)/1000 +"s;"+ (end - start)/1000/60 +"m");
    
        }
    
    }
  • 相关阅读:
    Window7中Eclipse运行MapReduce程序报错的问题
    Hadoop以及其外围生态系统的安装参考
    《node.js开发指南》第五章与新版Node变化太大的一些问题
    打造开发React Native的Sublime
    幸福
    近日阅读记录
    react中属性默认值是true?
    git撤销操作总结
    React Native中的DeviceEventEmitter.addListener与DeviceEventEmitter.emit
    React父子组件的一个混淆点
  • 原文地址:https://www.cnblogs.com/binye-typing/p/5892563.html
Copyright © 2011-2022 走看看