我打开关于提取数据的新问题并插入数据库。我更改并修改了代码,但仍然无效。
平面文件:
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) {}
}
}
}
答案 0 :(得分:2)
您实际上是在尝试在一行中插入两倍的字段数量。你的sql查询似乎也有错误:第一个字段缺席,那里只有一个逗号。
在我看来,你自己也没有做任何事情:你使用人们给你的建议,改变你的代码,如果它不起作用,你就会创建一个新问题。