2013-03-01 27 views
-5

我的Java代碼:文本表JDBC的HSQLDB例外

conn = DriverManager.getConnection(url, "user", "password"); // line 1 

stm = conn.createStatement(); // line 2 

stm.execute("CREATE TEXT TABLE someTableName("NLID" VARCHAR(20), 
"Scheduled.Primary.Scripting.Code" VARCHAR(20), "Scheduled.Site" VARCHAR(20), 
"Scheduled.Location.Long.Name" VARCHAR(20), 
"primary_key_1644" int PRIMARY KEY)"); // line 3 

stm.execute("SET TABLE someTableName SOURCE 
"/some.csv;ignore_first=true;all_quoted=true;shutdown=true""); // line 4 

的CSV正在被鏈接到HSQLDB是:

NLID,Scheduled.Primary.Scripting.Code,Scheduled.Site,Scheduled.Location.Long.Name,primary_key_1644 
100,INMRSB,Shopping,Shopping General-Banner-728x90-INMRSB-I,1 
100002,MSVT08,MSN Video,msnbc.com-TODAYshow.com Special Sponsorships 8-Streaming Media-300x60-MSVT08-S,2 
100004,MSV10T,MSN Video,msnbc.com-TODAYshow.com Special Sponsorships 10-Streaming Media-300x60-MSV10T-S,3 

我得到下面的異常在第4行:

java.sql.SQLException: bad TEXT table source file - line number: 1196 java.lang.NumberFormatException: For input string: "Body Connection-Banner-728x90-HEAMBA-S" in statement [SET TABLE someTableName SOURCE "/some.csv;ignore_first=true;all_quoted=true;shutdown=true"] at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source) at java.lang.NumberFormatException: For input string: "Body Connection-Banner-728x90-HEAMBA-S" at org.hsqldb.error.Error.error(Unknown Source) at org.hsqldb.TextTable.connect(Unknown Source) at org.hsqldb.TextTable.openCache(Unknown Source) at org.hsqldb.TextTable.setDataSource(Unknown Source) at org.hsqldb.StatementCommand.getResult(Unknown Source) at org.hsqldb.StatementCommand.execute(Unknown Source) at org.hsqldb.Session.executeCompiledStatement(Unknown Source) at org.hsqldb.Session.executeDirectStatement(Unknown Source) at org.hsqldb.Session.execute(Unknown Source) ... 6 more Caused by: java.lang.NumberFormatException: For input string: "Body Connection-Banner-728x90-HEAMBA-S" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at org.hsqldb.rowio.RowInputText.readInteger(Unknown Source) at org.hsqldb.rowio.RowInputBase.readData(Unknown Source) at org.hsqldb.rowio.RowInputText.readData(Unknown Source) at org.hsqldb.rowio.RowInputBase.readData(Unknown Source) at org.hsqldb.rowio.RowInputText.readData(Unknown Source) at org.hsqldb.RowAVLDiskData.getRowData(Unknown Source) at org.hsqldb.persist.RowStoreAVLDiskData.get(Unknown Source) ... 14 more

任何幫助將是可觀的。

EDITED: HSQLDB拋出NumberFormatException的,而讀其被定義爲VARCHAR列!!!

MODIFIED:發生異常是因爲某個列值中有一個逗號,例如"Mind, Body Connection-Banner-728x90-HEAMBA-S"。由於hsqldb將csv作爲表讀取,因此額外的逗號會被hsql解釋爲附加列。任何人都可以指導我如何繞過這個?

+0

很明顯「Body Connection-Banner-728x90-HEAMBA-S」不是一個數字,所以錯誤。 – 2013-03-01 07:23:29

+0

該列被定義爲VARCHAR(20)。 – NINCOMPOOP 2013-03-01 07:23:53

+0

列可能被定義爲varchar,但在您的代碼中的某處,您試圖將其轉換爲數字,並且您不會向我們顯示該代碼:) – 2013-03-01 07:24:51

回答

1

由於OP發現,以下這些簡單的步驟幫助尋找在CSV文件中的問題:

  1. 查看錯誤信息:bad TEXT table source file - line number: 1196行號是CSV文件的行號。使用文本編輯器,轉到該行。行從1開始編號。
  2. ava.lang.NumberFormatException: For input string: "Body Connection-Banner-728x90-HEAMBA-S" note NumberFormatException指示預期的數字,而不是找到報告的字符串。
  3. 幸運的是,表中只有一個數字(INT)列,所以很容易看到CVS中有一個額外的逗號,它會終止最後一個VARCHAR字符串並導致問題。
  4. TEXT表定義包括all_quoted=true,這意味着如果圍繞包含逗號的字符串使用雙引號,則整個字符串將被視爲字段,問題將消失。