今天同事让我准备一个项目的测试数据,要向一个表中插入上千条记录,并且保证每条记录内容不同,如果用手工一条一条插入肯定是不可能,也不会有哪个SB去做这样的事,我最开始想到了用循环,但要求插入的记录内容不能相同,用循环实现比较麻烦,于是我想到了将记录从文本文件导入至数据库(其实SQLServer可利用sql语句实现导入xls或txt文件,在这就不具体说明了),写个简单的具有解析文本文件并将解析结果插入数据库的类,实现批量插入记录的功能。

1、将数据按一定规律录入到一个文本文件,每一行代表一条记录。

下面是数据库建表SQL:
CREATE TABLE t_FltPsgInfo  -- 航班乘客信息

(

FltNum  VARCHAR(10), -- 航班号

FltLine  VARCHAR(30),  -- 航线

FltDate  VARCHAR(10),  -- 日期

PsgName  VARCHAR(30),  -- 姓名

PsgType  VARCHAR(30), -- 乘客类型,数字表示,目前是1-13

PsgSex  VARCHAR(1),  -- 0 男  1 女

PsgCab  VARCHAR(1),  -- 几等舱, F/Y  舱位按字母顺序排列

PsgSeatNo  VARCHAR(5),-- 座位号 2A,22F,根据这个得到一排有多少个座位,共有多少排座位信息

PsgInfo  VARCHAR(2048) -- 详细信息,可能很长

)

我们将向表t_FltPsgInfo中插入1000条记录。

新建一个文本文件,每一行代表一条记录,如:

HU7804,广州-北京,2007-07-18,谢丽珍,3,1,C,3A,服务保障信息:未用餐随行人员…

其中以“,”作为字段的分隔标志,我们在解析这个文本文件时将根据“,”来拆分字段值。

按照上面的格式,将要插入的数据输入到文本文件中,注意,是每一行代表一条记录,或者你已有从数据库导出的文本文件,那你就只需找到文件的规律,稍作调整就行了。

2、编写Java源码

1》数据库操作类InsertDB.java

