前言
要用java写个测试程序,得到执行sql之后的结果集列名,列类型,遍历结果集的行集.
运行效果
结果集总列数:5
第1列 : 名称 = 'PARAMETER_NAME', 类型 = ‘VARCHAR2’
第2列 : 名称 = 'PARAMETER_TYPE', 类型 = ‘NUMBER’
第3列 : 名称 = 'STRING_VALUE', 类型 = ‘VARCHAR2’
第4列 : 名称 = 'DATE_VALUE', 类型 = ‘DATE’
第5列 : 名称 = 'NUMERICAL_VALUE', 类型 = ‘NUMBER’
--------------------------------------------------------------------------------
遍历结果集开始...
--------------------------------------------------------------------------------
第1行, 第1列 = 'QSMSS_EXACT_DELETE'
第1行, 第2列 = '0'
第1行, 第3列 = 'null'
第1行, 第4列 = 'null'
第1行, 第5列 = '0.02'
--------------------------------------------------------------------------------
...
--------------------------------------------------------------------------------
第40行, 第1列 = 'qsma.report.include_unused'
第40行, 第2列 = '1'
第40行, 第3列 = 'False'
第40行, 第4列 = 'null'
第40行, 第5列 = '0'
--------------------------------------------------------------------------------
遍历结果集结束...
task end
工程下载点
实验
// @file class_A.java
// @brief test jdbc, show result set col and row
package test_jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
// 如果 System.out.printf 出现奇怪的编译错误
// 在eclipse中右击工程节点, 选择最后一项"属性"
// 选择 "Java Compiler"
// 在右面面板中去掉勾选"Use compliance from execution envronment on the 'Java Build Path'"
// 在‘Compiler compliance level’ 下拉框中,选择jdk1.7
// 将jdbc.jar加入工程
// 在eclipse中右击工程节点, 选择最后一项"属性"
// 选择 "Java Build Path",
// 在右面面板中, 选择第3个选项卡‘Libraries’
// 在选项卡对应的对话框中选择‘Add External JARs...’
// 给定路径, 选中从网上下载的jdbc jar包, 逐级选择确定,回到工程主UI.
public class class_A {
public class_A() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
fn_test_show_jdbc_result_set();
}
private static void fn_test_show_jdbc_result_set() {
try {
int i = 0;
int i_col_cnt = 0;
int i_row_sn = 0;
String url = null;
String uid = null;
String pwd = null;
boolean b_use_ora_db_on_company = true;
String str_col_name;
String str_col_type;
String str_col_content;
if (b_use_ora_db_on_company) {
// company env
url = "jdbc:oracle:thin:@192.168.16.41:1521:orcl";
uid = "system";
pwd = "oracle";
} else {
// home env
url = "jdbc:oracle:thin:@192.168.11.132:1521:orcl";
uid = "system";
pwd = "system";
}
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection conn = DriverManager.getConnection(url, uid, pwd);
PreparedStatement pstmt = null;
// pstmt = conn.prepareStatement("select * from help"); // 正确的sql
pstmt = conn.prepareStatement("select * from MVIEW$_ADV_PARAMETERS");
ResultSet rs = null;
rs = pstmt.executeQuery(); // 开始查询, 发出查询语句, 从服务器得到第一个行集
ResultSetMetaData rsmd = rs.getMetaData();
// select column_name,data_type from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='t_alarm_act'
i_col_cnt = rsmd.getColumnCount();
System.out.printf("结果集总列数:%d\n", i_col_cnt);
for (i = 0; i < i_col_cnt; i++) {
// ojdbc的参数都是基于1的, c++的参数都是基于0的
str_col_name = rsmd.getColumnName(i + 1);
str_col_type = rsmd.getColumnTypeName(i + 1);
System.out.printf("第%d列 : 名称 = '%s', 类型 = ‘%s’\n", (i + 1), str_col_name, str_col_type);
}
System.out.printf("--------------------------------------------------------------------------------\n");
System.out.printf("遍历结果集开始...\n");
while(rs.next()){
i_row_sn++;
System.out.printf("--------------------------------------------------------------------------------\n");
for (i = 0; i < i_col_cnt; i++) {
str_col_content = rs.getString(i + 1);
System.out.printf("第%d行, 第%d列 = '%s'\n", i_row_sn, (i + 1), str_col_content);
}
}
System.out.printf("--------------------------------------------------------------------------------\n");
System.out.printf("遍历结果集结束...\n");
conn.close();
System.out.println("task end");
} catch (Exception e) {
e.printStackTrace();
}
}
}