导入excel就是一个上传excel文件,然后获取excel文件数据,然后处理数据并插入到数据库的过程

一、上传excel

前端jsp页面,我的是index.jsp

在页面中我自己加入了一个下载上传文件的功能,其中超链接就是下载

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Insert title here</title>
  8. </head>
  9. <script type="text/javascript" src="jquery/1.7.2/jquery-1.7.2.min.js"></script>
  10. <script type="text/javascript" src="jquery/jquery.form.js"></script>
  11. <script type="text/javascript">
  12.  
  13. function test1(){
  14. var form = new FormData(document.getElementById("uploadForm"));
  15. $.ajax({
  16. contentType:"multipart/form-data",
  17. url:"servlet/UploadHandleServlet",
  18. type:"post",
  19. async:false,
  20. data:form,
  21. dataType:"json",
  22. processData: false, // 告诉jQuery不要去处理发送的数据
  23. contentType: false, // 告诉jQuery不要去设置Content-Type请求头
  24. success:function(data){
  25. var result=eval(data);
  26. var filePath=result[0].filePath;
  27. //alert(filePath);
  28. var fileName = result[0].imageName;
  29. $("#download").attr("href","servlet/DownLoadServlet?filePath="+filePath);
  30. document.getElementById("download").innerHTML = fileName;
  31.  
  32. //上传文件后得到路径,然后处理数据插入数据库表中
  33. importExcel(filePath);
  34. }
  35. });
  36. }
  37.  
  38. function importExcel(filePath){
  39. $.ajax({
  40. url:"${pageContext.request.contextPath}/user/insertUserByExcelPath",
  41. type:"post",
  42. data:{"filePath":filePath},
  43. success:function(data){
  44. }
  45. });
  46. }
  47.  
  48. </script>
  49. <body>
  50.  
  51. 导入excel表格
  52. <form id="uploadForm" action="" method="post" enctype="multipart/form-data">
  53. <table>
  54. <tr>
  55. <td>上传文件:</td>
  56. <td>
  57. <input type="file" name="fileName" id="fileName"/>
  58. </td>
  59. </tr>
  60. </table>
  61. </form>
  62. <button id="uploadFile" onclick="test1();">确定</button>
  63. <!-- servlet/DownLoadServlet -->
  64. 上传的文件<a id="download" href=""></a>
  65. </body>
  66. </html>

