zoukankan      html  css  js  c++  java
  • 导入csv文件到数据库

    csv:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

    这是使用记事本打开大一个csv文件:

    另外,csv也可以像excel那样作为一个表格的形式打开:

    当然,首要先要一个前提,你要添加到数据库的数据,必须和数据库中标的字段互相对应:

    注意:这里我故意将表格中某些字段没有输入数据,尤其是表格的第五行,主键没有,所以,这个是不能插入到数据中的,我们将在后台进行判断。

    下面开始代码:(数据库连接部分省略)

     1 public static void main(String[] args) throws IOException {
     2         // 获取要录入的文件
     3         BufferedReader br = new BufferedReader(new FileReader(new File("C:/Users/Nemo/Desktop/testCSV.csv")));
     4         // 读取直到最后一行
     5         String line = "";
     6         boolean isFirstRow = true; // 判断是不是表头
     7         int collumNum = 0;
     8         while ((line = br.readLine()) != null) {
     9             if (isFirstRow) { // 如果是表头,根据表头判断这个表一共有几个字段,并跳过表头的插入
    10                 isFirstRow = false;
    11                 collumNum = line.split(",").length;
    12                 continue;
    13             }
    14             String[] fields = new String[collumNum];
    15             fields = line.split(",");
    16             if (fields.length == 7) { // 判断最后一个字段有没有内容
    17                 User user = new User(); // 封装要添加到数据库的对象
    18                 if (fields[0] == null || fields[0].equals("")) {
    19                     System.out.println("**************此行没有主键,跳过**************");
    20                     continue;
    21                 } else
    22                     user.setId(Integer.parseInt(fields[0]));
    23                 if (fields[1] == null || fields[1].equals(""))
    24                     user.setName(null);
    25                 else
    26                     user.setName(fields[1]);
    27                 if (fields[2] == null || fields[2].equals(""))
    28                     user.setPassword(null);
    29                 else
    30                     user.setPassword(fields[2]);
    31                 if (fields[3] == null || fields[3].equals(""))
    32                     user.setNickName(null);
    33                 else
    34                     user.setNickName(fields[3]);
    35                 if (fields[4] == null || fields[4].equals(""))
    36                     ;
    37                 else
    38                     user.setAge(Integer.parseInt(fields[4]));
    39                 if (fields[5] == null || fields[5].equals(""))
    40                     user.setGender(null);
    41                 else
    42                     user.setGender(fields[5]);
    43                 if (fields[6] == null || fields[6].equals(""))
    44                     user.setAddress(null);
    45                 else
    46                     user.setAddress(fields[6]);
    47                 addToDb(user); // 添加到数据库
    48             } else { // 最后一个字段没有输入内容
    49                 User user = new User(); // 封装要添加到数据库的对象
    50                 if (fields[0] == null || fields[0].equals("")) {
    51                     System.out.println("**************此行没有主键,跳过**************");
    52                     continue;
    53                 } else
    54                     user.setId(Integer.parseInt(fields[0]));
    55                 if (fields[1] == null || fields[1].equals(""))
    56                     user.setName(null);
    57                 else
    58                     user.setName(fields[1]);
    59                 if (fields[2] == null || fields[2].equals(""))
    60                     user.setPassword(null);
    61                 else
    62                     user.setPassword(fields[2]);
    63                 if (fields[3] == null || fields[3].equals(""))
    64                     user.setNickName(null);
    65                 else
    66                     user.setNickName(fields[3]);
    67                 if (fields[4] == null || fields[4].equals(""))
    68                     ;
    69                 else
    70                     user.setAge(Integer.parseInt(fields[4]));
    71                 if (fields[5] == null || fields[5].equals(""))
    72                     user.setGender(null);
    73                 else
    74                     user.setGender(fields[5]);
    75                 addToDb(user); // 添加到数据库
    76             }
    77         }
    78         br.close();
    79         System.out.println("**************录入完毕**************");
    80     }
     1 /**
     2      * 向数据库中添加记录
     3      * 
     4      * @param user
     5      */
     6     private static void addToDb(User user) {
     7         // 判断数据库当中是否存在该条记录
     8         if (isRepeat(user))
     9             return;
    10         Connection conn = null;
    11         PreparedStatement pstmt = null;
    12         try {
    13             conn = DbUtil.getConnection();
    14             String sql = "insert into t_user(dbid, name, pwd, nickName, age, gender, addres) values(?, ?, ?, ?, ?, ?, ?)";
    15             pstmt = conn.prepareStatement(sql);
    16             pstmt.setInt(1, user.getId());
    17             pstmt.setString(2, user.getName());
    18             pstmt.setString(3, user.getPassword());
    19             pstmt.setString(4, user.getNickName());
    20             pstmt.setInt(5, user.getAge());
    21             pstmt.setString(6, user.getGender());
    22             pstmt.setString(7, user.getAddress());
    23             pstmt.execute();
    24         } catch (Exception e) {
    25             e.printStackTrace();
    26         }
    27     }
     1 /**
     2      * 判断数据库中是否有该条记录
     3      * 
     4      * @param user
     5      * @return
     6      */
     7     private static boolean isRepeat(User user) {
     8         ResultSet rs = null;
     9         Connection conn = null;
    10         PreparedStatement pstmt = null;
    11         try {
    12             conn = DbUtil.getConnection();
    13             String sql = "select * from t_user";
    14             pstmt = conn.prepareStatement(sql);
    15             rs = pstmt.executeQuery();
    16             while (rs.next())
    17                 if (rs.getString("dbid").equals(user.getId()))
    18                     return true;
    19         } catch (Exception e) {
    20             e.printStackTrace();
    21         }
    22         return false;
    23     }
    作者:Oven
    个人网站:http://www.cloveaire.com
    个性签名:大亨以正,莫退初心!
    如果觉得这篇文章对你有帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
  • 相关阅读:
    强化学习课程学习(2)——必备数学基础集锦
    强化学习课程学习(1)——深度学习前期回顾
    疑难杂症-使用pandas_profiling查看EDA数据文档遇到的一些坑
    YOLOv3的论文详解
    YOLO2——YOLO9000,Better, Faster, Stronger论文详解
    YOLO——You Only Look Once论文详解
    第十二章-自我总结
    第十一章-CRF的奇妙之处
    nodejs Sequelize CLI Access denied for user 'root'@'localhost' (using password: NO)
    (52)指针 (53)数组的增删改查
  • 原文地址:https://www.cnblogs.com/Oven5217/p/6592965.html
Copyright © 2011-2022 走看看