?? wrapperutil.java
字號(hào):
package myjdbc.util;
import java.util.List;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.sql.SQLException;
import java.lang.reflect.Method;
import java.lang.reflect.Field;
import java.sql.Date;
import java.sql.Timestamp;
public final class WrapperUtil {
private static final WrapperUtil wutil = new WrapperUtil();
private WrapperUtil() {}
public static WrapperUtil getInstance() {
return wutil;
}
public List wrapperToObjectCol(ResultSet rs ,String sql,String tableConfigPath)throws SQLException,Exception
{
List result = new ArrayList();
String[] columns = SQLParserUtil.parserSQL(sql,"select","from");
//sql語(yǔ)句如果是select * from table,這樣的模式,則列名數(shù)組為空
if (columns == null) {
String[] tables = SQLParserUtil.getTableName(sql);
if (tables.length > 1)
throw new SQLException("暫時(shí)只支持單表的 select * from table 的操作!");
//table_config.xml解析
String filePath = (tableConfigPath.endsWith("/")? tableConfigPath+tables[0]+".xml" : tableConfigPath+"/"+tables[0]+".xml");
XMLParserUtil xmlP = new XMLParserUtil(filePath);
//返回對(duì)象是(類名+列名+類的屬性名)的組合
Object[] obs = xmlP.getFieldAndColumnMapping(tables[0]);
result = getObject(obs,rs,result);
}
else {
int len = columns.length;
int i = 0;
try {
while (rs.next()) {
Object[] temp = new Object[len];
while (i < len) {
temp[i] = rs.getObject(columns[i]);
i++;
}
result.add(temp);
i = 0;
}
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
return result;
}
private List getObject(Object[] xmlParserResult,ResultSet rs,List result)
{
try {
//指針往下移一行!
String className = (String) xmlParserResult[0];
String[] columns = (String[]) xmlParserResult[1];
String[] fields = (String[]) xmlParserResult[2];
int len = fields.length;
int count = 0;
while (rs.next()) {
count ++;
Object ob = Class.forName(className).newInstance();
Class obClass = ob.getClass();
for (int i = 0; i < len; i++) {
//找到屬性字段
Field field = obClass.getDeclaredField(fields[i]);
//找到該屬性的set方法
Method method = obClass.getMethod("set" +
Character.toUpperCase(fields[i].
charAt(0)) +
fields[i].substring(1),
new Class[] {field.getType()});
Object notKnown = rs.getObject(columns[i]);
String str = null;
java.util.Date date = new java.util.Date();
// Timestamp timestamp = null;
Double doub =null;
Long lon = null;
Integer it = null;
Float ft = null;
Boolean bl = null;
if(notKnown != null) {
if (date.getClass().isAssignableFrom(notKnown.getClass()))
{
date = (java.util.Date) notKnown;
// method.invoke(ob, new Object[] {date});
method.invoke(ob, new Object[] {date.toString()});
}
else if (notKnown instanceof String)
{
str = (String)notKnown;
method.invoke(ob, new Object[] {str});
}
else if (notKnown instanceof Long)
{
lon = (Long) notKnown;
method.invoke(ob, new Object[] {lon});
}
else if (notKnown instanceof Integer)
{
it = (Integer) notKnown;
method.invoke(ob, new Object[] {it});
}
else if (notKnown instanceof Double)
{
doub = (Double)notKnown;
method.invoke(ob,new Object[]{doub});
}
else if (notKnown instanceof Float)
{
ft = (Float) notKnown;
method.invoke(ob,new Object[]{ft});
}
else if (notKnown instanceof Boolean)
{
bl = (Boolean)notKnown;
method.invoke(ob,new Object[]{bl});
}
else ;
}
else
method.invoke(ob, new Object[] {null});
//調(diào)用set方法
}
result.add(ob);
}
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (Exception es) {
es.printStackTrace();
}
return result;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -