📄 wrapperutil.java
字号:
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语句如果是select * from table,这样的模式,则列名数组为空
if (columns == null) {
String[] tables = SQLParserUtil.getTableName(sql);
if (tables.length > 1)
throw new SQLException("暂时只支持单表的 select * from table 的操作!");
//table_config.xml解析
String filePath = (tableConfigPath.endsWith("/")? tableConfigPath+tables[0]+".xml" : tableConfigPath+"/"+tables[0]+".xml");
XMLParserUtil xmlP = new XMLParserUtil(filePath);
//返回对象是(类名+列名+类的属性名)的组合
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});
//调用set方法
}
result.add(ob);
}
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (Exception es) {
es.printStackTrace();
}
return result;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -