Java 我无法将resultset的值存储到二维字符串数组中
我无法将resultset的值转换为字符串[]。它在第13行显示NullPointerException。如果我直接打印rs.getString0和rs.getString1的值,它工作正常Java 我无法将resultset的值存储到二维字符串数组中,java,mysql,Java,Mysql,我无法将resultset的值转换为字符串[]。它在第13行显示NullPointerException。如果我直接打印rs.getString0和rs.getString1的值,它工作正常 public void get_papers(String a_id) { int aid=Integer.parseInt(a_id); String[][] s1=new String[2][]; try { int i=0; Connection c
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]);
}
您在创建数组时没有提到列数。您已经编写了字符串s[][]=新字符串[2][],其中未提及列的大小。因此Java无法在内存中分配数组的大小。因此,无论何时尝试向数组添加元素,它都会显示llpointer异常 解决方案 您可以编写一个查询,如SELECT COUNT*FROM。。。并使用它获取结果集的大小,并使用该大小动态创建数组。 如果您不想运行我上面提到的任何其他查询,您可以选择使用一个ArrayList,其中不必提及大小。唯一需要做的就是创建一个单独的类,如下所示 课例{ 私有字符串data1、data2; 公共字符串getData1{ 返回数据1; } 公共无效SetData1字符串数据1{ this.data1=data1; } //..... } 然后在从结果集获取数据时写入
Example exp = new Example();
exp.setData1(rs.getString(0));
exp.setData2(rs.getString(1));
list.add(exp);
像newstring[2][]这样的数组构造函数调用为您提供一个长度为2的数组,其中两个条目都为null。您应该使用以下选项:
String[][] s1=new String[aid][2];
但是,最好在ArrayList中收集结果
List<String[2]> results = new ArrayList<>();
根据最坏情况的客户估计值分配数组始终是第二个好主意。在数组的声明行,即代替此行字符串[][]s1=新字符串[2][]; 您可以这样声明字符串[][]s1=新字符串[2][10]; 它会很好用的。
只需检查s1[0][i]=Stringrs.getString1;s1[1][i]=Stringrs.getString2;获取正确答案。a\u id似乎是表的唯一标识符主键。如果是这样的话,为什么要迭代唯一的结果集呢?aid可能非常大。不算表中的双倍数,我想只有一个条目匹配a_id=aid。@Hannes我想马上提出列表方法,但我被称为AFK。
results.add( new String[]{ (String)rs.getString(1), (String)rs.getString(2) } );