- 论坛徽章:
- 0
|
/**
* 获取系统表对象列表。
* @param stmt
* @param sql
* @return
* @throws SQLException
*/
public static List<SysTable> getSysTable(Statement stmt, String sql) throws SQLException {
// TODO Auto-generated method stub
AS400JDBCStatement asStmt = (AS400JDBCStatement)stmt;
AS400JDBCResultSet rs = (AS400JDBCResultSet)asStmt.executeQuery(sql);
try {
//获取AS400JDBCResultSet对象的私有成员row_对应的java.lang.reflect.Field对象
Field f = rs.getClass().getDeclaredField("row_");
//设置属性是否可以访问,如果你调用get和set方法,那么有可能会引发访问权限的错误,这个时候你可以调用setAccessible方法使得该属性可以访问
f.setAccessible(true);
//获取AS400JDBCResultSet对象的私有成员row_
Object o =f.get(rs);
//获取私有成员row_的私有成员ccsids_对应java.lang.reflect.Field对象
Field f2 = o.getClass().getDeclaredField("ccsids_");
f2.setAccessible(true);
//获取ccsids_私有成员
Object o2 =f2.get(o);
//由反编译或DEBUG可知ccsids_成员为int数组,所以强制转换。
int[] ccsid = (int[])o2;
//表的第六个字段的CCSID值不正确,因此强制修改为中文CCSID值
ccsid[5]=935;
//修改好的成员写回对应的对象。
f2.set(o, ccsid);
f.set(rs, o);
//关闭成员可访问性
f2.setAccessible(false);
f.setAccessible(false);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 查询到结果
if (rs!= null && rs.next()) {
List<SysTable> list = new ArrayList<SysTable>();
do{
SysTable sysTable = new SysTable();
sysTable.setName(StringUtil.rightTrim(rs.getString("TABLE_NAME")));
sysTable.setCreator(StringUtil.rightTrim(rs.getString("TABLE_OWNER")));
sysTable.setType(StringUtil.rightTrim(rs.getString("TABLE_TYPE")));
sysTable.setColcount(rs.getInt("COLUMN_COUNT")) ;
sysTable.setReclength(rs.getInt("ROW_LENGTH"));
sysTable.setLabel(StringUtil.rightTrim(rs.getString("TABLE_TEXT")));
sysTable.setRemarks(StringUtil.rightTrim(rs.getString("LONG_COMMENT")==null?"":rs.getString("LONG_COMMENT"))) ;
sysTable.setDbname(StringUtil.rightTrim(rs.getString("TABLE_SCHEMA"))) ;
sysTable.setAlteredts(StringUtil.rightTrim(rs.getString("LAST_ALTERED_TIMESTAMP")));
sysTable.setSysTname(StringUtil.rightTrim(rs.getString("SYSTEM_TABLE_NAME"))) ;
sysTable.setSysDname(StringUtil.rightTrim(rs.getString("SYSTEM_TABLE_SCHEMA"))) ;
sysTable.setFiletype(StringUtil.rightTrim(rs.getString("FILE_TYPE"))) ;
sysTable.setTbdbname(StringUtil.rightTrim(rs.getString("BASE_TABLE_SCHEMA")==null?"":rs.getString("BASE_TABLE_SCHEMA"))) ;
sysTable.setTbname(StringUtil.rightTrim(rs.getString("BASE_TABLE_NAME")==null?"":rs.getString("BASE_TABLE_NAME"))) ;
sysTable.setTbmember(StringUtil.rightTrim(rs.getString("BASE_TABLE_MEMBER")==null?"":rs.getString("BASE_TABLE_MEMBER"))) ;
sysTable.setSystable(StringUtil.rightTrim(rs.getString("SYSTEM_TABLE"))) ;
sysTable.setSelectomit(StringUtil.rightTrim(rs.getString("SELECT_OMIT")));
sysTable.setInsertable(StringUtil.rightTrim(rs.getString("IS_INSERTABLE_INTO")));
sysTable.setIaspnumber(rs.getShort("IASP_NUMBER"));
sysTable.setEnabled(StringUtil.rightTrim(rs.getString("ENABLED")==null?"":rs.getString("ENABLED"))) ;
sysTable.setMaintain(StringUtil.rightTrim(rs.getString("MAINTENANCE")==null?"":rs.getString("MAINTENANCE"))) ;
sysTable.setRefresh(StringUtil.rightTrim(rs.getString("REFRESH")==null?"":rs.getString("REFRESH"))) ;
sysTable.setRefreshdts(rs.getString("REFRESH_TIME"));
sysTable.setMqtdef(rs.getClob("MQT_DEFINITION")) ;
sysTable.setIsolation(StringUtil.rightTrim(rs.getString("ISOLATION")==null?"":rs.getString("ISOLATION"))) ;
sysTable.setPartTable(StringUtil.rightTrim(rs.getString("PARTITION_TABLE"))) ;
list.add(sysTable);
}while(rs.next());
return list;
}
return null;
} |
|