`

用java实现从文本文件批量导入数据至数据库

阅读更多
今天同事让我准备一个项目的测试数据,要向一个表中插入上千条记录,并且保证每条记录内容不同,如果用手工一条一条插入肯定是不可能,也不会有哪个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(url, user, pwd);

            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(path, openFileStyle);

            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();

        }

    }

}
 

运行测试类,得到结果:

 

向数据库插入数据成功!



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jojoy_828/archive/2007/12/01/1911236.aspx
分享到:
评论

相关推荐

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和数据库应用。全书分5篇24章,共计603个实例和603个经验技巧。每个实例都...

    cals:用于批量导入cassandra数据库的工具

    #Cals Cals 是一个从 csv 创建 SSTable 的工具,然后您可以使用 sstableloader 将大数据加载到 Cassandra 数据库。 #特征使用模式和控制文件转换 csv 文件支持timeuuid , bigint , decimal , int , text , ...

    Java通用后台管理系统源码 JAVATYHTXT.rar

    5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅可管理各个功能模块的权限,也可以管理功能模块里的页面按钮权限。 9、报表统计。也可以嵌入其他...

    Hadoop权威指南(中文版)2015上传.rar

    使用导入的数据 导入的数据与Hive 导入大对象 执行导出 深入了解导出 导出与事务 导出和SequenceFile 第16章 实例分析 Hadoop 在Last.fm的应用 Last.fm:社会音乐史上的革命 Hadoop a Last.fm 用Hadoop产生图表 ...

    Hadoop权威指南 第二版(中文版)

     使用导入的数据  导入的数据与Hive  导入大对象  执行导出  深入了解导出  导出与事务  导出和SequenceFile 第16章 实例分析  Hadoop 在Last.fm的应用  Last.fm:社会音乐史上的革命  Hadoop a Last.fm ...

    java web 视频、电子书、源码(李兴华老师出版)

    7.2.2、使用JSP的page指令导入所需要的JavaBean 7.2.3、使用指令 7.3、JavaBean与表单 7.4、设置属性: 7.4.1、设置指定的属性 7.4.2、指定设置属性的参数 7.4.3、为属性设置具体内容 7.5、取得属性: 7.6...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    7.2.2、使用JSP的page指令导入所需要的JavaBean 7.2.3、使用指令 7.3、JavaBean与表单 7.4、设置属性: 7.4.1、设置指定的属性 7.4.2、指定设置属性的参数 7.4.3、为属性设置具体内容 7.5、取得属性: 7.6...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    7.2.2、使用JSP的page指令导入所需要的JavaBean 7.2.3、使用指令 7.3、JavaBean与表单 7.4、设置属性: 7.4.1、设置指定的属性 7.4.2、指定设置属性的参数 7.4.3、为属性设置具体内容 7.5、取得属性: 7.6...

    MySQL5 权威指南第3版中文版_part1

     22.11 mysqlimport程序(文本导入、批量导入)  22.12 mysqlshow程序(查看信息)  22.13 myisamchk程序(修复MyISAM文件)  22.14 myisampack程序(压缩MyISAM文件)  第23章 MySQL API应用指南  23.1 ...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    7.2.2、使用JSP的page指令导入所需要的JavaBean 7.2.3、使用指令 7.3、JavaBean与表单 7.4、设置属性: 7.4.1、设置指定的属性 7.4.2、指定设置属性的参数 7.4.3、为属性设置具体内容 7.5、取得属性: 7.6、...

    最新JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)MyEclipse版本

    5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅可管理各个功能模块的权限,也可以管理功能模块里的页面按钮权限。 9、报表统计。也可以嵌入其他...

    ExtJS 4.2+JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)

    5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅可管理各个功能模块的权限,也可以管理功能模块里的页面按钮权限。 9、报表统计。也可以嵌入其他...

    MySQL 5权威指南(第3版) 中文版 下载地址

     22.11 mysqlimport程序(文本导入、批量导入)  22.12 mysqlshow程序(查看信息)  22.13 myisamchk程序(修复MyISAM文件)  22.14 myisampack程序(压缩MyISAM文件)  第23章 MySQL API应用指南  23.1 ...

    李兴华Java Web开发实战经典(高清版) Part2

    7.2.2、使用JSP的page指令导入所需要的JavaBean 7.2.3、使用指令 7.3、JavaBean与表单 7.4、设置属性: 7.4.1、设置指定的属性 7.4.2、指定设置属性的参数 7.4.3、为属性设置具体内容 7.5、取得属性: 7.6...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    7.2.2、使用JSP的page指令导入所需要的JavaBean 7.2.3、使用指令 7.3、JavaBean与表单 7.4、设置属性: 7.4.1、设置指定的属性 7.4.2、指定设置属性的参数 7.4.3、为属性设置具体内容 7.5、取得属性: 7.6、...

Global site tag (gtag.js) - Google Analytics