Hive----JDBC工具类的建立使用(包括HIVEsql工具类)---IDEA开发

 

Hive-----JDBC---util

package com.www.hive.util;

import java.sql.*;
import java.util.Date;
import java.util.*;
import java.util.List;

public class HiveUtil {

    //成员变量
    private Connection connection=null;
    private Statement statemet=null;
    private PreparedStatement preparedStatement=null;
    ResultSet resultSet=null;

    /**
     * 1.加载jdbc的驱动
     */
    static{
        try {
            Class.forName("org.apache.hive.jdbc.HiveDriver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //2.获得链接,获得操作对象
    public HiveUtil(){

        try {
            //获得链接
            connection=DriverManager.
                    getConnection("jdbc:hive2://192.168.136.14:10010/","hadoop","");
            //获得操作对象
            statemet=connection.createStatement();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("获取链接失败!");
        }

    }

    //3.获得数据库列表
    public List<String> getDatebases(){
        List list=new ArrayList<String>();

        try {
            preparedStatement=connection.prepareStatement("show databases");
            resultSet=preparedStatement.executeQuery();

            while(resultSet.next()){
                list.add(resultSet.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return list;

    }

    //4.切换数据库
    public void ChangeData(String dataName){
        try {
            statemet=connection.createStatement();
            statemet.execute("use "+dataName);

        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("数据库不存在!");
        }
    }
    //5.列出数据库下的所有表
    public List<String> getTables(String dataName){
        List list=new ArrayList<String>();
        //切换数据库
        try {
            ChangeData(dataName);
            preparedStatement=connection.prepareStatement("show tables");
            resultSet=preparedStatement.executeQuery();
            while(resultSet.next()){
                list.add(resultSet.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return  list;
    }


    //6.* 将传入的参数进行赋值,构建一个完整的PreparedStatement
        // * @param paras 传入的参数
        private void getParas(Object[] paras){
            if (paras != null){
                for (int i = 0;i < paras.length;i ++){
                    try {
                        preparedStatement.setObject(i + 1,paras[i]);
                    } catch (SQLException e) {
                        e.printStackTrace();

                    }
                }
            }
        }
    //7.执行查询语句有返回结果
    public ResultSet getResult(String adtaName,String sql,Object[] para){

        try {
            ChangeData(adtaName);
            preparedStatement = connection.prepareStatement(sql);
            getParas(para);
            return preparedStatement.executeQuery();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    //8.查看表的结构
    public List<String> getDesc(String database,String table){
        List<String> list=new ArrayList<String>();
        try {
            preparedStatement =connection.prepareStatement("desc "+database+"."+table);
            ResultSet re=preparedStatement.executeQuery();
            while(re.next()){
                list.add(re.getString(1)+":"+re.getString(2));
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return list;
    }
    //9.遍历信息
    public void catDesc(List<String> list){
        for (String li:list) {
            System.out.println(li);
        }
    }
    //10.创建临时新表返回结果
    public List<String> getNewTable(String sql,int[] in){
        String tableName="temp_"+new Date().getTime();
        try {
            preparedStatement =connection.prepareStatement("create table temp."+tableName+" as "+sql);

            preparedStatement.execute();

            int size = getDesc("temp",tableName).size();

            preparedStatement=connection.prepareStatement("select * from temp."+tableName);

            resultSet=preparedStatement.executeQuery();

           if(in==null){
               return getData(resultSet,size);
           }else{
               return getclomData(resultSet,in);
           }



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

    }
    //11.遍历表数据与创建临时表结合使用
    private List<String> getData(ResultSet resultSet,int size){
        List<String> list = new ArrayList<>();
        try {
            while (resultSet.next()){
                String line = "";
                for(int i = 0;i < size;i ++){
                    line += resultSet.getString(i + 1) + ",";
                }
                line = line.substring(0,line.length() - 1);
                list.add(line);
            }
            return list;
        }catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    //12.遍历指定的数据表与创建临时表结合使用
    private List<String> getclomData(ResultSet resultSet,int[] clumIndex){
        List<String> list=new ArrayList<>();
        try {
            while(resultSet.next()){
                String line=" ";
            for(int i=0;i<clumIndex.length;i++){
                line+=resultSet.getString(i+1)+" ";
            }
            list.add(line);
            }
            return  list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    //13.对表数据进行随机抽样
    public List<String>  getRandomData(String databaseName,String tableName,int count,int clom ){

        List<String> list=new ArrayList<>();
        int size=getDesc(databaseName,tableName).size();
        try {
            preparedStatement=connection.prepareStatement("select *,rand() r from "+databaseName+"."+tableName+" order by r limit "+count);

            resultSet=preparedStatement.executeQuery();
            if(clom==0){
                list=getData(resultSet,size);
            }else{
                list=getData(resultSet,count);
            }

            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    //14.自定义SQL创建为一张表返回结果
    public List<String> getDataBySql(String sql){
        String tableName="temp_"+new Date().getTime();

        List<String> list=new ArrayList<>() ;
        try {
            preparedStatement =connection.prepareStatement("create table temp."+tableName+" as "+sql);

            preparedStatement.execute();

            int size = getDesc("temp",tableName).size();

            preparedStatement=connection.prepareStatement("select * from temp."+tableName);

            resultSet=preparedStatement.executeQuery();

            list=getData(resultSet,size);
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

    //.关闭资源
    public void close(){
        try {
            if(preparedStatement!=null){
                preparedStatement.close();
            }
            if(statemet!=null){
                statemet.close();
            }
            if(connection!=null){
                connection.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("不能关闭资源!");
        }
    }

}

 

 

 

 

Hive-----SQL-----util

package com.www.hive.utilSql;

public class HiveSQLutil {

/*
* 1.通过数据库名,表名,查询某些列或者函数操作的列,返回结果
* */
    public String SCAN(String databaseName,String tableName,String[] columns,String column,String type){
        String sql="";
        String temp="";
        for (String c:columns) {
            temp+=c+",";
        }
        sql="select " + temp + type +"(" + column + ")" + " from " + databaseName + "." + tableName + " group by " + temp.substring(0,temp.length() - 1);
        return sql;
    }

/*
* 2.获得前n条数据
* */
    public String getTableDataByN(String database, String table, String[] columns, int n){
        String cls = "";
        for (String c : columns){
            cls += c + ",";
        }
        cls = cls.substring(0,cls.length() - 1);
        String sql = "select " + cls + " from " + database + "." + table + " limit " + n;
        return sql;
    }

    /**
     * 3.获得指定数据表的前百分之n的数据
     *
     */
    public String getDataByNPercent(String database, String table, String[] columns, int n){
        String cls = "";
        for (String c : columns){
            cls += c + ",";
        }
        cls = cls.substring(0,cls.length() - 1);
        String sql = "select " + cls + " from " + database + "." + table + " tablesample(" + n + " percent)";
        return sql;
    }

    /**
     * 4.随机抽样
     *
     */
    public String getRandomDataN(String database, String table, String[] columns, int n){
        String cls = "";
        for (String c : columns){
            cls += c + ",";
        }
        cls = cls.substring(0,cls.length() - 1);
        String sql = "select " + cls + ",RAND() r from " + database + "." + table + " order by r limit " + n;
        return sql;
    }

    /**
     * 条件查询
     * where id=? and name=?
     */
    public String getDataByCondition(String database, String table, String[] columns, String[] conditions, String[] values){
        String c = "";
        for (int i = 0;i < columns.length;i ++){
            c += " and " + columns[i] + " " + conditions[i] + " " + values[i];
        }
        String sql = "select * from " + database + "." + table + " where 1 = 1" + c;
        return sql;
    }
}

 

 

Test

package com.www.hive.test;

import com.www.hive.util.HiveUtil;
import com.www.hive.utilSql.HiveSQLutil;

import java.sql.ResultSet;
import java.sql.SQLOutput;
import java.util.*;

public class Test {
    public static void main(String[] args) {
        HiveUtil hiveUtil=new HiveUtil();
        List<String> list=new ArrayList();


        //1.获取数据库下的所有表
//        list=hiveUtil.getTables("test");
//
//        for(Object li:list){
//            System.out.println(li);
//        }
        System.out.println(".........................");
        //2.有返回值查询
//        try {
//            ResultSet re=hiveUtil.getResult("test","select * from " +
//                    "orders limit 10",null);
//            while(re.next()){
//               list.add(re.getString(1)+" "+
//                       re.getString(2)+" "+
//                       re.getString(3)+" "+
//                       re.getString(4));
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//
//        }
//        for(String li:list){
//            System.out.println(li);
//        }
        //3.查看表结构
        //list=hiveUtil.getDesc("test","orders");
        //4.遍历临时的新表
        //list=hiveUtil.getNewTable("select * from test.orders limit 10",new int[]{1,3});
       //5.随机抽样
        //list=hiveUtil.getRandomData("test","make",10,0);
        String sql="";
        HiveSQLutil hi=new HiveSQLutil();

        sql=hi.SCAN("test","purchaser",new String[]{"age"},"age","count");

        list=hiveUtil.getDataBySql(sql);

        hiveUtil.catDesc(list);

        hiveUtil.close();
    }
}

 

 

猜你喜欢

转载自blog.csdn.net/qq_37001101/article/details/84038287
今日推荐