0

我正在尝试从数据中解析信息并使用 JDBC 将其插入数据库。但是,尝试这样做时出现java.lang.parseInt(UnknownSource)错误。以下是我整理的代码:

public void testAddStation(String r){   
    long st = System.currentTimeMillis();
    String str = r;
    String row[]= str.split(",");
    Station s = new Station();
    s.setPrimaryID(row[0]);
    s.setSecondaryID(row[1]);
    s.setStationName(row[2]);
    s.setState(row[3]);
    s.setCountry(row[4]);
    s.setLatitude(Double.parseDouble(row[5]));
    s.setLongitude(Double.parseDouble(row[6]));
    s.setElevation(Double.parseDouble(row[7]));
    s.setMesoNetID(row[8]);
    s.setNetworkName(row[9]);
    s.setStatus(row[10]);
    s.setPrimaryProviderId(Integer.parseInt(row[11]));
    s.setPrimaryProvider(row[12]);
    s.setSecondaryProviderId(Integer.parseInt(row[13]));
    s.setSecondaryProvider(row[14]);
    s.setTertiaryProviderId(Integer.parseInt(row[15]));
    s.setTertiaryProvider(row[16]);
    s.setWims_Id(row[17]);
    //System.out.println(s.getStationName());
    //System.out.println(s.getPrimaryID());

    rep.addStation(s);
    N=N+1;
    long et = System.currentTimeMillis();
    System.out.println("total station created: " + N + "\tinsert per row: "+(et - st));
}

以下是我在控制台窗口中收到的错误消息:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at karki.jdbc.repo.Check.testAddStation(Check.java:40)
at karki.jdbc.repo.CSVFile.readCSV(CSVFile.java:36)
at karki.jdbc.repo.CSVFile.listFiles(CSVFile.java:20)
at karki.jdbc.repo.CSVFile.listStationCSV(CSVFile.java:59)
at karki.jdbc.repo.CSVFile.main(CSVFile.java:82)

谁能解释一下我在这里可能做错了什么?

4

2 回答 2

1

您应该检查以确保输入字符串有效,此外,在您的代码中,您需要包括对无效输入数据的检查。异常的相关部分是:java.lang.NumberFormatException: For input string: ""我无法从脚本本身判断,因为我不知道代码中的确切行号,但是下面几行中的 parseInt 调用之一正在接收一个空字符串 ( "")而不是一个有效的数字输入:

s.setPrimaryProviderId(Integer.parseInt(row[11]));
s.setSecondaryProviderId(Integer.parseInt(row[13]));
s.setTertiaryProviderId(Integer.parseInt(row[15]));

你应该包括这样的检查:

if(!"".equals(row[11])){ //If row[11] is not an empty string
    s.setPrimaryProviderId(Integer.parseInt(row[11]));
}
else{
    // Handle the case where this part of the data is empty
}

您还应该在 parseDouble 行中包含这些检查。

于 2013-10-17T01:19:52.727 回答
0

根据异常信息,您的问题可能出现在以下几行之一:

s.setPrimaryProviderId(Integer.parseInt(row[11]));
s.setPrimaryProvider(row[12]);
s.setSecondaryProviderId(Integer.parseInt(row[13]));
s.setSecondaryProvider(row[14]);
s.setTertiaryProviderId(Integer.parseInt(row[15]));
s.setTertiaryProvider(row[16]);

具体来说,其中包含 Integer.parseInt() 代码的那些,因为异常最有可能抱怨 row[11] row[13] 或 row[15] 实际上是一个空字符串“”而不是一个数值。

您可以在设置值之前在那里测试有效的数值,然后在其中放置一些默认的整数值(如果它是非数字的)。

您是否检查了 CSV 文件在您希望解析的所有各个字段中的有效性?

于 2013-10-17T01:19:43.157 回答