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

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

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

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

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

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

 public static void main(String[] args) throws IOException {
         // 获取要录入的文件
         BufferedReader br = new BufferedReader(new FileReader(new File("C:/Users/Nemo/Desktop/testCSV.csv")));
         // 读取直到最后一行
         String line = "";
         boolean isFirstRow = true; // 判断是不是表头
         int collumNum = 0;
         while ((line = br.readLine()) != null) {
             if (isFirstRow) { // 如果是表头,根据表头判断这个表一共有几个字段,并跳过表头的插入
                 isFirstRow = false;
                 collumNum = line.split(",").length;
                 continue;
             }
             String[] fields = new String[collumNum];
             fields = line.split(",");
             if (fields.length == 7) { // 判断最后一个字段有没有内容
                 User user = new User(); // 封装要添加到数据库的对象
                 if (fields[0] == null || fields[0].equals("")) {
                     System.out.println("**************此行没有主键,跳过**************");
                     continue;
                 } else
                     user.setId(Integer.parseInt(fields[0]));
                 if (fields[1] == null || fields[1].equals(""))
                     user.setName(null);
                 else
                     user.setName(fields[1]);
                 if (fields[2] == null || fields[2].equals(""))
                     user.setPassword(null);
                 else
                     user.setPassword(fields[2]);
                 if (fields[3] == null || fields[3].equals(""))
                     user.setNickName(null);
                 else
                     user.setNickName(fields[3]);
                 if (fields[4] == null || fields[4].equals(""))
                     ;
                 else
                     user.setAge(Integer.parseInt(fields[4]));
                 if (fields[5] == null || fields[5].equals(""))
                     user.setGender(null);
                 else
                     user.setGender(fields[5]);
                 if (fields[6] == null || fields[6].equals(""))
                     user.setAddress(null);
                 else
                     user.setAddress(fields[6]);
                 addToDb(user); // 添加到数据库
             } else { // 最后一个字段没有输入内容
                 User user = new User(); // 封装要添加到数据库的对象
                 if (fields[0] == null || fields[0].equals("")) {
                     System.out.println("**************此行没有主键,跳过**************");
                     continue;
                 } else
                     user.setId(Integer.parseInt(fields[0]));
                 if (fields[1] == null || fields[1].equals(""))
                     user.setName(null);
                 else
                     user.setName(fields[1]);
                 if (fields[2] == null || fields[2].equals(""))
                     user.setPassword(null);
                 else
                     user.setPassword(fields[2]);
                 if (fields[3] == null || fields[3].equals(""))
                     user.setNickName(null);
                 else
                     user.setNickName(fields[3]);
                 if (fields[4] == null || fields[4].equals(""))
                     ;
                 else
                     user.setAge(Integer.parseInt(fields[4]));
                 if (fields[5] == null || fields[5].equals(""))
                     user.setGender(null);
                 else
                     user.setGender(fields[5]);
                 addToDb(user); // 添加到数据库
             }
         }
         br.close();
         System.out.println("**************录入完毕**************");
     }
 /**
      * 向数据库中添加记录
      *
      * @param user
      */
     private static void addToDb(User user) {
         // 判断数据库当中是否存在该条记录
         if (isRepeat(user))
             return;
         Connection conn = null;
         PreparedStatement pstmt = null;
         try {
             conn = DbUtil.getConnection();
             String sql = "insert into t_user(dbid, name, pwd, nickName, age, gender, addres) values(?, ?, ?, ?, ?, ?, ?)";
             pstmt = conn.prepareStatement(sql);
             pstmt.setInt(1, user.getId());
             pstmt.setString(2, user.getName());
             pstmt.setString(3, user.getPassword());
             pstmt.setString(4, user.getNickName());
             pstmt.setInt(5, user.getAge());
             pstmt.setString(6, user.getGender());
             pstmt.setString(7, user.getAddress());
             pstmt.execute();
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 /**
      * 判断数据库中是否有该条记录
      *
      * @param user
      * @return
      */
     private static boolean isRepeat(User user) {
         ResultSet rs = null;
         Connection conn = null;
         PreparedStatement pstmt = null;
         try {
             conn = DbUtil.getConnection();
             String sql = "select * from t_user";
             pstmt = conn.prepareStatement(sql);
             rs = pstmt.executeQuery();
             while (rs.next())
                 if (rs.getString("dbid").equals(user.getId()))
                     return true;
         } catch (Exception e) {
             e.printStackTrace();
         }
         return false;
     }

导入csv文件到数据库的更多相关文章

  1. Oracle数据库导入csv文件(sqlldr命令行)

    1.说明 Oracle数据库导入csv文件, 当csv文件较小时, 可以使用数据库管理工具, 比如DBevaer导入到数据库, 当csv文件很大时, 可以使用Oracle提供的sqlldr命令行工具, ...

  2. 将文件夹下的所有csv文件存入数据库

    # 股票的多因子分层回测代码实现 import os import pymysql # import datetime, time # from config import * database_ta ...

  3. ACCESS导入CSV文件出现乱码解决办法

    在ACCESS或Excel中导入CSV文件时常常出现乱码,这是因为简体中文版的windows操作系统及其应用软件默认都是ANSI/GBK编码,而导入的文件使用的编码与操作系统默认的编码不相符.出现这种 ...

  4. C# 将List中的数据导入csv文件中

    //http://www.cnblogs.com/mingmingruyuedlut/archive/2013/01/20/2849906.html C# 将List中的数据导入csv文件中   将数 ...

  5. 利用kettle组件导入excel文件到数据库

    利用kettle组件导入excel文件到数据库 1.     实现目标 把excel文件内容导入到目标表中:然后用java调用kettle的转换.excel文件的内容仅仅有两列,示比例如以下: wat ...

  6. oracle导入csv文件

    oracle导入csv文件: 1.建好对应的表和字段: 2.新建test.ctl文件,用记事本编辑写入: load data infile 'e:\TB_KC_SERV.csv' --修改对应的文件路 ...

  7. python导入csv文件时,出现SyntaxError

    背景 np.loadtxt()用于从文本加载数据. 文本文件中的每一行必须含有相同的数据. *** loadtxt(fname, dtype=<class 'float'>, commen ...

  8. R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等

    ################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方 ...

  9. python导入csv文件出现SyntaxError问题分析

    python导入csv文件出现SyntaxError问题分析 先简单描述下碰到的题目,要求是写出2个print的结果 可以看到,a指向了一个列表list对象,在Python中,这样的赋值语句,其实内部 ...

随机推荐

  1. 【转】AS3操作XML,增加、删除、修改

    var i:Number=0;//用于下面循环 var webcontent:String="Sontin's Blog <b>Welcome to 终吾一生</b> ...

  2. XML查询

    XPath是XML的查询语言,其内容相当复杂.可以查阅www.w3.org/TR/xpath. 下面以一个实例简单了解一线XPath的查询方法: public partial class Form1 ...

  3. RabbitMQ-从基础到实战(6)— 与Spring集成

    0.目录 RabbitMQ-从基础到实战(1)- Hello RabbitMQ RabbitMQ-从基础到实战(2)- 防止消息丢失 RabbitMQ-从基础到实战(3)- 消息的交换(上) Rabb ...

  4. Centos7部署Zabbix

    转载于http://www.cnblogs.com/xqzt/p/5124894.html,更正了部分错误,并增加了个别问题处理办法. 一.Zabbix简介 zabbix是一个基于WEB界面的提供分布 ...

  5. Spring事务管理的实现方式:编程式事务与声明式事务

    1.上篇文章讲解了Spring事务的传播级别与隔离级别,以及分布式事务的简单配置,点击回看上篇文章 2.编程式事务:编码方式实现事务管理(代码演示为JDBC事务管理) Spring实现编程式事务,依赖 ...

  6. Angular.js学习笔记 (一)

    - angular中最重要的概念是指令(directive)- ng-model 是双向数据绑定的指令,效果就是将当前元素的value属性和模型中的[user.name]建立绑定关系### 模块(Mo ...

  7. Java将一个目录下的所有数据复制到另一个目录下

    /* 将"C:\\JavaProducts\\Source"下的所有数据复制到"C:\\Target"下 */ import java.io.*; public ...

  8. 使用swagger实现web api在线接口文档

    一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...

  9. metools,不花一分钱就能拥有自己的工具站点?

    需要[加密/解密][编码/解码][生成二维码]的时候不用再进百度点广告~ 也不需要去收藏夹找网址~ 我的目的大概就是如此. 项目地址:https://github.com/yimogit/metool ...

  10. Java NIO之通道

    一.前言 前面学习了缓冲区的相关知识点,接下来学习通道. 二.通道 2.1 层次结构图 对于通道的类层次结构如下图所示. 其中,Channel是所有类的父类,其定义了通道的基本操作.从 Channel ...