新三国演义种子的种子是多少啊? 请知道的各位大大...

(* ̄? ̄*)的喜欢 | LOFTER(乐乎) - 让兴趣,更有趣
LOFTER for ipad ---- 让兴趣,更有趣
(* ̄? ̄*) 的喜欢
  被喜欢
  被喜欢
{list posts as post}
{if post.type==1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type==2}
{if post.type == 3}
{if !!post.image}
{if post.type == 4}
{if !!post.image}
{if !!photo.labels && photo.labels.length>0}
{var wrapwidth = photo.ow < 500?photo.ow:500}
{list photo.labels as labs}
{var lbtxtwidth = Math.floor(wrapwidth*(labs.ort==1?labs.x:(100-labs.x))/100)-62}
{if lbtxtwidth>12}
{if !!labs.icon}
{list photos as photo}
{if photo_index==0}{break}{/if}
品牌${make||'-'}
型号${model||'-'}
焦距${focalLength||'-'}
光圈${apertureValue||'-'}
快门速度${exposureTime||'-'}
ISO${isoSpeedRatings||'-'}
曝光补偿${exposureBiasValue||'-'}
镜头${lens||'-'}
{if data.msgRank == 1}{/if}
{if data.askSetting == 1}{/if}
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post_index < 3}
{if post.type == 1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
{if drlist.length>0}
更多相似达人:
{list drlist as dr}{if drlist.length === 3 && dr_index === 0}、{/if}{if drlist.length === 3 && dr_index === 1}、{/if}{if drlist.length === 2 && dr_index === 0}、{/if}{/list}
暂无相似达人,
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
this.p={ dwrMethod:'queryLikePosts',fpost:'1ed0e314_10d96151',userId:,blogListLength:30};Excel表格导入,并且对导入的数据做验证,成功的进行导入,失败的不导入,各位大大有什么好的建议! - ITeye问答
1.Excel表格导入,并且对导入的数据做验证,成功的进行导入,失败的不导入,各位大大有什么好的建议!2.页面上并且有覆盖与追加的按钮,覆盖是指如果数据库中存在code唯一值则更新,否则插入;追加是值如果存在则不操作,不存在则插入。还有一个选择表名的下拉框,选择录入不同的表。3.因为要实现不同的表的数据导入,并且表中的外键(数据库没设置)必须用中文从别的表取得Id录入!!4.验证后的数据并不是直接录入数据库,而是先在页面显示,用户在提交录入!
现在小弟的实现方法是将数据录入到List&String[]&中,然后用一个验证数据库表对每一个表格进行验证,增加个错误提示,然后对正确的存在另一个List&String[]&中,但是在这里要存入数据库就有点问题了,因为List中存放的数据格式都是字符串String,要存入数据库中不好操作(因为录入的表格动态操作,所以不清楚到底会有多少列)!
项目用的框架是JSF+ibatis+Spring的,大家有没有更好的方法……
最后一点,写入有点问题,更正一下。
--------------------------------------------------------------
最后补充一点:读取数据时,需要注意设置读取范围,比如限制范围为A2 -Z10,否则,如果Excel表格的某一行或某一列被加了背景颜色,你会发现,他会读取很多空数据,由于你加背景,jxl或pio会认为他是有效的。因此都会读取出来。
之前也做过一个类似的功能,由于校验需求优先级不够高且手头工作量比较大,因此数据校验这块没做。
提供一些思路,仅供参考。
首先你要不要考虑你导入数据的本身的情况
1.你的源数据是FreeForm,还是DataGrid甚至两种情况都存在,当然,建议是两种格式的数据导入均有实现。
2.通常情况下,导入的数据不太可能大得太离谱,因此可考虑定义一个java数据集模型,先批量把这批数据读入数据模集型,而后考虑检验及写入数据库。因此导入流程为:
读取数据 --& 进入数据集模型 --& 进行校验 --& 写入数据库
3.有了数据模型之后,可以页面显示同时把数据集模型序列化至一个临时文件,用户在提交时,反序列化模型,同时,调用写入数据库操作写入数据库。
由于本人不太清楚你那里有些什么校验。现将校验分一下类:
1.是否允许空值
2.正则表达式校验,如年龄,金额,日期等
3.逻辑校验,如要求:B1==C1+D1,A2==B2+C3
4.其他暂时考虑不到的校验可考虑抽出接口,具体情况具体实现。
最后补充一点:读取数据时,需要注意设置读取范围,限制范围为A1 -Z10,否则,如果Excel表格的某一行或某一列被加了背景颜色,你会发现,他会读取很多空数据,浪费资源。
使用POI操作Excel非常方便
上个月做了一个功能,和楼主描述的差不多。
针对你提出问题(1):我是用了jxl和poi两个支持包,把需要导入的。
数据字段XML配置好,然后用jodm解析的。因我哪里需求有两种,一是只有有错误,整个表算入失败,另生成一个excel表,用颜色标记 错误行,并给出错误提示信息。另外只导出错误数据也用颜色标记 错误行,并给出错误提示信息。
问题(2):导出的表名,我从数据库加载的,用户在导入之前,先要下载我准备好的模板。你说覆盖好实现,因为你如果用的是poi这个包话,一般是把要导入的数据把一个二维数组里的。可以拿来比例。(因我哪里,每月只保存一条有效记录,所以在导入之前我都清空表数据。当然是放到事务里执行的)。
问题(3):可在以xml中定义我哪里这么定义的
&table name="tablename"&
&column name="code" type="string" index="0" des="代号"&
&/column
...
&/table&
你根据需求可以自己定义,在java中用jodm解析就可以了。
问题(4):这个更好解决,在你拼insert()时候,用事务控制,还有很多其它办法。
今天用的公司电脑,没有代码需要的话的Q我。
没有那么复杂吧,既然你不知道有多少列,那就别用List&String[]&,直接用List&List&String&&,建议用Vector&Vector&String&&呵呵。
这么多问题,还是要找到问题的根本。我觉得,当前问题的根本不是excel导入的问题。而是读取的数据,不好存入数据库的问题。
首先,每次导入时选的表不同,导致数据列不同。这个其实还比较简单。有两种方案可以选择。
1. 查询数据库数据字典,可以根据表名,查询到表中各字段的名字及数据类型。在存入数据时,采用拼SQL,批量存储的方式。 这里有一个关键问题是excel中的列与数据库表中字段名的映射问题,只要这个问题解决了,就好办。解决这个问题应该不难。缺点,数据库表中的所有字段都会被读取出来,进行操作,有时不符合需求。
2。 数据库表的结构相对是稳定的。可以在数据库中增加一张表,来记录,哪些表需要数据导入,各个数据表哪些字段需要导入,及各字段数据类型。(这里记录的数据类型可以是java类型以方便直接数据类型转换,也可以是数据库列数据类型。)。这个好处是可以灵活控制导入的字段的范围。缺点:有表增加时,需要手动增加数据记录来记录配置。
我们项目中用到的excel导入是用的apache poi框架,这个目前来看,还不错,它的文档也很详细,excel文件的内容会被读取到sheet页中,直接获取sheet页中有多少row,就知道当前录入的excel文件中有多少条数据了
看这个类似的设计文档
http://trent-/blog/1074807
JDBC中用setString(index,value)可以存oracle中的任何数据类型,但构造动态数据时,要参考具体的数据库的特征,我用的是oracle,内部主键由序列产生,所以传参的时候会增加序列串名,日期格式的也需要增加oracle内部的todate()函数的串名,形式如下:
strBuf.append(tablename);
strBuf.append("_SEQUENCE.NEXTVAL");
strBuf.append("TO_DATE(SUBSTR(?,1,19),'YYYY-MM-DD HH24:MI:SS'),");
sql = "INSERT INTO " + tableName
+ "(" + strBufFN.toString()
+ " VALUES ("+ strBufFV.toString() + ")";
我做的和你类似,是一个TXT文本导入到数据库,我把页面表单输入的数据库表名,以及数据库表字段和文本文件的数据项之间的对应关系,导入方式等都记录到XML配置文件中,然后根据该配置文件导入数据。数据导入的语句是用预处理动态生成的,形式如:
INSERT INO TABLE_NAME(field1,field2,...,fieldn) values(?,?,...,?)用StringBuffer构造这种预处理语句,然后批量提交;当页面选择数据库表的时候,用Ajax动态刷新数据库表字段和文件数据项的对应关系,用户设置完成后点保存就可以自动生成配置文件,导入的时候读这个配置文件就可以了
直接读取Excel的值插入到数据库表里,操作excel的包可以知道你有多少列的,所以你只要动态的创建表,吧数据存在表里,然后预留两个字段,分别记录是否成功,以及成功和失败的备注,更新结束后,你建的表中成功的更新为成功,错误的更新错误原因。。最后再把这张表的数据导出Excel即可。。
如果用flex的话还好做一点,如果用jsp,这个要做无刷新上传吗?
public String saveLoan(){
String function="借用";
User user=(User)getSession().getAttribute("user");
credenceNum=RandomUtils.getBicker(user.getCompanyName(),function);
if(upload!=null && uploadFileName !=null){
@SuppressWarnings("unused")
String project="";
@SuppressWarnings("unused")
String projectname="";
@SuppressWarnings("unused")
String filename="";
getResponse().setContentType("text/charset=UTF-8");
getRequest().setCharacterEncoding("UTF-8");
System.out.println(getUpload());
System.out.println(getUploadFileName());
String rootPath=getSession().getServletContext().getRealPath("/");
System.out.println(rootPath);
String newFileName=MyUtils.upload(getUploadFileName(), rootPath, getUpload());
System.out.println(newFileName);
FileInputStream excelResourcr=new FileInputStream(rootPath+newFileName);
Workbook rwb=Workbook.getWorkbook(excelResourcr);
@SuppressWarnings("unused")
int sheetCount=rwb.getNumberOfSheets();
Sheet rs=rwb.getSheet(0);
//Sheet rs1=rwb.getSheet(1);
int rows=rs.getRows();
int clos=rs.getColumns();
//在JXL中却恰恰相反,是“先列后行”
loan=new Loan();
loan.setSerialnum(credenceNum);
loan.setFeedmanager(user.getEmplName());
loan.setFeedmanagertel(user.getMobilePhone());
loan.setBorrowaddress(user.getCompanyName());
loan.setAction("0010");
//System.out.println(user.getEmplNo());
loan.setState("1");
int getokCount=0;
for(int i=0;i&rows-1;i++){
for(int n=0;n&n++){
loan.setRowNum(i+1);
switch(n){
//loan.setBorrowdate(null);
loan.setTempborrowdate(rs.getCell(0,i+1).getContents());
///System.out.println(rs.getCell(1,i+1).getContents());
loan.setBorrowname(rs.getCell(1,i+1).getContents());
loan.setBorrownum(rs.getCell(2,i+1).getContents());
loan.setDepartment(rs.getCell(3,i+1).getContents());
&&&&&&&&&&&&&&&&&&&&&&& loan.setDept(rs.getCell(4,i+1).getContents());
&&&&&&&&&&&&&&&&&&&&&&&
loan.setFeednum(rs.getCell(5,i+1).getContents());
loan.setDepict(rs.getCell(6,i+1).getContents());
loan.setFeedtype((rs.getCell(7,i+1).getContents()));
//System.out.println(rs.getCell(7,i+2).getContents());
loan.setItemname(rs.getCell(8,i+1).getContents());
loan.setItemmoment(rs.getCell(9,i+1).getContents());
loan.setOutstore(rs.getCell(11,i+1).getContents());
loan.setBorrowscalar(rs.getCell(12,i+1).getContents());
loan.setUnit(rs.getCell(13,i+1).getContents());
loan.setOutstone(rs.getCell(14,i+1).getContents());
loan.setBorrowterm(rs.getCell(15,i+1).getContents());
loan.setBorrowemail(rs.getCell(16,i+1).getContents());
loan.setBorrowmobile(rs.getCell(17,i+1).getContents());
loan.setBorrowtel(rs.getCell(18,i+1).getContents());
loan.setUsetype(rs.getCell(19,i+1).getContents());
loan.setMovereason(rs.getCell(20,i+1).getContents());
loan.setReamark(rs.getCell(21, i+1).getContents());
&&& reMesage =(String)loanService.saveLoan(loan);
//System.out.println(reMesage);
if("OK".equals(reMesage)){
getokCount=getokCount+1;
rwb.close();
File file=new File(rootPath+newFileName);
if(file.exists()){
file.delete();
int errorcount=rows-1-getokC
if (getokCount==rows-1){
//this.jsonString = "{success:true,contentTypeIsValid:" + getUploadFileName() + "}";
this.jsonString = "{success:true,credenceNum:'"+credenceNum+"'}";
getRequest().setAttribute("jsonString", jsonString);
return SUCCESS;
}else if (getokCount!=0 && getokCount!=rows-1){
this.jsonString = "{success:true,credenceNum:'"+credenceNum+",失败"+ errorcount+"条记录,成功"+ getokCount +"条记录'}";
getRequest().setAttribute("jsonString", jsonString);
return SUCCESS;
}else if(getokCount==0){
this.jsonString = "{success:false,reMesage:'所有操作失败,请查看日志!'}";
getRequest().setAttribute("jsonString", jsonString);
return INPUT;
}catch(Exception e){
e.printStackTrace();
//this.jsonString = "{success:false,contentTypeIsValid:" + getUploadFileName() + "}";
this.jsonString = "{success:false,reMesage:'"+reMesage+"'}";
getRequest().setAttribute("jsonString", jsonString);
return INPUT;
直接用sql的方式操作excel应该就比较简单了吧?找找jdbc excel
引用因为录入的表格动态操作,所以不清楚到底会有多少列
那等于说是程序并不能知道有哪些列,只知道是字符串的
已解决问题
未解决问题

参考资料

 

随机推荐