导入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 }