精华内容
下载资源
问答
  • JAVA学习之 将xml导入数据库

    千次阅读 热门讨论 2014-09-27 15:20:06
    我们知道向数据库中插入数将xml导入数据库xml导入数据库据的方式有很种,以前接触最多的都是通过sql语句简单的插入一条数据,今天要学习是将xml中的数据一次添加到数据库中:   首先要写一个xml文件: ...

          我们知道向数据库中插入数xml导入到数据库xml导入到数据库据的方式有很多种,以前接触最多的都是通过sql语句简单的插入一条数据,今天要学习是将xml中的数据一次添加到数据库中:

         首先要写一个xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <ACCESOS>
        <item>
           <SOCIO>
               <NUMERO>00045050</NUMERO>
               <REPOSICION>0</REPOSICION>
               <NOMBRE>MOISES MORENO</NOMBRE>
               <TURNOS>
                    <LU>T1</LU>
                    <MA>T2</MA>
                    <MI>T3</MI>
                    <JU>T4</JU>
                    <VI>T5</VI>
                    <SA>T6</SA>
                    <DO>T7</DO>
               </TURNOS>
            </SOCIO>
        </item>
        <item>
             <SOCIO>
                   <NUMERO>00045051</NUMERO>
                   <REPOSICION>0</REPOSICION>
                   <NOMBRE>RUTH PENA</NOMBRE>
                   <TURNOS>
                        <LU>S1</LU>
                        <MA>S2</MA>
                        <MI>S3</MI>
                        <JU>S4</JU>
                        <VI>S5</VI>
                        <SA>S6</SA>
                        <DO>S7</DO>
                   </TURNOS>
              </SOCIO>     
        </item>
    </ACCESOS>
    

              然后再写读取xml文件的方法:dom4jjar包引入到WEB-INFO下的lib下,并添加引用:

    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    public static void main(String[] args){
    		//插入数据的sql语句
    		String sql="insert into T_XML(NUMERO, REPOSICION, NOMBRE, TURNOS) values (?, ?, ?, ?)";
    		Connection conn=null;
    		PreparedStatement pstmt=null;
    		
    		try{
    			conn=DbUtil.getConnection();
    			pstmt=conn.prepareStatement(sql);
    			//读取xml文件
    			Document doc=new SAXReader().read(new File("F:/J2EEmyself/DRP/test_xmlImport/xml/test01.XML"));
    			//选择xml文件的节点
    			List itemList=doc.selectNodes("ACCESOS/item/SOCIO");
    			//遍历读出的xml中的节点
    		    for(Iterator iter=itemList.iterator();iter.hasNext();){
    		    	Element el=(Element)iter.next();
    		    	//读取节点内容
    		    	String numero=el.elementText("NUMERO");
    		    	String reposicion = el.elementText("REPOSICION");
    				String nombre = el.elementText("NOMBRE");
    				//遍历TURNOS节点中的内容
    				List turnosList = el.elements("TURNOS");
    				StringBuffer sbString=new StringBuffer();
    				for(Iterator iter1=turnosList.iterator();iter1.hasNext();){					
    					Element turnosElt=(Element)iter1.next();
    					String lu = turnosElt.elementText("LU");
    					String ma = turnosElt.elementText("MA");
    					String mi = turnosElt.elementText("MI");
    					String ju = turnosElt.elementText("JU");
    					String vi = turnosElt.elementText("VI");
    					String sa = turnosElt.elementText("SA");
    					String doo = turnosElt.elementText("DO");
    					sbString.append(lu + "," + ma + "," + mi + "," + ju + "," + vi + "," + sa + "," + doo);
    				}
    				//为sql语句赋值
    				pstmt.setString(1, numero);
    				pstmt.setString(2, reposicion);
    				pstmt.setString(3, nombre);
    				pstmt.setString(4, sbString.toString());
    				pstmt.addBatch();
    		    }
    		    pstmt.executeBatch();
    		    System.out.print("将XML导入数据库成功");
    		}catch(Exception e){
    			e.printStackTrace();
    		}finally{
    			DbUtil.close(pstmt);
    			DbUtil.close(conn);
    		}
    	}
    

    这样很简单就可以把xml文件中的数据读取到数据库中:数据库中的结果如图所示:

     

    其实把xml中的数据读取到数据库中很简单,只要循环遍历每一个节点中的数据就可以。


    展开全文
  • 本文章是从浏览器端,选择Excel文件,上传到服务器,保存为一excel 文件,然后将服务器上的Excel文件导入数据库

    现在正在做一个将Excel导入进数据库的一个程序,现在已经实现了一种方法,借鉴了很多。下面详细说一下,功能如何实现的。


    优化版本:第一次优化


    目前这个文章的实现方法:

    浏览器端选择Excel文件,点击上传,服务器目录会多出一个Excel的文件,然后再在服务器端读取这个文件,保存到数据库。


    由于篇幅有限,csdn的上传在60M内,jar包加起来就超过了、所以在这里留一个百度云的链接,可以直接下载,导入即可运行。

    源码最新地址

    由于篇幅问题,这里只保存了关键的源代码,详细的源代码可以去百度云下载,若链接过时,可以给我评论,或者给我发邮箱,qq均可(点击我的头像获取)。


    一、介绍一下我们的这个程序的流程

    软件环境,win7 + Myeclipse +MySQL+tomcat

    测试浏览器:火狐

    其他:jQuery+bootstrap+poi

    二、首先看一下包的导入,这里引用下他人的文章内容(jar包下载)

    项目结构



    三、我们对上面的五个文件开始写吧。

    DbUtil.java

    package com.app.util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.app.common.Common;
    import com.app.po.Student_1;
    
    
    public class DbUtil {
    
        /**
         * @param sql
         */
        public static void insert(String sql, Student_1 student) throws SQLException {
            Connection conn = null;
            PreparedStatement ps = null;
            try {
                Class.forName(Common.DRIVER);
                conn = DriverManager.getConnection(Common.URL, Common.USERNAME, Common.PASSWORD);
                ps = conn.prepareStatement(sql);
                ps.setString(1, student.getNo());
                ps.setString(2, student.getName());
                ps.setString(3, student.getAge());
                ps.setString(4, String.valueOf(student.getScore()));
                boolean flag = ps.execute();
                if(!flag){
                    System.out.println("Save data : No. = " + student.getNo() + " , Name = " + student.getName() + ", Age = " + student.getAge() + " succeed!");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (ps != null) {
                    ps.close();
                }
                if (conn != null) {
                    conn.close();
                }
            }
        }
    
        @SuppressWarnings({ "unchecked", "rawtypes" })
        public static List selectOne(String sql, Student_1 student) throws SQLException {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            List list = new ArrayList();
            try {
                Class.forName(Common.DRIVER);
                conn = DriverManager.getConnection(Common.URL, Common.USERNAME, Common.PASSWORD);
                ps = conn.prepareStatement(sql);
                rs = ps.executeQuery();
                while(rs.next()){
                    if(rs.getString("no").equals(student.getNo()) || rs.getString("name").equals(student.getName())|| rs.getString("age").equals(student.getAge())){
                        list.add(1);
                    }else{
                        list.add(0);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (rs != null) {
                    rs.close();
                }
                if (ps != null) {
                    ps.close();
                }
                if (conn != null) {
                    conn.close();
                }
            }
            return list;
        }
        
        
        public static ResultSet selectAll(String sql) throws SQLException {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            try {
                Class.forName(Common.DRIVER);
                conn = DriverManager.getConnection(Common.URL, Common.USERNAME, Common.PASSWORD);
                ps = conn.prepareStatement(sql);
                rs = ps.executeQuery();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                 if (rs != null) {
                     rs.close();
                 }
                 if (ps != null) {
                     ps.close();
                 }
                 if (conn != null) {
                     conn.close();
                 }
             }
             return rs;
         }
     
     }

    student.java
    package com.app.po;
    
    
    public class Student_1 {
         /**
          * id   
          */
         private Integer id;
         /**
          * 学号
          */
         private String no;
         /**
          * 姓名
          */
         private String name;
         /**
          * 学院
          */
         private String age;
         /**
          * 成绩
          */
         private String score;
     
         public Integer getId() {
             return id;
         }
     
         public void setId(Integer id) {
             this.id = id;
         }
     
         public String getNo() {
             return no;
         }
     
         public void setNo(String no) {
             this.no = no;
         }
     
         public String getName() {
             return name;
         }
     
         public void setName(String name) {
             this.name = name;
         }
     
         public String getAge() {
             return age;
         }
     
         public void setAge(String age) {
             this.age = age;
         }
     
         public String getScore() {
             return score;
         }
     
         public void setScore(String score) {
             this.score = score;
         }
     
     }
    common.java

    package com.app.common;
    
    public class Common {
    	// connect the database
    	    public static final String DRIVER = "com.mysql.jdbc.Driver";
    	    public static final String DB_NAME = "test";
    	    public static final String USERNAME = "root";
    	    public static final String PASSWORD = "123456";
    	    public static final String IP = "localhost";
    	    public static final String PORT = "3306";
    	    public static final String URL = "jdbc:mysql://" + IP + ":" + PORT + "/" + DB_NAME;
    	    
    	    // common
    	    public static final String EXCEL_PATH = "lib/student_info.xls";
    	    
    	    // sql
    	    public static final String INSERT_STUDENT_SQL = "insert into t_student(no, name, age, score) values(?, ?, ?, ?)";
    	    public static final String UPDATE_STUDENT_SQL = "update t_student set no = ?, name = ?, age= ?, score = ? where id = ? ";
    	    public static final String SELECT_STUDENT_ALL_SQL = "select id,no,name,age,score from t_student";
    	    public static final String SELECT_STUDENT_SQL = "select * from t_student where name like ";
    }
    

    readExcel.java

    package com.app.excel;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
     import java.util.List;
     
     import org.apache.poi.hssf.usermodel.HSSFCell;
     import org.apache.poi.hssf.usermodel.HSSFRow;
     import org.apache.poi.hssf.usermodel.HSSFSheet;
     import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     
     import com.app.common.Common;
     import com.app.po.Student_1;
    
     public class ReadExcel {
     
         public List<Student_1> readXls(String path) throws IOException {
             InputStream is = new FileInputStream(path);
             HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
             Student_1 student = null;
             List<Student_1> list = new ArrayList<Student_1>();
             // 循环工作表Sheet
             for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
                 HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
                 if (hssfSheet == null) {
                     continue;
                 }
                 // 循环行Row
                 for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                     HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                     if (hssfRow != null) {
                         student = new Student_1();
                         HSSFCell no = hssfRow.getCell(0);
                         HSSFCell name = hssfRow.getCell(1);
                         HSSFCell age = hssfRow.getCell(2);
                         HSSFCell score = hssfRow.getCell(3);
                         student.setNo(getValue(no));
                         student.setName(getValue(name));
                         student.setAge(getValue(age));
                         student.setScore(getValue(score));
                         list.add(student);
                     }
                 }
             }
             return list;
         }
         
          @SuppressWarnings("static-access")
         private String getValue(HSSFCell hssfCell) {
                 if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
                     // 返回布尔类型的值
                     return String.valueOf(hssfCell.getBooleanCellValue());
                 } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
                     // 返回数值类型的值
                     return String.valueOf(hssfCell.getNumericCellValue());
                 } else {
                     // 返回字符串类型的值
                     return String.valueOf(hssfCell.getStringCellValue());
                 }
             }
     }
    
    saveDB.java
    package com.app.excel;
    
    import java.io.IOException;
    import java.sql.SQLException;
    import java.util.List;
    
     import com.app.common.Common;
     import com.app.util.DbUtil;
     import com.app.po.Student_1;
     
    
     public class SaveData2DB {
     
         @SuppressWarnings({ "rawtypes" })
         public void save(String path) throws IOException, SQLException {
             ReadExcel xlsMain = new ReadExcel();
             Student_1 student = null;
             List<Student_1> list = xlsMain.readXls(path);
             
             for (int i = 0; i < list.size(); i++) {
                 student = list.get(i);
                 List l = DbUtil.selectOne(Common.SELECT_STUDENT_SQL + "'%" + student.getName() + "%'", student);
                 if (!l.contains(1)) {
                     DbUtil.insert(Common.INSERT_STUDENT_SQL, student);
                 } else {
                     System.out.println("The Record was Exist : No. = " + student.getNo() + " , Name = " + student.getName() + ", Age = " + student.getAge() + ", and has been throw away!");
                 }
             }
         }
     }
    

    Upload.java
    package com.app.action;
    
    
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.List;
    import java.util.UUID;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadBase;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.adtec.framework.common.util.JsonUtil;
    import com.app.excel.SaveData2DB;
    
    import net.sf.json.JSONObject;
    
     
    public class UpLoad extends HttpServlet {
    
        /**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    
    	private final Logger logger = LoggerFactory.getLogger(this.getClass());
    	
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    			System.out.println("coming.......");
    		
                    //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
                    String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
                    //上传时生成的临时文件保存目录
                    String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");
                    File tmpFile = new File(tempPath);
                    if (!tmpFile.exists()) {
                        //创建临时目录
                        tmpFile.mkdir();
                    }
                    
                    //消息提示
                    String message = "";
                    try{
                        //使用Apache文件上传组件处理文件上传步骤:
                        //1、创建一个DiskFileItemFactory工厂
                        DiskFileItemFactory factory = new DiskFileItemFactory();
                        //设置工厂的缓冲区的大小,当上传的文件大小超过缓冲区的大小时,就会生成一个临时文件存放到指定的临时目录当中。
                        factory.setSizeThreshold(1024*100);//设置缓冲区的大小为100KB,如果不指定,那么缓冲区的大小默认是10KB
                        //设置上传时生成的临时文件的保存目录
                        factory.setRepository(tmpFile);
                        //2、创建一个文件上传解析器
                        ServletFileUpload upload = new ServletFileUpload(factory);
                        //监听文件上传进度
                        /*upload.setProgressListener(new ProgressListener(){
                            public void update(long pBytesRead, long pContentLength, int arg2) {
                                System.out.println("文件大小为:" + pContentLength + ",当前已处理:" + pBytesRead);
                                
                            }
                        });*/
                         //解决上传文件名的中文乱码
                        upload.setHeaderEncoding("UTF-8"); 
                        //3、判断提交上来的数据是否是上传表单的数据
                        if(!ServletFileUpload.isMultipartContent(request)){
                            //按照传统方式获取数据
                            return;
                        }
                        
                        //设置上传单个文件的大小的最大值,目前是设置为1024*1024字节,也就是1MB
                        upload.setFileSizeMax(1024*1024);
                        //设置上传文件总量的最大值,最大值=同时上传的多个文件的大小的最大值的和,目前设置为10MB
                        upload.setSizeMax(1024*1024*10);
                        
                        //
                       
                        
                        //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
                        List<FileItem> list = upload.parseRequest(request);
                        for(FileItem item : list){
                            //如果fileitem中封装的是普通输入项的数据
                            if(item.isFormField()){
                                String name = item.getFieldName();
                                //解决普通输入项的数据的中文乱码问题
                                String value = item.getString("UTF-8");
    //                            String value = item.getString("gbk");
                                //value = new String(value.getBytes("iso8859-1"),"UTF-8");
                                System.out.println(name + "=" + value);
                            }else{//如果fileitem中封装的是上传文件
                                //得到上传的文件名称,
                                String filename = item.getName();
                                System.out.println(filename+"..");
                                if(filename==null || filename.trim().equals("")){
                                    continue;
                                }
                                //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:  c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
                                //处理获取到的上传文件的文件名的路径部分,只保留文件名部分
                                filename = filename.substring(filename.lastIndexOf("\\")+1);
                                //得到上传文件的扩展名
                                String fileExtName = filename.substring(filename.lastIndexOf(".")+1);
                                //如果需要限制上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法
                                System.out.println("上传的文件的扩展名是:"+fileExtName);
                                //获取item中的上传文件的输入流
                                InputStream in = item.getInputStream();
                                //得到文件保存的名称
                                String saveFilename = makeFileName(filename);
                                //得到文件的保存目录
                                String realSavePath = makePath(saveFilename, savePath);
                                //创建一个文件输出流
                                FileOutputStream out = new FileOutputStream(realSavePath + "\\" + saveFilename);
                                //创建一个缓冲区
                                byte buffer[] = new byte[1024];
                                //判断输入流中的数据是否已经读完的标识
                                int len = 0;
                                StringBuffer sb = new StringBuffer();
                                //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
                                while((len=in.read(buffer))>0){
                                    //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
    //                            	System.out.println(realSavePath);
    //                            	System.out.println();
                                    sb.append(new String(buffer,0,len));
    //                                logger.info(sb.toString());
    //                                System.out.println(sb.toString());
    //                                sb.setLength(0);
                                	out.write(buffer, 0, len);
                                }
    //                            System.out.println(sb.toString()+"-----");
                                String ss = sb.toString();
                                
    //                            System.out.println(sb.);
                                //关闭输入流
                                in.close();
                                //关闭输出流
                                out.close();
                                //删除处理文件上传时生成的临时文件
                                //item.delete();
                                SaveData2DB saveData2DB = new SaveData2DB();
                                saveData2DB.save(realSavePath + "\\" + saveFilename);
                                System.out.println("end");
                                
                                message = "success";
                            }
                        }
                    }catch (FileUploadBase.FileSizeLimitExceededException e) {
                        e.printStackTrace();
                        message = "单个文件超出最大值!!!";
                        /*request.setAttribute("message", "单个文件超出最大值!!!");*/
                       /* request.getRequestDispatcher("/message.jsp").forward(request, response);*/
                        return;
                    }catch (FileUploadBase.SizeLimitExceededException e) {
                        e.printStackTrace();
                        message = "上传文件的总的大小超出限制的最大值!!!";
                        /*request.setAttribute("message", "上传文件的总的大小超出限制的最大值!!!");*/
                        /*request.getRequestDispatcher("/message.jsp").forward(request, response);*/
                        return;
                    }catch (Exception e) {
                        message= "文件上传失败!";
                        e.printStackTrace();
                    }
                    /*request.setAttribute("message",message);*/
                    returnResultJson(response,message);
                    /*request.getRequestDispatcher("/message.jsp").forward(request, response);*/
        }
        
         
        private String makeFileName(String filename){  //2.jpg
            //为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名
            return UUID.randomUUID().toString() + "_" + filename;
        }
        
         
        private String makePath(String filename,String savePath){
            //得到文件名的hashCode的值,得到的就是filename这个字符串对象在内存中的地址
            int hashcode = filename.hashCode();
            int dir1 = hashcode&0xf;  //0--15
            int dir2 = (hashcode&0xf0)>>4;  //0-15
            //构造新的保存目录
            String dir = savePath + "\\" + dir1 + "\\" + dir2;  //upload\2\3  upload\3\5
            //File既可以代表文件也可以代表目录
            File file = new File(dir);
            //如果目录不存在
            if(!file.exists()){
                //创建目录
                file.mkdirs();
            }
            return dir;
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
        
        private void returnResultJson(HttpServletResponse response,Object obj) {
    		PrintWriter pw = null;
    		try {
    			pw = response.getWriter();
    			JSONObject resultmessage = JsonUtil.generate(obj);
    			response.setCharacterEncoding("UTF-8");
    			response.setContentType("application/json");
    			response.setHeader("Cache-Control", "no-cache");
    			pw.write(resultmessage.toString());
    		} catch (Exception e) {
    			pw.write("系统异常,请联系管理员");
    		} finally {
    			pw.flush();
    			pw.close();
    		}
    	}
    }
    Web.xml
    	<servlet>
    	    <servlet-name>Upload</servlet-name>
    	    <servlet-class>com.app.action.UpLoad</servlet-class>
    	</servlet>
    	
    	<servlet-mapping>
    	    <servlet-name>Upload</servlet-name>
    	    <url-pattern>/fileUpload/UploadServlet</url-pattern>
    	</servlet-mapping>
    以上就是配置后台文件

    现在配置jsp页面吧(jquery),这样的页面插件很多,可以网上搜索你喜欢的。

    	<div class="htmleaf-container">
    		<div class="container kv-main">
                <!-- <div class="page-header">
                <h2>单张上传 <small></h2>
                </div> -->
                <!-- <form enctype="multipart/form-data" id="uploadForm"  method = "post"> -->
                    <input id="fileUpload" class="file" type="file" name="fileUpload"  multiple  data-show-preview="true">
                <!-- </form> -->
            </div>
    	</div>
    	
        <script>
    	    $("#fileUpload").fileinput({
    	        language : "zh",//设置语言
    	        uploadUrl: "${pageContext.request.contextPath}/fileUpload/UploadServlet",//上传地址
    	        uploadAsync: true,//同步还是异步
    	        showCaption:false,//是否显示标题
    	        showUpload: true,//是否显示上传按钮
    	        browseClass: "btn btn-primary", //按钮样式 
    	        allowedFileExtensions : ['jpg', 'png','gif','xls'],//接收的文件后缀
    	        allowedFileTypes: ['image', 'video', 'flash','excel'],//接收的文件类型['image', 'html', 'text', 'video', 'audio', 'flash','object']
    	        maxFileCount: 6,//最大上传文件数限制
    	        overwriteInitial: false,
    	        maxFileSize: 1000, 
    	        msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
    	        previewFileIcon: '<i class="glyphicon glyphicon-file"></i>', 
    	        enctype: 'multipart/form-data',
    	        /* allowedPreviewTypes: null, */
    	        previewFileIconSettings: {
                    'docx': '<i class="glyphicon glyphicon-file"></i>',
                    'xlsx': '<i class="glyphicon glyphicon-file"></i>',
                    'pptx': '<i class="glyphicon glyphicon-file"></i>',
                    'jpg': '<i class="glyphicon glyphicon-picture"></i>',
                    'pdf': '<i class="glyphicon glyphicon-file"></i>',
                    'zip': '<i class="glyphicon glyphicon-file"></i>'
                }
    });
    四、源文件已经也好了,开始运行吧。

    浏览器选择文件,点击会显示上传进度。



    后台会对这里的数据保存到数据库。

    数据库设计

    数据库中数据如下


    第二行就是存进来的数据了。
    现在应该整个流程都走完了。

    还有更详细的教程,请持续关注我的博客。

    转载其他文章的出处:

    http://www.cnblogs.com/hongten/p/java_poi_excel.html

    展开全文
  • java学习——XML文件导入

    千次阅读 2015-10-06 14:30:33
    刚学习java不久,在做DRP分销商管理这项目中,发现很新东西,需要我们不断总结。今天我们就来介绍一下导入XML文件。 在实际应用中,导入是一项很重要的功能,一般来说我们常用的是导入Excel,Word等,但是今天...

           刚学习java不久,在做DRP分销商管理这个项目中,发现很多新东西,需要我们不断总结。今天我们就来介绍一下导入XML文件。

           在实际应用中,导入是一项很重要的功能,一般来说我们常用的是导入Excel,Word等,但是今天我们要导入的是XML文件,因为XML是一种纯文本文件,具有很好的兼容性和可扩展性,在数据传输和共享的时候更具有通用性。


    1、需要导入的XML文件

           文件中每一个标签如< NUMERO >、< REPOSICION >等,对应数据库中的一个字段。当我们引入相应的jar包,如dom4j等,之后就可以编写导入的方法。

    <?xml version="1.0" encoding="utf-8"?>
    <ACCESOS>
        <item>
            <SOCIO>
                <NUMERO>00045050</NUMERO>
                <REPOSICION>0</REPOSICION>
                <NOMBRE>MOISES MORENO</NOMBRE>
                <TURNOS>
                    <LU>T1</LU>
                    <MA>T2</MA>
                    <MI>T3</MI>
                    <JU>T4</JU>
                    <VI>T5</VI>
                    <SA>T6</SA>
                    <DO>T7</DO>
                </TURNOS>
            </SOCIO>
        </item>
        <item>
            <SOCIO>
                <NUMERO>00045051</NUMERO>
                <REPOSICION>0</REPOSICION>
                <NOMBRE>RUTH PENA</NOMBRE>
                <TURNOS>
                    <LU>S1</LU>
                    <MA>S2</MA>
                    <MI>S3</MI>
                    <JU>S4</JU>
                    <VI>S5</VI>
                    <SA>S6</SA>
                    <DO>S7</DO>
                </TURNOS>
            </SOCIO>
        </item>
    </ACCESOS>

    2、连接数据库的类方法

           此类用于连接数据库,类似于之前在.net那边使用的SQLHelper。

    /**
     * 封装数据常用操作
     * @author Administrator
     *
     */
    public class DbUtil {
    
        /**
         * 取得Connection
         * @return
         */
        public static Connection getConnection(){
            Connection conn=null;
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动
                String url="jdbc:oracle:thin:@192.168.26.206:1521:ORCL"; 
                //连接数据库的用户名和密码
                String username="shiqidrp";
                String password="shiqidrp";
    
                conn=DriverManager.getConnection(url,username,password);
    
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return conn;
        }
    
        /**
         * 关闭ResultSet对象,释放资源
         * @param rs
         */
        public static void close(ResultSet rs)
        {
            if(rs!=null)
            {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 关闭Connection对象,释放资源
         * @param conn
         */
        public static void close(Connection conn)
        {
            if(conn!=null) 
            {
                try {
                    conn.close();
                }catch(SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 关闭PreparedStatement对象,释放资源
         * @param pstmt
         */
        public static void close(PreparedStatement pstmt)
        {
            if(pstmt!=null) 
            {
                try {
                    pstmt.close();
                }catch(SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 关闭Statement对象,释放资源
         * @param pstmt
         */
        public static void close(Statement pstmt)
        {
            if(pstmt!=null) 
            {
                try {
                    pstmt.close();
                }catch(SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 开启事务
         * @param conn
         */
        public static void beginTransaction(Connection conn)
        {
            try {
                if(conn!=null){
                    if(conn.getAutoCommit())
                    {
                        conn.setAutoCommit(false);
                    }
                }
            } catch (SQLException e) {
            }
        }
        /**
         * 关闭事务
         * @param conn
         */
        public static void commitTransaction(Connection conn)
        {
            try {
                if(conn!=null){
                    if(!conn.getAutoCommit())
                    {
                        conn.commit();
                    }
                }
            } catch (SQLException e) {
            }
        }
        /**
         * 回滚事务
         * @param conn
         */
        public static void rollbackTransaction(Connection conn)
        {
            try {
                if(conn!=null){
                    if(!conn.getAutoCommit())
                    {
                        conn.rollback();
                    }
                }
            } catch (SQLException e) {
            }
        }
        /**
         * 重置事务
         * @param conn
         */
        public static void resetTransaction(Connection conn)
        {
            try {
                if(conn!=null){
                    if(conn.getAutoCommit())
                    {
                        conn.setAutoCommit(false);
                    }else{
                        conn.setAutoCommit(true);
                    }
                }
            } catch (SQLException e) {
            }
        }
    }

    3、执行导入的类

           利用此类,读取XML文件中的数据并保存到数据库中。

    public class TestXMLImport {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            String sql = "insert into T_XML(NUMERO, REPOSICION, NOMBRE, TURNOS) values (?, ?, ?, ?)";
            Connection conn = null;
            PreparedStatement pstmt = null;
            try {
                conn=DbUtil.getConnection();
                pstmt=conn.prepareStatement(sql);
                //可以解析XML文件的对象
                Document document=new SAXReader().read(new File("G:/提高班/7DRP/drp/test_xmlImport/xml/test01.XML"));
                //获得我们所需要的节点集
                List itemList=document.selectNodes("/ACCESOS/item/SOCIO");
                //循环得到节点集中元素,并转化成SQL语句
                for(Iterator iterator=itemList.iterator();iterator.hasNext();)
                {
                    //得到相应的节点的值
                    Element element=(Element)iterator.next();
                    String numero = element.elementText("NUMERO");
                    String reposicion = element.elementText("REPOSICION");
                    String nombre = element.elementText("NOMBRE");
                    List turnosList=element.elements("TURNOS");
                    StringBuffer sbBuffer=new StringBuffer();
                    //循环得到TURNOS节点下的元素,并拼成串
                    for(Iterator iterator1=turnosList.iterator();iterator1.hasNext();)
                    {
                        Element turnosElt = (Element)iterator1.next();
                        String lu = turnosElt.elementText("LU");
                        String ma = turnosElt.elementText("MA");
                        String mi = turnosElt.elementText("MI");
                        String ju = turnosElt.elementText("JU");
                        String vi = turnosElt.elementText("VI");
                        String sa = turnosElt.elementText("SA");
                        String doo = turnosElt.elementText("DO");
                        sbBuffer.append(lu + "," + ma + "," + mi + "," + ju + "," + vi + "," + sa + "," + doo);
                    }
                    //给SQL语句赋值
                    pstmt.setString(1, numero);
                    pstmt.setString(2, reposicion);
                    pstmt.setString(3, nombre);
                    pstmt.setString(4, sbBuffer.toString());
                    //保存生成的SQL语句
                    pstmt.addBatch();
                }
                //批量执行SQL语句
                pstmt.executeBatch();
                System.out.println("將xml導入成功");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    4总结

           我们在学习过程中,不要仅仅为了实现功能,最主要的还是了解实现的这个过程,这种思路,当我们下次再导入其他格式的文件时就可以自己动手实现了。总之,学习在于总结出的学习方法,如何让学习变得简单,就看我们怎么做总结了。

    展开全文
  • Solr的data-config.xml导入数据库记录

    千次阅读 2018-12-20 22:09:14
    当我们要从数据库导入数据到solr的索引库中,就需要自己配置data-config.xml文件来引入记录 dataconfig.xml的创建 首先在solrhome的core的conf文件夹加新建data-config.xml,并添加如下类似内容: &amp;lt;?...
    当我们要从数据库中导入数据到solr的索引库中,就需要自己配置data-config.xml文件来引入记录

    dataconfig.xml的创建

    1. 首先在solrhome的core的conf文件夹加新建data-config.xml,并添加如下类似内容:
    <?xml version="1.0" encoding="UTF-8" ?>
    <dataConfig>
        <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/dp" user="root" password="123456" />
        <document>
            <entity name="haLock" query="select * from ha_lock" deltaQuery="select * from ha_lock">
                <field column="id" name="id" />
    	        <field column="type" name="type" />
    	        <field column="lock_kind" name="lock_kind" />
                <field column="name" name="name" />
                <field column="lock_no" name="lock_no" />
            </entity>
        </document>
    </dataConfig>
    
    

    2.在managed-schema中配置相应的域,field:

    <field name="type" type="string" indexed="true" stored="true"/>
    <field name="lock_kind" type="string" indexed="true" stored="true"/> 
    <field name="lock_no" type="string" indexed="true" stored="true"/>
    
    

    3.在solrconfig.xml文件中,查询到requestHandler标签的位置,并在它前面添加代码:

    <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
           <lst name="defaults"> 
              <str name="config">data-config.xml</str> 
           </lst> 
      </requestHandler>
    
    

    4.将solr-7.5.0\dist下的solr-dataimporthandler-7.2.1.jar和mysql驱动包mysql-connector-java-5.1.35.jar,放入…\tomcat\webapps\solr\WEB-INF\lib文件夹下;

    这样一个引入数据库文档的data-config.xml基本上就建立好了

    然后是关于data-config.xml文件中的一些详细配置,在标签内

    • query是获取全部数据的SQL
    • deltaImportQuery是获取增量数据时使用的SQL
    • deltaQuery是获取pk的SQL
    • parentDeltaQuery是获取父Entity的pk的SQL

    Full Import(全导入)工作原理:

    • 执行本Entity的Query,获取所有数据;
    • 针对每个行数据Row,获取pk,组装子Entity的Query;
    • 执行子Entity的Query,获取子Entity的数据。

    Delta Import(增量导入)工作原理:

    • 查找子Entity,直到没有为止;
    • 执行Entity的deltaQuery,获取变化数据的pk;
    • 合并子Entity parentDeltaQuery得到的pk;
    • 针对每一个pk Row,组装父Entity的parentDeltaQuery;
    • 执行parentDeltaQuery,获取父Entity的pk;
    • 执行deltaImportQuery,获取自身的数据;
    • 如果没有deltaImportQuery,就组装Query

    限制:

    • 子Entity的query必须引用父Entity的pk
    • 子Entity的parentDeltaQuery必须引用自己的pk
    • 子Entity的parentDeltaQuery必须返回父Entity的pk
    • deltaImportQuery引用的必须是自己的pk

    DataImportHandler

    大多数的应用程序将数据存储在关系数据库、xml文件中。对这样的数据进行搜索是很常见的应用。所谓的DataImportHandler提供一种可配置的方式向solr导入数据,可以一次全部导入,也可以增量导入。

    目标

     能够读取关系数据库中的数据。
     通过可配置的方式,能够将数据库中多列、多表的数据生成solr文档  
     能够通过solr文档更新solr
     提供 通过配置文件就能够导入所有数据的能力
     能够发现并处理由insert、update带来的变化(我们假定在表中有一个叫做“last-modified的列”)
     能够配置 “完全导入”和“增量导入”的时间
     让读取xml文件,并建立索引成为可配置。
     能够将其他的数据源(例如:ftp,scp,etc)或者其他格式的文档(Json,csv)以插件的形式集成到项目中。
    

    配置dataconfig.xml:

    solr document是schema,它的域上的值可能来自于多个表.

        data-config.xml的根元素是document。一个document元素代表了一种文档。一个document元素中包含了一个或者多个root实体。一个root实体包含着一些子实体,这些子实体能够包含其他的实体。实体就是,关系数据库上的表或者视图。每个实体都能够包含多个域,每个域对应着数据库返回结果中的一列。域的名字跟列的名字默认是一样的。如果一个列的名字跟solr field的名字不一样,那么属性name就应该要给出。其他的需要的属性在solrschema.xml文件中配置。


    为了能够从数据库中取得想要的数据,我们的设计支持标准sql规范。这使得用户能够使用他任何想要的sql语句。root实体是一个中心表,使用它的列可以把表连接在一起。

    dataconfig的结构

    以下是entity的默认属性

    • name(必需的):name是唯一的,用以标识entity
    • processor:只有当datasource不是RDBMS时才是必需的。默认值是SqlEntityProcessor
    • transformer:转换器将会被应用到这个entity上,详情请浏览transformer部分。
    • pk:entity的主键,它是可选的,但使用“增量导入”的时候是必需。它跟schema.xml中定义的uniqueKey没有必然的联系,但它们可以相同。
    • rootEntity:默认情况下,document元素下就是根实体了,如果没有根实体的话,直接在实体下面的实体将会被看做跟实体。对于根实体对应的数据库中返回的数据的每一行,solr都将生成一个document。

    以下是SqlEntityProcessor的属性

    • query (required) :sql语句

    • deltaQuery : 只在“增量导入”中使用

    • parentDeltaQuery : 只在“增量导入”中使用

    • deletedPkQuery : 只在“增量导入”中使用

    • deltaImportQuery : (只在“增量导入”中使用) . 如果这个存在,那么它将会在“增量导入”中导入phase时代替query产生作用。这里有一个命名空间的用法${dataimporter.delta.}

    Commands

    The handler 通过httprequest 向外界提供它的API . 以下是一些或许你会用到的操作

    (1). full-import : "完全导入"这个操作可以通过访问URL http://:/solr/dataimport?command=full-import 完成。

    • 这个操作,将会新起一个线程。response中的attribute属性将会显示busy。

    • 这个操作执行的时间取决于数据集的大小。

    • 当这个操作运行完了以后,它将在conf/dataimport.properties这个文件中记录下这个操作的开始时间

    • 当“增量导入”被执行时,stored timestamp这个时间戳将会被用到

    • solr的查询在“完全导入”时,不是阻塞的它还有下面一些参数:

      1. clean : (default ‘true’). 决定在建立索引之前,删除以前的索引。

      2. commit: (default ‘true’). 决定这个操作之后是否要commit

      3. optimize: (default ‘true’). 决定这个操作之后是否要优化。

      4. debug : (default false). 工作在debug模式下。详情请看 the interactive development mode (see here)

    (2). delta-import : 当遇到一些增量的输入,或者发生一些变化时使用 http://:/solr/dataimport?command=delta-import . 它同样支持 clean, commit, optimize and debug 这几个参数.

    (3). status : 想要知道命令执行的状态 , 访问 URL http://:/solr/dataimport .它给出了关于文档创建、删除,查询、结果获取等等的详细状况。

    (4). reload-config : 如果data-config.xml已经改变,你不希望重启solr,而要重新加载配置时,运行一下的命令http://:/solr/dataimport?command=reload-config

    (5). abort : 你可以通过访问 url http://:/solr/dataimport?command=abort 来终止一个在运行的操作

    看一个full import的例子
    <document name="products">
    
            <entity name="item" query="select * from item">
    
                <field column="ID" name="id" />
    
                <field column="NAME" name="name" />
    
                <field column="MANU" name="manu" />
    
                <field column="WEIGHT" name="weight" />
    
                <field column="PRICE" name="price" />
    
                <field column="POPULARITY" name="popularity" />
    
                <field column="INSTOCK" name="inStock" />
    
                <field column="INCLUDES" name="includes" />
    
    
    
                <entity name="feature" query="select description from feature where item_id='${item.ID}'">
    
                    <field name="features" column="description" />
    
                </entity>
    
                <entity name="item_category" query="select CATEGORY_ID from item_category where item_id='${item.ID}'">
    
                    <entity name="category" query="select description from category where id = '${item_category.CATEGORY_ID}'">
    
                        <field column="description" name="cat" />
    
                    </entity>
    
                </entity>
    
            </entity>
    
        </document>
    

    这里, 根实体是一个名叫“item”的表,它的主键是ID。我们使用语句 "select * from item"读取数据. 每一项都拥有多个特性。看下面feature实体的查询语句

    <entity name="feature" query="select description from feature where item_id='${item.id}'">
    
           <field name="feature" column="description" />
    
       </entity> 
    

    feature表中的外键item_id跟item中的主键连在一起从数据库中取得该row的数据。相同地,我们将item和category连表(它们是多对多的关系)。注意,我们是怎样使用中间表和标准sql连表的:

    <entity name="item_category" query="select category_id from item_category where item_id='${item.id}'">
             <entity name="category" query="select description from category where id = '${item_category.category_id}'">
                   <field column="description" name="cat" />
            </entity>
    </entity>
    

    短一点的 data-config

    在上面的例子中,这里有好几个从域到solr域之间的映射。如果域的名字和solr中域的名字是一样的话,完全避免使用在实体中配置域也是可以的。当然,如果你需要使用转换器的话,你还是需要加上域实体的。

    下面是一个更短的版本:

        <document>
    
            <entity name="item" query="select * from item">                    
    
                <entity name="feature" query="select description as features from feature where item_id='${item.ID}'"/>            
    
                <entity name="item_category" query="select CATEGORY_ID from item_category where item_id='${item.ID}'">
    
                    <entity name="category" query="select description as cat from category where id = '${item_category.CATEGORY_ID}'"/>                        
    
                </entity>
    
            </entity>
    
        </document>
    
    

    简洁了很多

    增量导入命令

    你可以通过访问URL DataImport http://localhost:8983/solr/dataimport?command=delta-import 来使用增量导入。操作将会新起一个线程,response中的属性statue也将显示busy now。操作执行的时间取决于你的数据集的大小。在任何时候,你都可以通过访问 http://localhost:8983/solr/dataimport 来查看状态。

    当 增量导入被执行的时候,它读取存储在conf/dataimport.properties中的“start time”。它使用这个时间戳来执行增量查询,完成之后,会更新这个放在conf/dataimport.properties中的时间戳。

    Delta Import(增量导入)例子:

    我们将使用跟“完全导入”中相同的数据库。注意,数据库已经被更新了,每个表都包含有一个额外timestamp类型的列 叫做last_modified。我们使用这个时间戳的域来区别出哪一行是上次索引以来有更新的。

    看看下面的这个 data-config.xml:

      <document name="products">
    
                <entity name="item" pk="ID" query="select * from item"
    
                    deltaQuery="select id from item where last_modified > '${dataimporter.last_index_time}'">           
    
    
    
                <entity name="feature" pk="ITEM_ID" 
    
                        query="select description as features from feature where item_id='${item.ID}'">                
    
                </entity>
    
                <entity name="item_category" pk="ITEM_ID, CATEGORY_ID"
    
                        query="select CATEGORY_ID from item_category where ITEM_ID='${item.ID}'">
    
                    <entity name="category" pk="ID"
    
                           query="select description as cat from category where id = '${item_category.CATEGORY_ID}'">                    
    
                    </entity>
    
                </entity>
    
            </entity>
    
        </document>
    

    注意到item实体的 属性deltaquery了吗,它包含了一个能够查出最近更新的sql语句。注意,变量{dataimporter.last_index_time} 是DataImporthandler传过来的变量,我们叫它时间戳,它指出“完全导入”或者“部分导入”的最后运行时间。你可以在data-config.xml文件中的sql的任何地方使用这个变量,它将在processing这个过程中被赋值。

    注意上面例子中deltaQuery 只能够发现item中的更新,而不能发现其他表的。你可以像下面那样在一个sql语句中指定所有的表的更新。这里要特别说明一下的就是,它的细节对于一个使用者来说是一个不错的练习。

    deltaQuery="select id from item where id in
    
                                    (select item_id as id from feature where last_modified > '${dataimporter.last_index_time}')
    
                                    or id in 
    
                                    (select item_id as id from item_category where item_id in 
    
                                        (select id as item_id from category where last_modified > '${dataimporter.last_index_time}')
    
                                    or last_modified > '${dataimporter.last_index_time}')
    
                                    or last_modified > '${dataimporter.last_index_time}'"
    

    但是写一个类似上面的庞大的deltaQuery 并不是一件很享受的工作,我们还是选择其他的方法来达到这个目的

    <dataConfig>
    
        <dataSource driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:/temp/example/ex" user="sa" />
    
        <document>
    
                <entity name="item" pk="ID" query="select * from item"
    
                    deltaQuery="select id from item where last_modified > '${dataimporter.last_index_time}'">
    
                    <entity name="feature" pk="ITEM_ID" 
    
                        query="select DESCRIPTION as features from FEATURE where ITEM_ID='${item.ID}'"
    
                        deltaQuery="select ITEM_ID from FEATURE where last_modified > '${dataimporter.last_index_time}'"
    
                        parentDeltaQuery="select ID from item where ID=${feature.ITEM_ID}"/>
    
                    
    
                
    
                <entity name="item_category" pk="ITEM_ID, CATEGORY_ID"
    
                        query="select CATEGORY_ID from item_category where ITEM_ID='${item.ID}'"
    
                        deltaQuery="select ITEM_ID, CATEGORY_ID from item_category where last_modified > '${dataimporter.last_index_time}'"
    
                        parentDeltaQuery="select ID from item where ID=${item_category.ITEM_ID}">
    
                    <entity name="category" pk="ID"
    
                            query="select DESCRIPTION as cat from category where ID = '${item_category.CATEGORY_ID}'"
    
                            deltaQuery="select ID from category where last_modified > '${dataimporter.last_index_time}'"
    
                            parentDeltaQuery="select ITEM_ID, CATEGORY_ID from item_category where CATEGORY_ID=${category.ID}"/>
    
                </entity>
    
            </entity>
    
        </document>
    
    </dataConfig>
    
    

    除了根实体以外,这里一共有三个查询,每个实体一个查询语句,为我们取得需要建立索引的数据。

    deltaQuery: 取得上次索引更新时间以来有更新的实体的主键。

    parentDeltaQuery: deltaQuery中取得当前表中更新的行,并把这些行提交给父表。因为,当子表中的一行发生改变时,我们需要更新它的父表的solr文档。

    下面是一些值得注意的地方:

    • query语句返回的每一行,子实体的query都将被执行一次

    • deltaQuery返回的每一行,parentDeltaQuery都将被执行。

    • 根实体或者子实体中的行发生改变,我们将重新生成包含该行的solr文档。

    关于两种数据导入就是这样,更具体内容:https://blog.csdn.net/boolbo/article/details/50352331#commentBox

    展开全文
  • 活,本篇博客主要介绍一下如何将XML文件导入到orecal数据库中。  XML在现在的项目中的应用相当广泛,XML 在 Web 中起到的作用不会亚于一直作为 Web 基石的 HTML。 XML 无所不在。XML 是各种应用程序之间进行数据...
  • 如题:文件信息的批量导入...... 项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中的数据提取到数据库的操作,其实实现起来很简单。...3、批量导入数据库
  • 文件Excel,csv等快速导入数据库

    千次阅读 2017-09-15 18:59:39
    今天在向数据库里面导入数据时,发现cvs文件竟然有180M,用sqlserver自带的导入工具导了十几分钟,大概导入了百分之二,而且会出现很数据类型不匹配(还不知道什么原因,后面把所有类型的长度都加长了),于是放弃...
  • 项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中的数据提取到数据库的操作,其实实现起来很简单。以下是小菜鸟我的实现思路:   1、JSP页面+Struts2实现文件上传,把...
  • 使用多线程加载多个Xml文件到TreeView控件

    万次阅读 热门讨论 2004-06-10 10:36:00
    使用多线程加载多个Xml文件到TreeView控件 翻译:秋枫原代码:LoadingXmlInTvMTCode.zip 在很多情况下程序员需要采用多线程来开发应用程序,用户可以在前台操作数据或其他工作,在后台程序正在加载很大的一些文件,...
  • solr导入数据库表数据

    2019-05-21 20:32:05
    solr 除了能查询文档中的数据外, 还可以导入数据库中的数据. 也就是说, solr 能查询其他数据库中的数据(solr本身也是一数据库, 非关系型的). 那接下来就试一下导入mysql数据库中的数据. 一. 准备工作 在solr_core...
  • Java实现Excel批量导入数据库

    千次阅读 2020-02-14 00:15:05
    springboot实现Excel批量导入数据库 前言:Java实现,Excel数据表,MySQL数据库,具体步骤如下…
  • 对于一数据量大、复杂的xml文件,要进行解析并且存入数据库。首先要对xml文件的dom结构有所了解,并进行分析,然后获取自己想要的数据,之后进行数据的存储。 接下来说明一下具体的步骤和方法。 一、解析xml文件 ...
  • 远程文件数据导入 SQL Server 数据库

    千次阅读 2011-10-10 11:12:01
    数据库远程文件导入 此解决方案受SQL Server 2000和SQL Server 2005支持。数据文件导入有两种情况,一种是文件内容以二进制文件存入数据库;另一种是将文件中的数据导入到对应的数据表中。因为现在很Web...
  • 【java】线程批量拆分List导入数据库

    万次阅读 热门讨论 2018-04-04 15:01:55
    前两天做了一个导入的功能,导入开始的时候非常慢,导入2w条数据要1分钟,后来一点一点的优化,从直接把list怼进Mysql中,到分配把list导入Mysql中,到线程把list导入Mysql中。时间是一点一点的变少了。非常的爽...
  • 如标题, 例如在本地D盘的A文件夹下有OUT这子文件夹,里面放xml文件, kettle如何读取这out文件夹下的所有XML文件并解析保存到数据库表里? 然后如何将out文件夹下读取过的放到A文件夹下的BACK这文件夹中?
  • IntelliJ IDEA 添加 spring 库 以及 导入数据库
  • 它还支持批处理多个文件。 该项目主页: http://quickload.sourceforge.net/1.1/index.html <!-- google_ad_client = "pub-7343546549496470"; /* 468x60, 创建于 08-8-6 */ google_ad_slot = ...
  • 多种方法实现Excel批量导入数据库

    万次阅读 热门讨论 2015-11-27 23:24:19
    Excel批量导入数据库是用到批量导入系统的一难题,特别是需要批量导入的Excel表比较复杂,或者这张Excel表需要表插入的时候,批量导入就变得复杂起来。其实了解了批量导入的原理之后,批量导入也就不再复杂。 ...
  • 这几天写一Windows Mobile小程序,其中要用到原先的XML文档,现在想用SQL Server 2005 Compact 了,就到处找办法想将XML数据文档导入到SQL Server数据库中,可是我对SQL Server及其SQL语句都不太熟悉,加之MSDN...
  • Java实现Excel导入数据库

    万次阅读 2016-01-10 22:48:51
    整个过程前台form表单提交 -> url拦截 -> 传到后台的servlet -> 后台首先将Excel传到服务器(假设有)的某个路径 -> 然后将Excel分条解析到List里面 -> 将List记录放入Map ->批量方法传到数据库废话不说,上代码...
  • javaweb Excel数据导入数据库

    千次阅读 2016-11-18 15:43:29
    有需求把excel导入数据库,很长时间没有写过文件IO方面的代码,第一时间没有选择用什么插件,第一时间就是找资料,在这感谢 http://blog.csdn.net/tmaskboy/article/details/51755305  文章java代码只是进行了...
  • Excel导入数据库超级DLL

    千次阅读 2009-05-15 13:55:00
    前言: 项目之余,发现很项目都需要Excel导入导出的功能,每次重复代码的Coding以令我忍无可忍,终于在一"寂寞难耐"的周末,完成了一Excel导入数据库(支持Sql Server 2000,2005;Access,Oracle未测试)的程序.闲暇...
  • 工作中对xml的操作比较,这里实现一种。使用dom4j解析xml、 流程: 创建xml----->然后解析--------》然后将数据用Log打印出来。 创建xml: package com.example.jsonandxml; import java.io.File; import ...
  • solr批量导入数据库数据

    千次阅读 2018-01-16 15:06:50
    1.批量导入数据 1.1 环境准备,导入jar包         复制完jar包后,我们把它粘贴到solrcore里面,  1.2找到solrhome ...1.3把复制的jar包拷贝进来,还需要拷贝一个数据库驱动  
  • 刚接触solr,在跟着别人的教程向solr中导入数据库数据时出现了好多坑,忙活了一下午。。。 前面的配置都没问题,但是在导入的时候,Fetched和Processed都是零 这问题应该是数据库没有返回数据,首先先检查一下在...
  • Solr导入数据库的数据的解决方案

    千次阅读 2017-08-10 17:11:10
    解决方案: 然后在D:\apache-tomcat-7.0.57\webapps\solr\solr_home\collection1\conf下面 新建一个配置文件:data-...找到很多个requestHandler节点,在最下面增加: 将sql的jar包安装 编辑data-co
  • 我们知道,传统的spring 一些 bean的信息(比如扫描配置,数据库配置等等)都是放在xml配置文件里面。然后启动服务的时候就通过导入配置文件完成spring容器的注入。 这种情况大多出现在对一些老旧项目进行改造的...
  • 个xml文件有60M左右 我试着用了下SAX,直接解析出来倒是挺快的,只用了72秒, 但当我解析出来的同时插入数据库中时,就慢了好多,算起来要5个小时 你们谁有什么比较快的方法么?
  • 将shp文件导入到mysql数据库

    千次阅读 2010-03-25 10:59:00
    一个shp文件多个文件组成  将shp文件导入到mysql数据库中,使用shp2mysql的doc命令 首先下载DOShere   /Files/ycsfwhh/将shp文件导入到mysql的命令.rar   1、将shp以及shp的相关文件和DOShere的...
  • 把Excel表中数据导入数据库

    千次阅读 2007-05-14 16:23:00
    这是第二次了,市场部那边又来...但这样一个个更新很明显不是办法,我想通过excel直接把数据导入数据库应该是可行的吧,就开始找方法了我想至少有这样两种比较容易实现的方法:1、直接用Sql语句查询2、先用excle中的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,611
精华内容 46,244
关键字:

多个xml文件导入数据库