后端的上传的servlet,其中需要commons-fileupload-1.2.1.jar的支持,然后我的保存路径savePath是自己写的一个配置文件来的,这里可以写上自己的上传文件所保存的路径就行,返回的是一个json,包括文件路径还有文件名

  1. package com.huang.servlet;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.File;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.util.Iterator;
  10. import java.util.List;
  11. import java.util.UUID;
  12.  
  13. import javax.servlet.ServletException;
  14. import javax.servlet.annotation.WebServlet;
  15. import javax.servlet.http.HttpServlet;
  16. import javax.servlet.http.HttpServletRequest;
  17. import javax.servlet.http.HttpServletResponse;
  18.  
  19. import org.apache.commons.fileupload.FileItem;
  20. import org.apache.commons.fileupload.disk.DiskFileItem;
  21. import org.apache.commons.fileupload.FileUploadBase;
  22. import org.apache.commons.fileupload.FileUploadException;
  23. import org.apache.commons.fileupload.ProgressListener;
  24. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  25. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  26. import org.apache.commons.fileupload.util.Streams;
  27. import org.springframework.context.ApplicationContext;
  28. import org.springframework.context.support.ClassPathXmlApplicationContext;
  29. import org.springframework.stereotype.Controller;
  30.  
  31. import com.huang.entity.User;
  32. import com.huang.utils.Excel2Bean;
  33. import com.huang.utils.PropertiesUtil;
  34.  
  35. /**
  36. * Servlet implementation class UploadHandleServlet
  37. */
  38. @WebServlet("/UploadHandleServlet")
  39. public class UploadHandleServlet extends HttpServlet {
  40. private static final long serialVersionUID = 1L;
  41.  
  42. /**
  43. * @see HttpServlet#HttpServlet()
  44. */
  45. public UploadHandleServlet() {
  46. super();
  47. // TODO Auto-generated constructor stub
  48. }
  49.  
  50. /**
  51. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  52. */
  53. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  54. doPost(request, response);
  55. }
  56.  
  57. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  58. System.out.println("进入servlet");
  59. DiskFileItemFactory fac = new DiskFileItemFactory();
  60. ServletFileUpload upload = new ServletFileUpload(fac);
  61. upload.setHeaderEncoding("UTF-8");
  62. // 获取多个上传文件
  63. List fileList = null;
  64. try {
  65. fileList = upload.parseRequest(request);
  66. } catch (FileUploadException e) {
  67. // TODO Auto-generated catch block
  68. e.printStackTrace();
  69. }
  70. // 遍历上传文件写入磁盘
  71. Iterator it = fileList.iterator();
  72. while (it.hasNext()) {
  73. Object obit = it.next();
  74. if (obit instanceof DiskFileItem) {
  75. DiskFileItem item = (DiskFileItem) obit;
  76. // 如果item是文件上传表单域
  77. // 获得文件名及路径
  78. String fileName = item.getName();
  79. if (fileName != null) {
  80. String fName = item.getName().substring(
  81. item.getName().lastIndexOf("\\") + 1);
  82. String formatName = fName
  83. .substring(fName.lastIndexOf(".") + 1);// 获取文件后缀名
  84. String savePath = PropertiesUtil.getInstance().getProperty("uploadFile");
  85. // String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
  86. File expsfile = new File(savePath);
  87. if (!expsfile.exists()) {// 创建文件夹
  88. expsfile.mkdirs();
  89. }
  90.  
  91. String realPath = savePath+"/"+ UUID.randomUUID().toString()+"."+formatName;
  92. System.out.println("realPath:"+realPath);
  93. BufferedInputStream bis = new BufferedInputStream(
  94. item.getInputStream());// 获得文件输入流
  95. BufferedOutputStream outStream = new BufferedOutputStream(
  96. new FileOutputStream(new File(realPath)));// 获得文件输出流
  97. Streams.copy(bis, outStream, true);// 开始把文件写到你指定的上传文件夹
  98. // 上传成功,则插入数据库
  99. File file = new File(realPath);
  100. if (file.exists()) {
  101. // request.setAttribute("realPath", realPath);
  102. // request.getRequestDispatcher("/user/insertUserByExcelPath").forward(request, response);
  103. // 返回文件路径
  104. String imageName = file.getName();
  105. String json = "[{\"filePath\":\""
  106. + realPath
  107. + "\",\"imageName\":\"" + imageName + "\"}]";
  108. response.reset();
  109. response.setContentType("text/json");
  110. response.setCharacterEncoding("UTF-8");
  111. response.getWriter().write(json);
  112. // response.getWriter().write(realPath);
  113. response.getWriter().flush();
  114. }
  115.  
  116. }
  117. }
  118. }
  119. }
  120.  
  121. }

二、处理excel表格并得到含有Javabean的list

在用ajax调用servlet上传文件后得到路径和文件名,然后进行excel数据处理,在前端的页面上调用importExcel()的js函数,传入刚刚得到的文件路径

我这里用的是ssm框架中的controller(我自己也学习一下),这里也可以用servlet,或者Struts等。能访问到后端服务就行。