package test;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class InsertDB {

private static final String user = "sa";

private static final String pwd = "sa";

private static final String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=hhfly";

private static final String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

public static Connection getCon() {

Connection con = null;

try {

Class.forName(driver).newInstance();

con = DriverManager.getConnection(urluserpwd);

if (con != null) {

System.out.println("你已连接到数据库:" + con.getCatalog());

}

catch (Exception e) {

System.out.println("连接数据库失败!");

e.printStackTrace();

}

return con;

}

public boolean insertDB(String FltNum, String FltLine, String FltDate,

String PsgName, String PsgType, String PsgSex, String PsgCab,

String PsgSeatNo, String PsgInfo) {

Connection con = null;

Statement stm = null;

boolean flag = false;

String sql = "insert into t_FltPsgInfo values('" + FltNum + "','"

+ FltLine + "','" + FltDate + "','" + PsgName + "','" + PsgType

+ "','" + PsgSex + "','" + PsgCab + "','" + PsgSeatNo + "','"

+ PsgInfo + "')";

try {

con = getCon();

stm = con.createStatement();

int i = stm.executeUpdate(sql);

if (i > 0) {

flag = true;

System.out.println(flag + "插入数据成功!");

}

catch (Exception e) {

flag = false;

e.printStackTrace();

finally {

close(null, stm, con);

}

return flag;

}

//关闭相关连接

public void close(ResultSet rs, Statement stm, Connection con) {

if (rs != null)

try {

rs.close();

catch (Exception e) {

e.printStackTrace();

}

if (stm != null)

try {

stm.close();

catch (Exception e) {

e.printStackTrace();

}

if (con != null)

try {

con.close();

catch (Exception e) {

e.printStackTrace();

}

}

}

2》数据采集类DataGather.java

package test;

import java.io.RandomAccessFile;

import java.io.UnsupportedEncodingException;

public class DataGather {

private static final String path = "src/resource/test";

public static final String openFileStyle = "r";

public static final String fieldLimitChar = ",";

public static final int fieldAllCount = 9;

private int count;

private String FltNum;

private String FltLine;

private String FltDate;

private String PsgName;

private String PsgType;

private String PsgSex;

private String PsgCab;

private String PsgSeatNo;

private String PsgInfo;

/*

* 功能:解析文本文件

*/

public void loadFile() {

try {

RandomAccessFile raf = new RandomAccessFile(pathopenFileStyle);

String line_record = raf.readLine();

while (line_record != null) {

// 解析每一条记录

parseRecord(line_record);

line_record = raf.readLine();

}

System.out.println("共有合法的记录" + count + "条");

catch (Exception e) {

e.printStackTrace();

}

}

/*

* 功能:具体解析每一条记录,这里可以增加很多对记录的解析判断条件,如是否为字母、

* 数字、email等。

*/

private void parseRecord(String line_record) throws Exception {

//拆分记录

String[] fields = line_record.split(fieldLimitChar);

if (fields.length == fieldAllCount) {

FltNum = tranStr(fields[0]);

FltLine = tranStr(fields[1]);

FltDate = tranStr(fields[2]);

PsgName = tranStr(fields[3]);

PsgType = tranStr(fields[4]);

PsgSex = tranStr(fields[5]);

PsgCab = tranStr(fields[6]);

PsgSeatNo = tranStr(fields[7]);

PsgInfo = tranStr(fields[8]);

System.out.println(FltNum + " " + FltLine + " " + FltDate + " "

+ PsgName + " " + PsgType + " " + PsgSex + " " + PsgCab

+ " " + PsgSeatNo + " " + PsgInfo);

InsertDB db = new InsertDB();

db.insertDB(FltNum, FltLine, FltDate, PsgName, PsgType, PsgSex,

PsgCab, PsgSeatNo, PsgInfo);

count++;

}

}

private String tranStr(String oldstr) {

String newstr = "";

try {

newstr = new String(oldstr.getBytes("ISO-8859-1"), "GBK");

catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return newstr;

}

}

3》测试类Test.java

package test;

public class Test {

public static void main(String[] args) {

try {

DataGather gather = new DataGather ();

gather.loadFile();

catch (Exception e) {

e.printStackTrace();

}

}

}

运行测试类,得到结果:

向数据库插入数据成功!

用java实现从txt文本文件批量导入数据至数据库相关推荐

  1. java使用POI实现Excel批量导入数据。

    1.背景 项目中有使用easypoi,处理常规excel问题,但是现在有个需求,需要动态生成导出的报表字段.同时,根据导入的excel,增加数据信息.(有可能会出现,导入的报表是几天前下载的,不会最新 ...

  2. django通过openpyxl操作excel文件,实现批量导入数据到数据库。

    1.在一些场景中经常需要管理员批量导入数据,先将数据写到excel表格中,再上传到系统上,最后将excel中的数据批量导入到系统的数据库中. 1.1.test.xlsx文件数据格式 首行的名字:必须是 ...

  3. 如何使用excel批量导入数据到数据库?看这一篇就够了!超详细

    应用场景 当我们遇到要批量新增数据库条数的时候 1.你可以写一个接口去用excel去导入,可以自动化,但是前提是你知道你要新增的表和流程才可以 2.可以用excel直接进行数据库导入 excel导入数 ...

  4. 批量导入数据到mssql数据库的

    概述 批量导入数据到数据库中,我们有好几种方式. 从一个数据表里生成数据脚本,到另一个数据库里执行脚本 从EXCEL里导入数据 上面两种方式,导入的数据都会生成大量的日志.如果批量导入5W条数据到数据 ...

  5. Spring Boot 实现excel 批量导入数据(模板下载 ->数据导入->导入失败表格下载)

    批量导入数据以用户为例[不贴数据库操作代码,都是简单的插入和查询操作自己写] 1 导入依赖 2 批量导入模板下载 3 批量导入数据 准备工作 实现代码 测试接口 4 下载导入失败表格 5 实体类 6 ...

  6. 【转帖】Java实现Excel批量导入数据

    这篇文章主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Excel的批量导入是很常见的功能,这里采用Jxl实现,数 ...

  7. tp5大数据批量导入mysql_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作

    LOAD DATA INFILE 语句用法 参考手册 本文语句参数使用默认值 PHP: TP框架环境// 定义文件路径 $file_path = 'LOAD_DATA_LOCAL_INFILE.txt ...

  8. tp5 excel 导入 mysql_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作

    LOAD DATA INFILE 语句用法 参考手册 本文语句参数使用默认值 PHP: TP框架环境// 定义文件路径 $file_path = 'LOAD_DATA_LOCAL_INFILE.txt ...

  9. 使用python向Redis批量导入数据

    1.使用pipeline进行批量导入数据.包含先使用rpush插入数据,然后使用expire改动过期时间 class Redis_Handler(Handler):def connect(self): ...

最新文章

  1. TensorFlow(6)神经网络训练(DNN)
  2. 什么是生存分析(survival analysis)?
  3. 浏览器访问网页过程中发生了什么?(转)
  4. jquery之stop()的用法
  5. 微服务和其他常见架构
  6. SAP Spartacus Cart UI 修改 quantity 字段后的 Patch 请求遇到 400 错误 - IllegalArgumentError
  7. Postman|Qt笔记-解决Could not get any response
  8. 日记背景 android,只是意外 - 用这些 APP 来记录生活,再也不用担心无法坚持写日记 - Android 应用 - 【最美应用】...
  9. iOS CoreData简单入门 - Swift版
  10. 使用Prometheus+grafana打造高逼格监控平台
  11. mysql调试问题_mysql 数据库调试分析
  12. mfc 子窗体 按钮不触发_PIE二次开发在子窗体中选择主窗体中的文件
  13. linux oracle 分号引起大错误
  14. 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例38
  15. 软考中级软件设计师--13.数据结构与算法
  16. 做网站用企业网站模板好不好
  17. java ajax教程_(转)JAVA AJAX教程第三章—AJAX详细讲解
  18. RISC-V MCU+病房系统
  19. 网站首页导航栏移入移出动画(一)slideDown、slideUp
  20. https证书申请流程和简介

热门文章

  1. 洛谷P1359 租用游艇
  2. 在线答题系统的技术原理介绍
  3. 游戏模块分析总结(4)之系统篇
  4. ddk for win7
  5. NOIP历年第二轮入门组真题集合
  6. 【解决方法】屏幕滚动时文字短暂变蓝
  7. Android Studio实现数独小游戏,休闲益智
  8. 漫谈:一个工作两年半的程序员的人生感悟
  9. iOS开发人员必看的精品资料(100个)——下载目录
  10. 【热门收藏】iOS开发人员必看的精品资料(100个) ...