java dbc解析mysql select * 的值,不知表中具体的字段名,转成map:
在不知道表中具体字段名的情况下,可以使用ResultSetMetaData获取到查询结果的列信息,从而将查询结果转成Map。以下是详细的Java代码示例:
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
public class MysqlDbcUtil {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
String username = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1.加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2.建立数据库连接
conn = DriverManager.getConnection(url, username, password);
// 3.创建Statement对象
stmt = conn.createStatement();
// 4.执行查询语句
rs = stmt.executeQuery("select * from user");
// 5.获取查询结果的元数据
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
// 6.将查询结果转成Map
Map<String, Object> result = new HashMap<>();
int index = 0;
while (rs.next()) {
Map<String, Object> row = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnLabel(i); // 获取列名
Object value = rs.getObject(i); // 获取列的值
row.put(columnName, value);
}
result.put(Integer.toString(index), row); // 以行号作为Map的key,整个行作为value
index++;
}
// 7.打印结果
System.out.println(result);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
try {
// 8.关闭资源
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
}
}
在上面的代码中,我们首先通过ResultSetMetaData获取到查询结果的列信息,并遍历结果集将每一行转成Map。在转换时,我们以行号作为Map的key,整个行作为value存储。
java impala 查询kudu解析 select * 的值,不知表中具体的字段名,转成map:
类似于MySQL,Impala查询Kudu表也可以使用ResultSetMetaData获取查询结果的列信息,进而将查询结果转成Map。以下是详细的Java代码示例:
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
public class ImpalaDbcUtil {
public static void main(String[] args) {
String url = "jdbc:impala://localhost:21050/default;AuthMech=0;";
String username = "";
String password = "";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1.加载数据库驱动
Class.forName("com.cloudera.impala.jdbc41.Driver");
// 2.建立数据库连接
conn = DriverManager.getConnection(url, username, password);
// 3.创建Statement对象
stmt = conn.createStatement();
// 4.执行查询语句
rs = stmt.executeQuery("select * from kudu_table");
// 5.获取查询结果的元数据
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
// 6.将查询结果转成Map
Map<String, Object> result = new HashMap<>();
int index = 0;
while (rs.next()) {
Map<String, Object> row = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnLabel(i); // 获取列名
Object value = rs.getObject(i); // 获取列的值
row.put(columnName, value);
}
result.put(Integer.toString(index), row); // 以行号作为Map的key,整个行作为value
index++;
}
// 7.打印结果
System.out.println(result);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
try {
// 8.关闭资源
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
}
}
注意:在连接Kudu表时,需要使用Impala JDBC驱动。如果没有安装可以去Cloudera官网下载并安装。同时,在连接字符串中需要指定AuthMech参数,并将其设置为0,表示不进行身份验证。