这里是controller中的代码,主要数据处理在Excel2Bean.getBeanByExcelPath(filePath, User.class)这个方法中

  1. import java.io.IOException;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4.  
  5. import javax.annotation.Resource;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Controller;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.context.request.RequestContextHolder;
  14. import org.springframework.web.context.request.ServletRequestAttributes;
  15. import org.springframework.web.servlet.ModelAndView;
  16.  
  17. import com.huang.entity.User;
  18. import com.huang.service.UserService;
  19. import com.huang.utils.Excel2Bean;
  20.  
  21. @Controller("/userController")
  22. @RequestMapping("/user")
  23. public class UserController {
  24.  
  25. @Autowired
  26. Excel2Bean excel2Bean;
  27.  
  28. @Resource(name="userService")
  29. UserService userService;
  30.  
  31. @RequestMapping("/insertUserByExcelPath")
  32. public void insertUserByExcelPath(HttpServletRequest req,HttpServletResponse Resp){
  33. System.out.println("进入insertUserByExcelPath");
  34. String filePath = req.getParameter("filePath");
  35. System.out.println("filePath:"+filePath);
  36. List<User> list =Excel2Bean.getBeanByExcelPath(filePath, User.class);
  37. excel2Bean.testinsert(list);
  38. }
  39. }

这里就说说Excel2Bean.getBeanByExcelPath(filePath, User.class)这个方法

从excel表格中获取数据然后转换成一个javaBean的list集合,代码中操作excel表格需要用到的jar poi-ooxml-3.9-20121203.jar,poi-3.9-20121203.jar,poi-ooxml-schemas-3.9-20121203.jar,为什么要用到这些jar,因为在有些之前的版本的poi中可能对word的版本不能兼容,网上具体有说到这个。最好是用org.apache.poi.ss.usermodel.Workbook这个来操作excel,poi各种版本官网下载可以参考微博https://mp.csdn.net/postedit/83620739。对于getBeanByExcelPath这个方法使用到了泛型,也使用到了一点点的反射的东西,获取一个类的属性,并给属性赋值。代码中有方法测试这个获取Javabean的属性并赋值的方法。这个方法也是为了能更通用一点,适用于更多的javabean,更多的表。当然excel的表头就要用到Javabean中的属性名称了。如果对泛型不是很了解的可以学习一下,当然也可以先看里面的readExcel(filePath)这个方法,是一个固定的Javabean对象

