从平面文件中获取数据并使用Java将数据插入数据库

时间:2012-02-02 09:08:30

标签: java

我打开关于提取数据的新问题并插入数据库。我更改并修改了代码,但仍然无效。

平面文件:

DT|00000001|TMDWH|UNIFI|00380520160|MAH SIEW YIN|11  |JALAN PP 2/8|TAMAN PUTRA PRIMA|PUCHONG|SELANGOR|47100|MALAYSIA|801110-14-5498||||||VOBB||A||11|JALAN PP 2/8|||TAMAN PUTRA PRIMA

DT|00000002|TMDWH|UNIFI|00322012091|JUNITA BINTI JAMAL|6 10 KONDOMINIUM FAJARIA|JALAN PANTAI BARU|KUALA LUMPUR|KUALA LUMPUR|WILAYAH PERSEKUTUAN|59200|MALAYSIA|800129-09-5078||||||VOBB||A|||JALAN PANTAI BARU|6|KONDOMINIUM FAJARIA|KUALA LUMPUR     

程序:

public void massageData(String tmp) {
    String[] fields = tmp.replace("\"", " ")
                         .replace("\'","\'\'")
                         .trim()
                         .split("\\s*\\|\\s*");

Connection conn = null;
ResultSet rs = null;
PreparedStatement stmt = null;

String actualMSISDN = parseMSISDN(fields[5]);

    if (actualMSISDN.length() > 8) {
        String [] aNo = getAreaCode(actualMSISDN).split("\\|");
        field[0] = getiCtr(parseMSISDN(fields[5]));

        String stateCode = lookupStateCode(State);
        String  sQuery = "insert into DATA_999 ( ,RecordType,RecordNumber,SourceSystemApplicationId,TargetApplicationId,TelNo,Name,HouseNo,StreetName,AppartmentSuite,TownCity,State,PostalCode,Country,NewIC,OldIC,PassportNo,BRN,LatitudeDecimal,LongitudeDecimal,ServiceType,IndicatorType,CreateDate,Filler,Cr_Nl,HouseNo_New,LotNo_New,StreetName_New,AptNo_New,BuildingName_New,LowIDRange,HighIDRange,SectionName) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        try {   
            conn = ds.getConnection();
            stmt = conn.prepareStatement(sQuery);

            int col = 0;
            for (String field : fields) {
                stmt.setString(++col, field); // Note: SQL API is 1-based (not zero-based)
            }

            int dbStat = stmt.executeUpdate();
            conn.close();
        } catch (SQLException s){
            logger.error(s.getMessage());
        }
        finally {
            try {if (stmt != null) stmt.close();} catch (SQLException e) {}
            try {if (conn != null) conn.close();} catch (SQLException e) {}
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您实际上是在尝试在一行中插入两倍的字段数量。你的sql查询似乎也有错误:第一个字段缺席,那里只有一个逗号。

在我看来,你自己也没有做任何事情:你使用人们给你的建议,改变你的代码,如果它不起作用,你就会创建一个新问题。