Hive之JDBC操作

来源:互联网 发布:胖子升级数据 编辑:程序博客网 时间:2024/06/07 17:12
package com.uplooking.bigdata.sql;

import com.uplooking.bigdata.domain.Student;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.sql.*;

/**
 * Java版本,最后对结果集进行封装
 */
public class JavaSparkThirftServer {
    public static void main(String[] args) throws Exception {
        Class.forName("org.apache.hive.jdbc.HiveDriver");
        //2、获得连接Connection
        String url = "jdbc:hive2://master:10000/default";
        String username = "root";
        String password = "";
        Connection connection = DriverManager.getConnection(url, username, password);
        //3、获得Statement声明
        String sql = "select pid, pname, page, pgender from person where page between 17 and 20";
        PreparedStatement ps = connection.prepareStatement(sql);
        //4、执行SQL
        ResultSet rs = ps.executeQuery();
        //5、处理返回值
        while(rs.next()) {
            int pid = rs.getInt("pid");
            String pname = rs.getString("pname");
            int page = rs.getInt("page");
            String pgender = rs.getString("pgender");
//            System.out.println(pid + ", " + pname + ", " + page + ", " + pgender);
            /*
                封装结果集
                将以上数据封装到一个对象里面,把该对象返回
                 Student stu = new Student(pid, pname, page, pgender);
                 System.out.println(stu);
                 要想自动对结果集进行封装,就需要通过反射方式来给对象的属性赋值,
                 那么就需要使用数据库表中的元数据(列名--->类中的属性有个对应)
             */
            ResultSetMetaData md = rs.getMetaData();
            int cc = md.getColumnCount();//查询的列数
            System.out.println("----------------------------------------");
            Class clazz = Student.class;
            Object obj = clazz.newInstance();
            for(int c = 1; c <= cc; c++) {
                String columnName = md.getColumnName(c);
                Object columnValue = rs.getObject(columnName);
//                System.out.println("columnName: " + columnName + ", columnValue:" + columnValue);
                PropertyDescriptor pd = new PropertyDescriptor(columnName, clazz);
                Method setMethod = pd.getWriteMethod();
                setMethod.invoke(obj, columnValue);
            }
            System.out.println(obj);
        }
        //6、关闭资源
        rs.close();
        ps.close();
        connection.close();
    }
}

0 0
原创粉丝点击