2014-09-13 62 views
0

我無法將結果集的值存入String [] []中。它示出了在線路13.如果NullPointerExceptions的我直接打印rs.getString(0)和rs.getString的值(1),它正常我無法將結果集的值存儲到二維字符串數組中

public void get_papers(String a_id) 
{ 
int aid=Integer.parseInt(a_id); 
String[][] s1=new String[2][]; 
    try 
     { 
     int i=0; 
     Connection con=DriverManager.getConnection(url,"root",""); 
     Statement s=con.createStatement(); 
     ResultSet rs=s.executeQuery("select title,p_s_no from paper_record where     a_id='"+aid+"'"); 
      while(rs.next()) 
      { 
      s1[0][i]=(String)rs.getString(1); 
       s1[1][i]=(String)rs.getString(2); 
       i++; 
      } 

      } 
      catch(SQLException se) 
      {System.out.println(se);} 
       //return(s1); 
       System.out.println(s1[0][1]); 
      System.out.println(s1[1][1]); 
      } 
+0

'a_id'似乎是表格的唯一標識符(主鍵)。如果是這樣,爲什麼你迭代(唯一的)結果集? – Hannes 2014-09-13 05:25:47

回答

0

創建陣列時,您沒有提到的列數。您已寫入String s[][] = new String[2][],其中未提及列的大小。所以Java不能在內存中分配數組的大小。因此,當你試圖將元素添加到陣列它顯示NullPointer Exception
SOLUTION

  1. 你可以寫一個QUER像SELECT COUNT(*) FROM ...,並用它來獲取結果集的大小,並使用該大小來動態創建陣列。
  2. 如果您不想運行上面提到的任何其他查詢,您的選擇是使用ArrayList,您不必提及大小。唯一需要做的就是創建一個如下所示的分類:

    class示例{ private String data1,data2; public String getData1(){ return data1; } public void setData1(String data1){ this.data1 = data1; } // ..... }

然後一邊從ResultSet中獲取數據寫

Example exp = new Example(); 
exp.setData1(rs.getString(0)); 
exp.setData2(rs.getString(1)); 
list.add(exp); 
0

new String[2][]數組構造函數調用給你長2其中兩個條目的數組爲空。你應該這樣做:

String[][] s1=new String[aid][2]; 

然而,這將是可取的收集結果在一個ArrayList

List<String[2]> results = new ArrayList<>(); 

,並添加類似這樣的結果:

results.add(new String[]{ (String)rs.getString(1), (String)rs.getString(2) }); 

分配陣列基於更糟個案猜測總是第二好的想法。

+0

'aid'可能非常大。而且不計算表中的雙重音符,我想只有一個條目匹配'where a_id = aid'。 – Hannes 2014-09-13 05:29:11

+0

@Hannes我想立即提出List方法,但我被稱爲AFK。 – laune 2014-09-13 05:50:28

0

在數組的聲明行上,即代替這一行String [] [] s1 = new String [2] []; 你可以做這樣的聲明String [] [] s1 = new String [2] [10];
它會正常工作。
只需檢查s1 [0] [i] =(String)rs.getString(1);              [s] [1] [i] =(String)rs.getString(2);
爲您的正確答案。

相關問題