我做的是BS系统,怎么把本地的excel 文件导入到数据库所在的远程服务器上 我做的是BS系统,怎么把本地的excel 文件导入到数据库所在的远程服务器上 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 什么类型的数据库?oracle、mssql应该都可以通过客户端导入 我做的是BS系统,怎么把本地的excel 文件导入到oracle数据库所在的远程服务器上 用upload组件可以实现上传,如果是直接写入数据库的话,你可以用poi.jar或jxl.jar都可以读取excel,我简单的做了一个直接上传到数据库的例子,代码如下:package com.upload;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.Iterator;import java.util.List;import javax.servlet.ServletConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import com.util.ConnectionFactory;import com.util.JdbcUtil;public class FileUpload extends HttpServlet { private ServletContext context; private String savePath; private static final long serialVersionUID = 2451433803191345898L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DiskFileItemFactory factory=new DiskFileItemFactory(); ServletFileUpload upload=new ServletFileUpload(factory); try { List items=upload.parseRequest(request); Iterator iterator=items.iterator(); while(iterator.hasNext()){ FileItem item=(FileItem) iterator.next(); if(item.isFormField()){ System.out.println("表单的参数名称"+item.getFieldName()+"参数值"+item.getString("UTF-8")); }else{ if(item.getName()!=null&&!item.getName().equals("")){ System.out.println("大小"+item.getSize()); System.out.println("名称"+item.getName()); System.out.println("类型"+item.getContentType()); File tempFile=new File(item.getName()); File newFile=new File(context.getRealPath("/")+savePath,tempFile.getName()); try { item.write(newFile); execute(newFile); } catch (Exception e) { request.setAttribute("upload.message", "上传文件失败!"); e.printStackTrace(); } request.setAttribute("upload.message","文件上传成功"); }else{ request.setAttribute("upload.message", "没有选择上传文件"); } } } } catch (FileUploadException e) { e.printStackTrace(); request.setAttribute("upload.message", "上传文件失败!"); } request.getRequestDispatcher("/uploadResult.jsp").forward(request, response); } @Override public void init(ServletConfig config){ savePath=config.getInitParameter("savePath"); context=config.getServletContext(); } public void execute(File file){ Connection con=ConnectionFactory.getConnection(); PreparedStatement pstmt = null; try { System.out.println("start load file-------------------------"); InputStream is=new FileInputStream(file); //构造工作簿 Workbook wb=Workbook.getWorkbook(is); //获取第一张Sheet表 Sheet st=wb.getSheet(0); //获取Sheet表中所包含的总列数 int colnum=st.getColumns(); //获取Sheet表中的所有行数 int rownum=st.getRows(); System.out.println("colNum rowNum------------------" + rownum + ","+ colnum); //设置为手动提交 con.setAutoCommit(false); String sql = "insert into grade(stu_id,stu_name,course_name,result,extra,class_name) values(?,?,?,?,?,?)"; String strValue = ""; pstmt = con.prepareStatement(sql); for(int i=1;i<rownum;i++){ strValue = ""; for(int j=0;j<colnum;j++){ //获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,这与通常的行、列组合有些不同 Cell cell=st.getCell(j, i); //获取单元格的值 strValue=cell.getContents(); pstmt.setString(j+1, strValue); System.out.print("==" + strValue + "=="); } System.out.println(); pstmt.addBatch(); } pstmt.executeBatch(); con.commit(); System.out.println(" insert end-------------------------"); } catch (Exception e) { e.printStackTrace(); try { con.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }finally{ JdbcUtil.close(con, pstmt); } } } 2种办法,第一种和上面的一样,我就不废话了。不过有个限制,是http作为上传协议的限制,如果文件太大,可能会超时或者outofmemory。第二种是一个思路,你可以开一个ftp目录,让上传的人,把文件用ftp上传到这个目录,你再搞一个界面,最简单的就是一个文本框一个按钮,让上传的人输入文件名,你就去那个默认的路径中,读取输入的这个文件名的文件。这样就可以处理稍大的文件了。good luck ftp上传上去,开发起来代码量也少 看谁用啊 自己用的话 就写个swing程序 直接操作数据库就行了 客户用的话 就得uploadfile到服务器 然后在处理 可以上传后就处理 也可以统一在某个时间点处理 请教sum结果为空的处理 售票系统 求教:SQLSERVER 2000自定义函数 #网站项目#有能力做发报价过来 jsp方法中输出内容 这个题要怎么做? 如果使用Servlet的Filter过滤数据库中非法字符? 急,关于bean相对目录的问题 在HTML OR JSP 页面如何在一进入时将将光标置到默认的输入框上 servlet中如何能够提取jsp的session值? 可以将Frameset塞入div么? 网页聊天怎么设计
package com.upload;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;import com.util.ConnectionFactory;
import com.util.JdbcUtil;public class FileUpload extends HttpServlet {
private ServletContext context;
private String savePath; private static final long serialVersionUID = 2451433803191345898L; @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);
try {
List items=upload.parseRequest(request);
Iterator iterator=items.iterator();
while(iterator.hasNext()){
FileItem item=(FileItem) iterator.next();
if(item.isFormField()){
System.out.println("表单的参数名称"+item.getFieldName()+"参数值"+item.getString("UTF-8"));
}else{
if(item.getName()!=null&&!item.getName().equals("")){
System.out.println("大小"+item.getSize());
System.out.println("名称"+item.getName());
System.out.println("类型"+item.getContentType());
File tempFile=new File(item.getName());
File newFile=new File(context.getRealPath("/")+savePath,tempFile.getName());
try {
item.write(newFile);
execute(newFile);
} catch (Exception e) {
request.setAttribute("upload.message", "上传文件失败!");
e.printStackTrace();
}
request.setAttribute("upload.message","文件上传成功");
}else{
request.setAttribute("upload.message", "没有选择上传文件");
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
request.setAttribute("upload.message", "上传文件失败!");
}
request.getRequestDispatcher("/uploadResult.jsp").forward(request, response);
}
@Override
public void init(ServletConfig config){
savePath=config.getInitParameter("savePath");
context=config.getServletContext();
}
public void execute(File file){
Connection con=ConnectionFactory.getConnection();
PreparedStatement pstmt = null;
try {
System.out.println("start load file-------------------------");
InputStream is=new FileInputStream(file);
//构造工作簿
Workbook wb=Workbook.getWorkbook(is);
//获取第一张Sheet表
Sheet st=wb.getSheet(0);
//获取Sheet表中所包含的总列数
int colnum=st.getColumns();
//获取Sheet表中的所有行数
int rownum=st.getRows();
System.out.println("colNum rowNum------------------" + rownum + ","+ colnum);
//设置为手动提交
con.setAutoCommit(false);
String sql = "insert into grade(stu_id,stu_name,course_name,result,extra,class_name) values(?,?,?,?,?,?)";
String strValue = "";
pstmt = con.prepareStatement(sql);
for(int i=1;i<rownum;i++){
strValue = "";
for(int j=0;j<colnum;j++){
//获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,这与通常的行、列组合有些不同
Cell cell=st.getCell(j, i);
//获取单元格的值
strValue=cell.getContents();
pstmt.setString(j+1, strValue);
System.out.print("==" + strValue + "==");
}
System.out.println();
pstmt.addBatch();
}
pstmt.executeBatch();
con.commit();
System.out.println(" insert end-------------------------");
} catch (Exception e) {
e.printStackTrace();
try {
con.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}finally{
JdbcUtil.close(con, pstmt);
}
}
}
第一种和上面的一样,我就不废话了。不过有个限制,是http作为上传协议的限制,
如果文件太大,可能会超时或者outofmemory。第二种是一个思路,
你可以开一个ftp目录,让上传的人,把文件用ftp上传到这个目录,
你再搞一个界面,最简单的就是一个文本框一个按钮,
让上传的人输入文件名,你就去那个默认的路径中,读取输入的这个文件名的文件。
这样就可以处理稍大的文件了。good luck
客户用的话 就得uploadfile到服务器 然后在处理 可以上传后就处理 也可以统一在某个时间点处理