帮看下这段代码有什么问题,我想要得到的是数据库的表字段,如果指定模式名,直接执行;如果有dblink,通过dblink的方式查找字段信息;如果是同义词表,用同义词的方法查找字段信息。现在的问题是,执行dblink的查找后,resultset有信息,即使不是同义词表,没有执行resultSet = stmt.executeQuery(sql); ,先前保留的resultset也会被清空,还有什么方法可以解决么
public List <String> getColByTab(String tableName) throws SQLException {
ResultSet resultSet_synonym;
ResultSet resultSet_dblink, resultSet22;
if (hasDefaultSchema()) {
String sql = "SELECT A.COLUMN_NAME as name"
+ " FROM DBA_TAB_COLUMNS A " + "WHERE A.OWNER = '"
+ defaultSchema + "' AND A.TABLE_NAME = '" + tableName
+ "'";
resultSet = stmt.executeQuery(sql);
} else {
String sql1 = "select object_name, OWNER from dba_objects where object_type='DATABASE LINK'";
resultSet_dblink = stmt.executeQuery(sql1);
while (resultSet_dblink.next()) {
String StrRS = resultSet_dblink.getString(1);
System.out.println("dblink=============" + StrRS);
String sql3 = "select owner from all_tables@" + StrRS
+ "" + " where table_name=upper('" + tableName
+ "')";
resultSet22 = stmt.executeQuery(sql3); while (resultSet22.next()) {
String sql_link = "select COLUMN_NAME from DBA_TAB_COLUMNS@"
+ StrRS
+ " where OWNER='"
+ resultSet22.getString(1).trim()
+ "'and TABLE_NAME='" + tableName + "'";
resultSet = stmt.executeQuery(sql_link);
}
}
String sql = "select TABLE_OWNER,TABLE_NAME "
+ "from dba_synonyms where synonym_name like '" + tableName
+ "'";
resultSet_synonym = stmt.executeQuery(sql);
while (resultSet_synonym.next()) {
sql = "SELECT COLUMN_NAME as name FROM DBA_TAB_COLUMNS "
+ "WHERE OWNER = '" + resultSet_synonym.getString(1)
+ "'" + " and TABLE_NAME like '"
+ resultSet_synonym.getString(2) + "'";
resultSet = stmt.executeQuery(sql);
}
}
if (resultSet == null) {
return null;
}
List <String> columnList = new ArrayList <String>();
while (resultSet.next()) {
for (int i = 1; i < ((ResultSetMetaData) resultSet.getMetaData())
.getColumnCount() + 1; i++) {
columnList.add(resultSet.getString(i));
}
}
return columnList;
}
public List <String> getColByTab(String tableName) throws SQLException {
ResultSet resultSet_synonym;
ResultSet resultSet_dblink, resultSet22;
if (hasDefaultSchema()) {
String sql = "SELECT A.COLUMN_NAME as name"
+ " FROM DBA_TAB_COLUMNS A " + "WHERE A.OWNER = '"
+ defaultSchema + "' AND A.TABLE_NAME = '" + tableName
+ "'";
resultSet = stmt.executeQuery(sql);
} else {
String sql1 = "select object_name, OWNER from dba_objects where object_type='DATABASE LINK'";
resultSet_dblink = stmt.executeQuery(sql1);
while (resultSet_dblink.next()) {
String StrRS = resultSet_dblink.getString(1);
System.out.println("dblink=============" + StrRS);
String sql3 = "select owner from all_tables@" + StrRS
+ "" + " where table_name=upper('" + tableName
+ "')";
resultSet22 = stmt.executeQuery(sql3); while (resultSet22.next()) {
String sql_link = "select COLUMN_NAME from DBA_TAB_COLUMNS@"
+ StrRS
+ " where OWNER='"
+ resultSet22.getString(1).trim()
+ "'and TABLE_NAME='" + tableName + "'";
resultSet = stmt.executeQuery(sql_link);
}
}
String sql = "select TABLE_OWNER,TABLE_NAME "
+ "from dba_synonyms where synonym_name like '" + tableName
+ "'";
resultSet_synonym = stmt.executeQuery(sql);
while (resultSet_synonym.next()) {
sql = "SELECT COLUMN_NAME as name FROM DBA_TAB_COLUMNS "
+ "WHERE OWNER = '" + resultSet_synonym.getString(1)
+ "'" + " and TABLE_NAME like '"
+ resultSet_synonym.getString(2) + "'";
resultSet = stmt.executeQuery(sql);
}
}
if (resultSet == null) {
return null;
}
List <String> columnList = new ArrayList <String>();
while (resultSet.next()) {
for (int i = 1; i < ((ResultSetMetaData) resultSet.getMetaData())
.getColumnCount() + 1; i++) {
columnList.add(resultSet.getString(i));
}
}
return columnList;
}
楼主【chaohui10】截止到2008-07-09 10:46:36的历史汇总数据(不包括此帖):
发帖的总数量:40 发帖的总分数:610 每贴平均分数:15
回帖的总数量:47 得分贴总数量:7 回帖的得分率:14%
结贴的总数量:33 结贴的总分数:430
无满意结贴数:9 无满意结贴分:180
未结的帖子数:7 未结的总分数:180
结贴的百分比:82.50 % 结分的百分比:70.49 %
无满意结贴率:27.27 % 无满意结分率:41.86 %
楼主加油
每个都返回一个你想要的ResultSet值,
然后在main里测试下 能不能比较~