好学IT学院:IT信息技术分享交流平台
标签:Java  来源:互联网  作者:lzkyo  发布时间:2010-03-16  ★★★加入收藏〗〖手机版
摘要:有一个项目的测试数据,要向一个表中插入上千条记录,并且保证每条记录内容不同,如果用手工一条一条插入肯定是不可能,也不会有哪个SB去做这样的事,我最开始想到了用循环,但要求插入的记录内容不能相同,用循环实现比较麻烦,于是我想到了将记录从文本文件导入至数据库(其实…

有一个项目的测试数据,要向一个表中插入上千条记录,并且保证每条记录内容不同,如果用手工一条一条插入肯定是不可能,也不会有哪个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();
      }
  }
}