我无法将结果集的值存储到二维字符串数组中
我无法将结果集的值存入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]);
}
创建阵列时,您没有提到的列数。您已写入String s[][] = new String[2][]
,其中未提及列的大小。所以Java不能在内存中分配数组的大小。因此,当你试图将元素添加到阵列它显示NullPointer Exception
SOLUTION
- 你可以写一个QUER像
SELECT COUNT(*) FROM ...
,并用它来获取结果集的大小,并使用该大小来动态创建阵列。 -
如果您不想运行上面提到的任何其他查询,您的选择是使用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);
像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) });
分配阵列基于更糟个案猜测总是第二好的想法。
在数组的声明行上,即代替这一行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);
为您的正确答案。
'a_id'似乎是表格的唯一标识符(主键)。如果是这样,为什么你迭代(唯一的)结果集? – Hannes 2014-09-13 05:25:47