2014-09-13 72 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);
为您的正确答案。

相关问题