2012-08-07 77 views
0

我已經嘗試了所有可以用這個SQLite語句思考的東西。我有下面的代碼,我試圖運行。誰能告訴我爲什麼我的sqlite聲明不起作用?

public ArrayList getData(int i) 
{ 
    data = new ArrayList(); 

    try 
    { 
     Statement stat2; 
     stat2 = conn.createStatement(); 
     System.out.println(i); 
     PreparedStatement prep9 = conn.prepareStatement("SELECT * FROM tbl_INPUT_OBJECTS WHERE cardID = ?;"); 
     prep9.setInt(1, i); 


     ResultSet rs2 = prep9.executeQuery(); 
     while (rs2.next()) 
     { 
      System.out.println(3); 
      IOdevice.get("IOdevice" + (rs2.getInt("id") - (16 * (i - 1)))).setId(rs2.getInt("id") - (16 * (i - 1))); 
      IOdevice.get("IOdevice" + (rs2.getInt("id") - (16 * (i - 1)))).setDescription(rs2.getString("description")); 

      System.out.println(4); 

      System.out.println(rs2.getString("description")); 
      System.out.println(rs2.getInt("id") - (16 * (i - 1))); 
      System.out.println(IOdevice.get("IOdevice" + (rs2.getInt("id") - (16 * (i - 1))))); 
      System.out.println(rs2.getBoolean("state")); 
      System.out.println(rs2.getString("type")); 
      System.out.println("IOdevice" + (rs2.getInt("id") - (16 * (i - 1)))); 

      IOdevice.get("IOdevice" + (rs2.getInt("id") - (16 * (i - 1)))).setState(rs2.getBoolean("state")); 
      IOdevice.get("IOdevice" + (rs2.getInt("id") - (16 * (i - 1)))).setType(rs2.getString("type")); 
     } 

     rs2.close(); 
     stat2.close(); 

     System.out.println(5); 
......etc. 

我的數據庫,我在看是這樣的: DB_ScreenShot

從程序的這一部分我的輸出是:

1 
5 

它應該是:

1 
3 
4 
5 

任何人都可以給我建議,我做錯了什麼?

注意:下面的代碼不工作,所以它不是數據庫本身......(至少我不認爲這是)。

Statement stat; 
     stat = conn.createStatement(); 

     ResultSet rs = stat 
       .executeQuery("SELECT * from tbl_TEST WHERE cardID = " + i 
         + ";"); 
     while (rs.next()) 
     { 
      data.add(rs.getInt("id")); 
      data.add(rs.getString("lblDescriptionProp")); 
      data.add(rs.getString("lblAddressProp")); 
      data.add(IOdevice); 

      for (int j = 1; j <= 32; j++) 
      { 
       IOdevice.get("IOdevice" + j).getDescription(); 
       IOdevice.get("IOdevice" + j).getState(); 
       IOdevice.get("IOdevice" + j).getType(); 
      } 
     } 

     rs.close(); 
     stat.close(); 
+0

如果還有其他東西我可以提供,那麼讓我知道 – Dylan 2012-08-07 12:33:07

+0

是int類型的cardID? – Razvan 2012-08-07 12:36:05

+0

@Razvan不,我沒有指定任何類型,因爲我認爲我早些時候遇到了麻煩(這可能只是嘿,這是工作日結束,所以我要去史詩般的東西雖然失敗) – Dylan 2012-08-07 12:37:45

回答

2

所以它的工作原理?不久前我遇到了同樣的問題,結果表中數據類型在表中被聲明爲CHAR(與NUMERIC等相反)。

這可能會導致一些複雜化,而且一開始可能並不明顯。例如,聲明爲CHAR的列可能有前導或尾隨空格(例如'1'或'1'),這可能會在數據類型轉換過程中產生麻煩。

+0

是的,再次謝謝你! – Dylan 2012-08-07 13:32:31

+0

我可以在SQLite中添加默認列親和性是否爲Numeric,但它會接受任何類型的數據(可能會導致您描述的不明顯類型的問題)。這可能是值得的從NUMERIC改爲INTEGER – James 2012-08-07 13:32:41

+1

@James謝謝你的建議,我會牢記未來,但現在我堅持這樣的說法:「如果它沒有壞掉,不要修復*它「*可能將其擰緊 – Dylan 2012-08-07 14:19:25

相關問題