代码如下

  1. package com.huang.utils;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.lang.reflect.Field;
  9. import java.text.DecimalFormat;
  10. import java.text.SimpleDateFormat;
  11. import java.util.*;
  12.  
  13. import javax.annotation.PostConstruct;
  14. import javax.annotation.Resource;
  15.  
  16. import net.sf.jxls.exception.ParsePropertyException;
  17. import net.sf.jxls.transformer.XLSTransformer;
  18.  
  19. import org.apache.poi.hssf.model.Workbook;
  20. import org.apache.poi.hssf.usermodel.HSSFCell;
  21. import org.apache.poi.hssf.usermodel.HSSFRow;
  22. import org.apache.poi.hssf.usermodel.HSSFSheet;
  23. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  24. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
  25. import org.apache.poi.ss.usermodel.Cell;
  26. import org.apache.poi.ss.usermodel.Row;
  27. import org.apache.poi.ss.usermodel.Sheet;
  28. import org.apache.poi.ss.usermodel.WorkbookFactory;
  29. import org.springframework.stereotype.Component;
  30.  
  31. import com.huang.entity.User;
  32. import com.huang.service.UserService;
  33.  
  34. @Component
  35. public class Excel2Bean {
  36.  
  37. @Resource(name="userService")
  38. UserService userService;
  39.  
  40. public static Excel2Bean excel2Bean;
  41.  
  42. @PostConstruct
  43. public void init() {
  44. excel2Bean = this;
  45. }
  46. public static void testinsert(List<User> list){
  47. if(list!=null&&list.size()>0){
  48. for (User user : list) {
  49. user.setId(excel2Bean.userService.getMaxId()+1);
  50. excel2Bean.userService.insertUserByUser(user);
  51. }
  52. }
  53. // System.out.println(excel2Bean.userService.getMaxId());
  54.  
  55. }
  56.  
  57. /**
  58. * 获取属性名数组
  59. * @throws IllegalAccessException
  60. * @throws InstantiationException
  61. * @throws SecurityException
  62. * */
  63. public static String[] getFiledName(Class<?> clazz) throws SecurityException, InstantiationException, IllegalAccessException{
  64.  
  65. Field[] fields=clazz.newInstance().getClass().getDeclaredFields();
  66. String[] fieldNames=new String[fields.length];
  67. for(int i=0;i<fields.length;i++){
  68. // System.out.println(fields[i].getType());
  69. fieldNames[i]=fields[i].getName();
  70. }
  71. return fieldNames;
  72. }
  73.  
  74. public static <T>T getByExcelPath(String excelPath,Class<T> clazz){
  75. T bean = null;
  76. try {
  77. bean = clazz.newInstance();
  78. String tableName = clazz.getSimpleName();
  79. // 反射bean上与列名相同的属性
  80. try {
  81. Field f = bean.getClass().getDeclaredField("name");
  82. f.setAccessible(true);
  83. f.set(bean, "兽王");
  84. // System.out.println(f);
  85. } catch (NoSuchFieldException e) {
  86. // TODO Auto-generated catch block
  87. e.printStackTrace();
  88. } catch (SecurityException e) {
  89. // TODO Auto-generated catch block
  90. e.printStackTrace();
  91. }
  92. } catch (InstantiationException e) {
  93. // TODO Auto-generated catch block
  94. e.printStackTrace();
  95. } catch (IllegalAccessException e) {
  96. // TODO Auto-generated catch block
  97. e.printStackTrace();
  98. }
  99. return bean;
  100. }
  101.  
  102. public static <T> List<T> getBeanByExcelPath(String excelPath,Class<T> clazz){
  103. List<T> list = new ArrayList<T>();
  104. org.apache.poi.ss.usermodel.Workbook workbook = null;
  105. InputStream is = null;
  106. try {
  107. is = new FileInputStream(excelPath);
  108. workbook = WorkbookFactory.create(is);
  109. is.close();
  110. } catch (FileNotFoundException e) {
  111. // TODO Auto-generated catch block
  112. e.printStackTrace();
  113. } catch (InvalidFormatException e) {
  114. // TODO Auto-generated catch block
  115. e.printStackTrace();
  116. } catch (IOException e) {
  117. // TODO Auto-generated catch block
  118. e.printStackTrace();
  119. }
  120. // 循环工作表
  121. for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
  122. Sheet sheet = workbook.getSheetAt(numSheet);//得到工作表
  123. if (sheet == null) {
  124. continue;
  125. }
  126. // 循环行 因为表头行是第0行,所以从0开始循环
  127. Row rowHead = sheet.getRow(0);
  128. for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
  129. T bean = null;
  130. try {
  131. bean = clazz.newInstance();
  132. } catch (InstantiationException e1) {
  133. // TODO Auto-generated catch block
  134. e1.printStackTrace();
  135. } catch (IllegalAccessException e1) {
  136. // TODO Auto-generated catch block
  137. e1.printStackTrace();
  138. }
  139. Row row = sheet.getRow(rowNum);//得到行
  140. short s = row.getLastCellNum();//得到此行有多少列
  141. for (int i = 0; i < s; i++) {
  142. Cell cell = row.getCell(i);//得到单元格(每行)
  143. Cell cellHead = rowHead.getCell(i);
  144. String feild = (String) getCellValObject(cellHead);//得到表头属性名称
  145. Object value = getCellValObject(cell);
  146. Field f = null;
  147. try {
  148.  
  149. f = bean.getClass().getDeclaredField(feild);//根据名称获取bean中的属性
  150. f.setAccessible(true);
  151. f.set(bean, value);//给属性赋值
  152. } catch (NoSuchFieldException e) {
  153. // TODO Auto-generated catch block
  154. e.printStackTrace();
  155. } catch (SecurityException e) {
  156. // TODO Auto-generated catch block
  157. e.printStackTrace();
  158. } catch (IllegalArgumentException e) {
  159. // TODO Auto-generated catch block
  160. e.printStackTrace();
  161. } catch (IllegalAccessException e) {
  162. // TODO Auto-generated catch block
  163. e.printStackTrace();
  164. }
  165. }
  166.  
  167. //把所有属性值添加完成后装入list中
  168. list.add(bean);
  169.  
  170. }
  171. }
  172.  
  173. return list;
  174. }
  175.  
  176. public static String getCellVal(HSSFCell cel) {
  177. if(cel.getCellType() == HSSFCell.CELL_TYPE_STRING) {
  178. return cel.getRichStringCellValue().getString();
  179. }
  180. if(cel.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
  181. return cel.getNumericCellValue() + "";
  182. }
  183. if(cel.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
  184. return cel.getBooleanCellValue() + "";
  185. }
  186. return cel.toString();
  187. }
  188.  
  189. public static String getCellVal(Cell cel) {
  190. if(cel.getCellType() == Cell.CELL_TYPE_STRING) {
  191. return cel.getRichStringCellValue().getString();
  192. }
  193. if(cel.getCellType() == Cell.CELL_TYPE_NUMERIC) {
  194. return cel.getNumericCellValue() + "";
  195. }
  196. if(cel.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
  197. return cel.getBooleanCellValue() + "";
  198. }
  199. if(cel.getCellType() == Cell.CELL_TYPE_FORMULA) {
  200. return cel.getCellFormula() + "";
  201. }
  202. return cel.toString();
  203. }
  204.  
  205. public static Object getCellValObject(Cell cel) {
  206. if(cel.getCellType() == Cell.CELL_TYPE_STRING) {
  207. return cel.getRichStringCellValue().getString();
  208. }
  209. if(cel.getCellType() == Cell.CELL_TYPE_NUMERIC) {
  210. return new Integer(Double.valueOf(cel.getNumericCellValue()).intValue());
  211. }
  212. if(cel.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
  213. return cel.getBooleanCellValue() + "";
  214. }
  215. if(cel.getCellType() == Cell.CELL_TYPE_FORMULA) {
  216. return cel.getCellFormula() + "";
  217. }
  218. return null;
  219. }
  220.  
  221. public static List<User> readExcel(String filePath){
  222. List<User> list = new ArrayList<User>();
  223. // HSSFWorkbook workbook = null;
  224. org.apache.poi.ss.usermodel.Workbook workbook = null;
  225. try {
  226. // 读取Excel文件
  227. InputStream inputStream = new FileInputStream(filePath);
  228. // workbook = new HSSFWorkbook(inputStream);
  229. workbook = WorkbookFactory.create(inputStream);
  230. inputStream.close();
  231. } catch (Exception e) {
  232. e.printStackTrace();
  233. }
  234. // 循环工作表
  235. for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
  236. Sheet hssfSheet = workbook.getSheetAt(numSheet);
  237. if (hssfSheet == null) {
  238. continue;
  239. }
  240. // 循环行
  241. for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
  242. Row hssfRow = hssfSheet.getRow(rowNum);
  243. // System.out.println("hssfRow1:"+hssfRow.getRowNum());
  244. // System.out.println("hssfRow2:"+hssfRow.getLastCellNum());
  245. if (hssfRow == null) {
  246. continue;
  247. }
  248. // 将单元格中的内容存入集合
  249. User user = new User();
  250. Cell cell = hssfRow.getCell(0);
  251. if (cell == null) {
  252. continue;
  253. }
  254. String name = getCellVal(cell);
  255. System.out.println("name:"+name);
  256. user.setName(name);
  257. cell = hssfRow.getCell(1);
  258. if (cell == null) {
  259. continue;
  260. }
  261. String age = getCellVal(cell);
  262. Integer aa = Double.valueOf(age).intValue();
  263.  
  264. System.out.println("age:"+age);
  265. user.setAge(Double.valueOf(age).intValue());
  266. list.add(user);
  267. }
  268. }
  269. return list;
  270. }
  271. }

