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();
}
}
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();
}
}