Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我无法将resultset的值存储到二维字符串数组中_Java_Mysql - Fatal编程技术网

Java 我无法将resultset的值存储到二维字符串数组中

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

我无法将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 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) } );