三、插入数据库

得到excel转换成Javabean的list对象后然后插入到数据库中。我这里用的是ssm里面的一些操作,我自己可能都解释不清楚。反正得到数据,然后往数据库插入数据这个操作也可以用其他方式的,框架也好,jdbc连接数据库直接去执行sql也好,都OK。

最后贴一下下载上传的文件的servlet代码

  1. package com.huang.servlet;
  2.  
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.OutputStream;
  9. import java.net.URLEncoder;
  10.  
  11. import javax.servlet.ServletException;
  12. import javax.servlet.annotation.WebServlet;
  13. import javax.servlet.http.HttpServlet;
  14. import javax.servlet.http.HttpServletRequest;
  15. import javax.servlet.http.HttpServletResponse;
  16.  
  17. /**
  18. * Servlet implementation class DownLoadServlet
  19. */
  20. @WebServlet("/DownLoadServlet")
  21. public class DownLoadServlet extends HttpServlet {
  22. private static final long serialVersionUID = 1L;
  23.  
  24. /**
  25. * @see HttpServlet#HttpServlet()
  26. */
  27. public DownLoadServlet() {
  28. super();
  29. // TODO Auto-generated constructor stub
  30. }
  31.  
  32. /**
  33. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  34. */
  35. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  36. doPost(request,response);
  37. }
  38.  
  39. /**
  40. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  41. */
  42. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  43. // 下载文件
  44. // String path = "d:"+File.separator + "mytestfile" + File.separator + "testFile.txt";
  45. String path = request.getParameter("filePath");
  46. String realPath = path.substring(path.lastIndexOf("\\")+1);
  47. response.setHeader("content-disposition","attachment; filename="+URLEncoder.encode(realPath, "utf-8"));
  48. //获取到所下载的资源
  49. FileInputStream fis = new FileInputStream(path);
  50. if(fis!=null){
  51. int len = 0;
  52. byte[] buf = new byte[1024];
  53. while ((len = fis.read(buf)) != -1) {
  54. response.getOutputStream().write(buf, 0, len);
  55. }
  56. fis.close();
  57. }else{
  58. response.getWriter().write("服务器上面不存在该文件");
  59. }
  60.  
  61. }
  62.  
  63. }

