我做的是BS系统,怎么把本地的excel 文件导入到数据库所在的远程服务器上

解决方案 »

  1.   

    什么类型的数据库?oracle、mssql应该都可以通过客户端导入
      

  2.   

    我做的是BS系统,怎么把本地的excel 文件导入到oracle数据库所在的远程服务器上
      

  3.   

    用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);
    }
    }

    }
      

  4.   

    2种办法,
    第一种和上面的一样,我就不废话了。不过有个限制,是http作为上传协议的限制,
    如果文件太大,可能会超时或者outofmemory。第二种是一个思路,
    你可以开一个ftp目录,让上传的人,把文件用ftp上传到这个目录,
    你再搞一个界面,最简单的就是一个文本框一个按钮,
    让上传的人输入文件名,你就去那个默认的路径中,读取输入的这个文件名的文件。
    这样就可以处理稍大的文件了。good luck
      

  5.   

    ftp上传上去,开发起来代码量也少
      

  6.   

    看谁用啊 自己用的话 就写个swing程序 直接操作数据库就行了  
    客户用的话 就得uploadfile到服务器 然后在处理  可以上传后就处理 也可以统一在某个时间点处理