我无法将结果集的值输入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 :(得分:0)
创建阵列时没有提到列数。您已编写String s[][] = new String[2][]
,其中未提及列的大小。因此Java无法在内存中分配数组的大小。因此,每当您尝试向阵列添加元素时,它都会显示NullPointer Exception
的解强>
SELECT COUNT(*) FROM ...
之类的查询,并使用它来获取ResultSet的大小,并使用该大小动态创建数组。如果您不想运行我上面提到的任何其他查询,您的选择是使用ArrayList,您不必提及大小。您唯一需要做的就是创建一个单独的类,如下所示
类示例{ private String data1,data2; public String getData1(){ 返回数据1; } 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);
答案 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);
为了正确答案。