还有User.java这个javabean、

  1. public class User {
  2. private Integer id;
  3.  
  4. private String name;
  5.  
  6. private Integer age;
  7.  
  8. public Integer getId() {
  9. return id;
  10. }
  11.  
  12. public void setId(Integer id) {
  13. this.id = id;
  14. }
  15.  
  16. public String getName() {
  17. return name;
  18. }
  19.  
  20. public void setName(String name) {
  21. this.name = name == null ? null : name.trim();
  22. }

原文链接:https://blog.csdn.net/summerdirewof/article/details/83822710

java实现excel表格导入数据库表的更多相关文章

  1. C#解决从含身份证号码的Excel表格导入数据库的问题

    用C#做从Excel表导入SQL数据库时发现从EXCEL导入的身份证号码会变成科学表示方法. 解决这个问题是比较容易的,首先,打开电子表格,选中“身份证号码”一列,右键选择“设置单元格格式”,进入单元 ...

  2. SQL语句完成Excel数据导入数据库表中流程方法及注意事项

    第一步:先查看数据库是否安装AccessDatabaseEngine_X64.exe, 如下图查看: 如果未安装先下载脚本之家下载地址 https://www.jb51.net/softs/29150 ...

  3. excel表格导入数据库数据存在则更新不存在添加

    public void excelToDB() throws ParseException { String datapath = this.getParameter("datapath&q ...

  4. C#代码实现 Excel表格与Object互相转换,Excel表格导入数据库(.NET2.0 .NET4.0)

    前些天在工作上遇到这个需求,在GitHub找到一个开源代码可以用,Fork了一个版本,整理一下发出来. ①.Net项目中使用Nuget安装一个 NPOI 包    https://github.com ...

  5. Excel表格导入Mysql数据库,一行存入多条数据的前后台完整实现思路(使用mybatis框架)

    现在有一张Excel表格: 存入数据库时需要这样存放: 现在需要将Excel表格做处理,将每一行拆分成多条数据存入数据库. 1.首先在前台jsp页面画一个按钮:,加入点击事件: <td styl ...

  6. JAVA处理Excel表格数据并写入数据库

    package com.hncj.test; import java.io.FileInputStream; import java.sql.Connection; import java.sql.D ...

  7. java导出excel表格

    java导出excel表格: 1.导入jar包 <dependency> <groupId>org.apache.poi</groupId> <artifac ...

  8. java实现excel的导入导出(poi详解)[转]

    java实现excel的导入导出(poi详解) 博客分类: java技术 excel导出poijava  经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个 ...

  9. Java读取excel表格

    Java读取excel表格 一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建, ...

随机推荐

  1. LuoguP6857 梦中梦与不再有梦 题解

    Update \(\texttt{2020.10.20}\) 增加了证明.感谢@东北小蟹蟹(dbxxxqwq)的提醒. Content 有一个 \(n\) 个点的无向图,每两个点之间都有一条边直接相连 ...

  2. LuoguP7071 [CSP-J2020] 优秀的拆分 题解

    Content 给定一个数 \(n\),求是否能够拆分成 \(2\) 的正整数次幂的和的形式,并给出具体方案. 数据范围:\(1\leqslant n\leqslant 10^7\). Solutio ...

  3. django信号机制 (每个操作前后django都预留了两个钩子,便于统一化添加功能)

    信号 Django中提供了"信号调度",用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 典型应用场景:在所有数据库相关操作(读/ ...

  4. 【LeetCode】1408. 数组中的字符串匹配 String Matching in an Array

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力遍历 日期 题目地址:https://leetco ...

  5. java源码——统计字符串中字符出现的次数

    对于任意输入的一段字符串,读取并且计算其中所有字符出现的次数. 使用HashMap存储字符和其对应的出现的次数,输出时,对HashMap进行遍历. 难点在于对HashMap的遍历,第一次使用,也是学习 ...

  6. python学习第二天:命令行模式和python交互模式

    命令行模式 安装完python开发环境和工具之后,在Windows开始菜单选择"命令提示符",就会进入到命令行模式: 或者都可以,然后 点击enter键,弹出下图中的窗口,即命令行 ...

  7. 洛谷——P1980 [NOIP2013 普及组] 计数问题

    题目描述 试计算在区间 11 到 nn的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2, ...

  8. Linux_Cornd任务调度

    Crond任务调度 进行定时任务的设置 概述 任务调度:是指系统在某个时间执行特定的命令或程序 作用:避免重复工作 基本语法 crontab [选项] 选项 功能 -e 编辑crontab定时任务 - ...

  9. 编写Java程序,利用List维护用户信息

    返回本章节 返回作业目录 需求说明: 将新增的用户信息添加到List集合. 用户信息包括用户编号.姓名和性别. 按照姓名和性别查找用户信息. 实现思路: 创建类UserInfo,在该类中定义3个Str ...

  10. 编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面

    返回本章节 返回作业目录 需求说明: 使用Swing布局管理器和常用控件,实现仿QQ登录界面 实现思路: 创建登录界面的类QQLogin,该类继承父类JFrame,在该类中创建无参数的构造方法,在构造 ...