public void doImport(Context ctx) throws ActionException {
String tableName = "imei_black_list";
if (JString.isNull(tableName))
return;
Table t = new Table(tableName);
List fileItems = (List) ctx.getRequest().getAttribute("form-data");
if (fileItems == null)
return;
Iterator iter = fileItems.iterator();
Hashtable results = new Hashtable();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField())
continue;
String tmp = getTempFile();
List records;
try {
item.write(tmp);
//导入数据库
records = FileRegister.getHandler(item.getName()).process(tmp);
int uc = TableUtil.load(t, records);
log(ctx.getRequest(), "数据维护:上传数据到" + t.getLabel());
} catch (Exception e) {
e.printStackTrace();
} finally {
records = null;
}
}
}
/**
* 加载数据到指定的表中
* @param t
* @param records
* @return
* @throws SQLException
*/
public static int load(Table t, List records) throws Exception
{
if(t==null || records==null || records.size()==0)
return 0;
List fields = t.getFields();
if(fields == null){
fillTable(t);
fields = t.getFields();
}
String sql = getInsertSQL(t);
Connection conn = null;
PreparedStatement ps = null;
Field field;
try{
conn = getConnection();
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
for(int rc=0;rc<records.size();rc++){
for(int i=1;i<=fields.size();i++){
field = (Field)fields.get(i-1);
int type = field.getFdType();
String value = (String)((Record)records.get(rc)).getValue(i-1);
ps.setObject(i, ObjectUtils.getSqlObject(type,value));
}
ps.executeUpdate();
}
conn.commit();
}catch(Exception e){
try{
conn.rollback();
}catch(Exception ee){}
throw e;
}finally{
try{
conn.setAutoCommit(true);
}catch(Exception e){}
close(null,ps,conn);
}
return records.size();
}
今天做项目的时候学习到一种新的上传文件,和导入数据库的写法,现拿出来分享一下。