今天折腾了一天,总算搞定了这个问题,下面就简单说一下整个过程吧:
- 上传文件
- 上传成功以后写到数据库中以备从数据库中读取该文件用</li>
- 从数据库中读取插入的文件的pid从而获取刚刚插入的文件名</li>
- 根据已知的文件名读取该文件的内容从而插入到相应的数据库的表中;</li>
<!–page import=”org.apache.commons.fileupload.*, java.io.*”–>
<!–p>ArrayList errorList = new ArrayList();
int contentLen = request.getContentLength();
if(contentLen > 5120000) {
session.setAttribute(“errorList”, errorList);
errorList.add(“每次上传文件的大小不能超过5M”);
System.out.println(“[Error:] 每次上传文件的大小不能超过5M: size=” + contentLen);
response.sendRedirect(“SingleUpLoadSuccess.jsp?fileNumber=-1″);
return;
}
int fileNumber = 0;
String uploadDir = “D:\\excelupLoad”;
ArrayList list = new ArrayList();
DiskFileUpload uploader = new DiskFileUpload();
uploader.setHeaderEncoding(“UTF-8″);
List fileItems = uploader.parseRequest(request);
Iterator iter = fileItems.iterator();
File uploadDirFile = new File(uploadDir);
if(uploadDirFile.exists()){
System.out.println(“[Info: ] Upload dir has been found: ” + uploadDir);
}
else {
if(uploadDirFile.mkdirs()) {
System.out.println(“[Info: ] Upload dir has been created: ” + uploadDir);
}
else {
System.out.println(“[Error:] Upload dir can’t be created: No file will be uploaded”);
session.setAttribute(“errorList”, errorList);
errorList.add(“上传的文件夹\”" + uploadDir + “\”不存在,可能已经被删除,请与管理员联系”);
//response.sendRedirect(“SingleUpLoadSuccess.jsp?fileNumber=-1″);
return;
}
}
while(iter.hasNext())
{
FileItem fileItem = (FileItem) iter.next();
if(!fileItem.isFormField())
{
String fileName = StrFormatter.parseStr(fileItem.getName());
int fileSize = (int)fileItem.getSize();
if(fileName.equals(“”))
{
continue;
}
else
{
fileName = fileName.replaceAll(“\\\\”, “/”);
fileName = fileName.substring(fileName.lastIndexOf(“/”) + 1);
}
// out.println(fileName.substring(0,(fileName.lastIndexOf(“.”))));
//下面的操作就是从刚刚上传的文件地址中取出文件名并去掉后缀以后存到数据库中的操作
String fname=fileName.substring(0,(fileName.lastIndexOf(“.”)));
//out.println(fname);
LinkSqlServer linker=new LinkSqlServer();
String sql=”insert into uploadexcel(fname) values(‘”+fname+”‘)”;
// out.println(sql);
String message=”成功!”;
if(linker.executeUpdate(sql))
{
//out.println(“”);
}
//out.println(“fileName = ” + fileName);
//out.println(“fileSize = ” + fileSize);
// 保存文件到磁盘
File file = new File(uploadDirFile, fileName);
fileItem.write(file);
System.out.println(“[Info: ] File has been saved: ” + file.getPath());
//list.add(fileName);
//list.add(String.valueOf(fileSize));
//fileNumber++;*/
}
}
response.sendRedirect(“excelin.jsp”);
–>
excelin.jsp当然是实现把上传的excel文件读取其中的数据并插入到相应的数据库中了代码如下:
<!–page pageEncoding=”utf-8–>//这里的编码格式最好用这个否则会出现乱码而且调试不成功。保存的时候也最好选择utf-8格式
<!–page contentType=”text/html;charset=utf-8–>
<!–page language=”java” import=”java.sql.*,beans.*,java.util.*,java.io.File,java.util.Date,jxl.*,jxl.read.*,jxl.write.*,jxl.biff.*,jxl.demo.*,jxl.format.*,jxl.read.*” errorPage=”"–>
<!–p>String sql=”";
String deptid=”";
String fname=”";
String majorid=”";
String issign=”";
String practice=”";
String ispass=”";
String isownbaoxian=”";
String acdemic=”";
String educationid=”";
String sex=”";
LinkSqlServer linker=new LinkSqlServer();
String pid=String.valueOf(linker.getPid(“uploadexcel”));//获取最后一次插入uploadexcel表中的记录的pid值,还要转换为String类型的
//out.println(pid);
String sql8=”";
sql8=”select fname from uploadexcel where pid=”+pid;
ResultSet rs8=linker.executeQuery(sql8);
while(rs8.next())
{
fname=rs8.getString(1).trim();//去掉取出字符串中的空格
}
String filename=”d:\\excelupload”+”\\”+fname+”.xls”;
//out.println(filename);
Workbook workbook=Workbook.getWorkbook(new File(filename));
Sheet sheet=workbook.getSheet(0);
int rows=sheet.getRows();
int columns=sheet.getColumns();
String [] content=new String [100];
for(int i=1;i<rows;i++)
{
for(int j=1;j<columns;j++)
{
Cell cell=sheet.getCell(j,i);
content[j]= cell.getContents();
}
//out.println(“内容:”+content[1]);
sql=”select pid from educationdegree where educationname=’”+content[8]+”‘”;
//out.println(content[8]);
ResultSet rs=linker.executeQuery(sql);
while(rs.next())
{
educationid=rs.getString(1);
//out.println(educationid);
}
LinkSqlServer linker1=new LinkSqlServer();
String sql1=”select pid from department where cname=’”+content[11]+”‘”;
//out.println(sql1);
ResultSet rs1=linker1.executeQuery(sql1);
while(rs1.next())
{
deptid=rs1.getString(1);
//out.println(deptid);
}
LinkSqlServer linker2=new LinkSqlServer();
String sql2=”select pid from major where mname=’”+content[15]+”‘”;
ResultSet rs2=linker2.executeQuery(sql2)–>
<!–r /> while(rs2.next())
{
majorid=rs2.getString(1);
//out.println(majorid);
}
if(content[1].equals(“报名”))
{
issign=”0″;
//out.println(issign);
} else if(content[1].equals(“开班行政”+”审通过”))
{
ispass=”1″;
} else if(content[1].equals(“备案通过”))
{
ispass=”1″;
//out.println(ispass);
}
else if(content[1].equals(“开班申报”))
{
issign=”1″;
//out.println(issign);
}
if(content[19].equals(“是”))
{
isownbaoxian=”1″;
//out.println(isownbaoxian);
}
else if(content[19].equals(“否”))
{
isownbaoxian=”0″;
//out.println(isownbaoxian);
}
if(content[6].equals(“男”))
{
sex=”0″;
//out.println(sex);
}
else if(content[6].equals(“女”))
{
sex=”1″;
//out.println(sex);
}
if(content[13].equals(“”))
{
practice=”0″;
//out.println(practice);
}
if(!content[13].equals(“”))
{
practice=content[13];
}
if(content[12].equals(“”))
{
acdemic=”0″;
}
if(!content[12].equals(“”))
{
acdemic=content[12];
}
String sql3=”insert into studentinfo(issign,unemploymentid,idcard,peopletype,sname,sex,birthday,EducationId,phonenum,homeaddress,deptid,academicdegree,practicedegree,majorid,isownbaoxian) values(“+issign+”,’”+content[2]+”‘,’”+content[3]+”‘,’”+content[4]+”‘,’”+content[5]+”‘,”+sex+”,’”+content[7]
+”‘,”+educationid+”,’”+content[9]+”‘,’”+content[10]+”‘,”+deptid+”,”+acdemic+”,”+practice+”,’”+majorid+”‘,”+isownbaoxian+”)”;
out.println(sql3);
–>
<!–r /> LinkSqlServer linker3=new LinkSqlServer();
–>
<!–r /> if(linker3.executeUpdate(sql3))
{
//response.sendRedirect(“readin.jsp”);
}
}
//out.println(“列”+columns); out.println(“行”+rows);
session.setAttribute(“SuccessFlag”,”success”);
response.sendRedirect(“readin2.jsp”);
–>
上传文件用得是一个apache的一个组件,这个.jar包要放到应用的lib文件夹下面,首先是一个表示层页面,用来选择要上传的文件地址。然后跳转到处理页面来实现文件的上传功能。具体代码如下:
最后的跳转页面当然是刚开始的表示层页面让用户浏览选择上传文件的页面即readin2.jsp,这样做的好处是可以通过获取session中的SuccessFlag的值来用弹出框的形式来告诉用户上传成功。
2008/07/15 | sunny | 1,621 Views
代码可不是这么贴的,看起来很乱
[回复]
对啊,我没想到他是全部显示,我觉得应该是显示一部分,点击文章题目才能看全篇。
[回复]