我无法将结果集的值存储到二维String数组中

时间:2014-09-13 04:32:26

标签: java mysql

我无法将结果集的值输入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]);
             }

3 个答案:

答案 0 :(得分:0)

创建阵列时没有提到列数。您已编写String s[][] = new String[2][],其中未提及列的大小。因此Java无法在内存中分配数组的大小。因此,每当您尝试向阵列添加元素时,它都会显示NullPointer Exception

  1. 您可以编写SELECT COUNT(*) FROM ...之类的查询,并使用它来获取ResultSet的大小,并使用该大小动态创建数组。
  2. 如果您不想运行我上面提到的任何其他查询,您的选择是使用ArrayList,您不必提及大小。您唯一需要做的就是创建一个单独的类,如下所示

    类示例{      private String data1,data2;      public String getData1(){          返回数据1;      }      public void setData1(String data1){          this.data1 = data1;      }      // ..... }

  3. 然后从ResultSet中获取数据时写入

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

答案 1 :(得分:0)

new String[2][]这样的数组构造函数调用为您提供了一个长度为2的数组,其中两个条目都为null。你应该用这个:

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) } );

基于更糟糕的案例估计来分配数组总是第二好的想法。

答案 2 :(得分:0)

在数组的声明行上,即代替此行 String [] [] s1 = new String [2] []; 你可以像这样声明 String [] [] s1 = new String [2] [10];
                                                                                                          它会工作正常。
只需检查 s1 [0] [i] =(String)rs.getString(1); s1 [1] [i] =(String)rs.getString(2);
为了正确答案。