导入csv文件到数据库
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文件到数据库的更多相关文章
- Oracle数据库导入csv文件(sqlldr命令行)
1.说明 Oracle数据库导入csv文件, 当csv文件较小时, 可以使用数据库管理工具, 比如DBevaer导入到数据库, 当csv文件很大时, 可以使用Oracle提供的sqlldr命令行工具, ...
- 将文件夹下的所有csv文件存入数据库
# 股票的多因子分层回测代码实现 import os import pymysql # import datetime, time # from config import * database_ta ...
- ACCESS导入CSV文件出现乱码解决办法
在ACCESS或Excel中导入CSV文件时常常出现乱码,这是因为简体中文版的windows操作系统及其应用软件默认都是ANSI/GBK编码,而导入的文件使用的编码与操作系统默认的编码不相符.出现这种 ...
- C# 将List中的数据导入csv文件中
//http://www.cnblogs.com/mingmingruyuedlut/archive/2013/01/20/2849906.html C# 将List中的数据导入csv文件中 将数 ...
- 利用kettle组件导入excel文件到数据库
利用kettle组件导入excel文件到数据库 1. 实现目标 把excel文件内容导入到目标表中:然后用java调用kettle的转换.excel文件的内容仅仅有两列,示比例如以下: wat ...
- oracle导入csv文件
oracle导入csv文件: 1.建好对应的表和字段: 2.新建test.ctl文件,用记事本编辑写入: load data infile 'e:\TB_KC_SERV.csv' --修改对应的文件路 ...
- python导入csv文件时,出现SyntaxError
背景 np.loadtxt()用于从文本加载数据. 文本文件中的每一行必须含有相同的数据. *** loadtxt(fname, dtype=<class 'float'>, commen ...
- R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等
################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方 ...
- python导入csv文件出现SyntaxError问题分析
python导入csv文件出现SyntaxError问题分析 先简单描述下碰到的题目,要求是写出2个print的结果 可以看到,a指向了一个列表list对象,在Python中,这样的赋值语句,其实内部 ...
随机推荐
- Oracle子查询中any、some、all之间的区别
用some,any和all对子查询中返回的多行结果进行处理. 下面我们来简单介一下这几个关键词的含义. * Some在此表示满足其中一个的意义,是用or串起来的比较从句. * Any也表示满足其中一个 ...
- 【转】windows浏览共享切换用户登录的方法
1.打开 “我的电脑” 单击 菜单栏“工具”,选择“映射网络驱动器” ,单击“使用其他用户名”,在弹出的对话框之中输入用户名.密码2.遇到提示“您已经建立连接,不能重复连接”类似信息的时候,在开始-运 ...
- Java中执行shell笔记
在java中执行shell有好几种方式:第一种(exec)方式一 public static synchronized void runshell2() { File superuser = n ...
- .NET Core 2.0及.NET Standard 2.0
.NET Core 2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布. .NET Core 2.0正式版本发布时间大约在Q ...
- __init__.py
python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的 ...
- 第一个SignalR案例
说明:开发的案例为Hub(集线器) 一.开发环境 VS2013 ,window10 二.步骤 打开vs创建一个新的解决方案,添加一个空的WebForm项目. 使用NuGet添加引用.命令:PM> ...
- SQL Server 跨库复制表方法小笔记
insert into tableA (column1,column2.....) SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=127. ...
- 对Qt下对话服务器客户端的总结(MyTcpServer与MyTcpClient)
在汇文培训老师给讲了这个例子.讲的挺好的 Qt编写聊天服务器与客户端主要用到下面两个类: QTcpSocket --- 处理连接的 QTcpServer --- 处理服务器,对接入进行响应,创建每个链 ...
- 使用Java注解来简化你的代码
注解(Annotation)就是一种标签,可以插入到源代码中,我们的编译器可以对他们进行逻辑判断,或者我们可以自己写一个工具方法来读取我们源代码中的注解信息,从而实现某种操作.需要申明一点, ...
- Jquery Validation 验证控件的使用说明
转载自:http://blog.csdn.net/huang100qi/article/details/52453970,做了一些简化及修改 下载地址:https://jqueryvalidation ...