Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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 循环以从数据库表中获取无限ArrayList/List_Java_Arraylist - Fatal编程技术网

Java 循环以从数据库表中获取无限ArrayList/List

Java 循环以从数据库表中获取无限ArrayList/List,java,arraylist,Java,Arraylist,我使用以下代码从数据库表创建ArrayList,并将其拆分为3个单独的ArrayList: table = conn.createStatement(); String sql = "select * from tab1"; ResultSet rs = table.executeQuery(sql); int columns = rs.getMetaData().getColumnCount(); ArrayList<String> tem

我使用以下代码从数据库表创建ArrayList,并将其拆分为3个单独的ArrayList:

    table = conn.createStatement();
    String sql = "select * from tab1";
    ResultSet rs = table.executeQuery(sql);
    int columns = rs.getMetaData().getColumnCount();

    ArrayList<String> tempTable = new ArrayList<String>();
    while(rs.next())
    {
        int i = 1;
        while(i<=columns)
        {
            tempTable.add(rs.getString(i++));
        }
    }
    ArrayList<String> tempTable1 = new ArrayList<String>(tempTabe.subList(0, 9));
    String tableonLine = tempTable1.toString().replaceAll("[^a-zA-Z0-9\\-:.,]", " ");
    System.out.println("Sublist 1: "+tableonLine);

    ArrayList<String> tempTable2 = new ArrayList<String>(tempTable.subList(9, 18));
    String tableoneLine2 = tempTable2.toString().replaceAll("[^a-zA-Z0-9\\-:.,]", " ");
    System.out.println("Sublist 2: "+tableoneLine2);

    ArrayList<String> tempTable3 = new ArrayList<String>(tempTable.subList(18, 27));
    String tableoneLine3 = tempTable3.toString().replaceAll("[^a-zA-Z0-9\\-:.,]", " ");
    System.out.println("Sublist 3: "+tableoneLine3);
table=conn.createStatement();
String sql=“从表1中选择*”;
ResultSet rs=table.executeQuery(sql);
int columns=rs.getMetaData().getColumnCount();
ArrayList tentable=新的ArrayList();
while(rs.next())
{
int i=1;

而(i您可能需要一个列表:

List<List<String>> rows = new ArrayList<List<String>>();
List rows=new ArrayList();
行外部列表中的每个元素,内部列表中的每个元素都是一个值。那么您的循环如下所示:

while(rs.next() {
  List<String> row = new ArrayList<String>();
  int i=1;
  while (i<=columns) {
    row.add(rs.getString(i);
  }
  rows.add(row);
}
while(rs.next(){
列表行=新的ArrayList();
int i=1;

而(i您可能需要一个列表:

List<List<String>> rows = new ArrayList<List<String>>();
List rows=new ArrayList();
行外部列表中的每个元素,内部列表中的每个元素都是一个值。那么您的循环如下所示:

while(rs.next() {
  List<String> row = new ArrayList<String>();
  int i=1;
  while (i<=columns) {
    row.add(rs.getString(i);
  }
  rows.add(row);
}
while(rs.next(){
列表行=新的ArrayList();
int i=1;

而(i您可能需要一个列表:

List<List<String>> rows = new ArrayList<List<String>>();
List rows=new ArrayList();
行外部列表中的每个元素,内部列表中的每个元素都是一个值。那么您的循环如下所示:

while(rs.next() {
  List<String> row = new ArrayList<String>();
  int i=1;
  while (i<=columns) {
    row.add(rs.getString(i);
  }
  rows.add(row);
}
while(rs.next(){
列表行=新的ArrayList();
int i=1;

而(i您可能需要一个列表:

List<List<String>> rows = new ArrayList<List<String>>();
List rows=new ArrayList();
行外部列表中的每个元素,内部列表中的每个元素都是一个值。那么您的循环如下所示:

while(rs.next() {
  List<String> row = new ArrayList<String>();
  int i=1;
  while (i<=columns) {
    row.add(rs.getString(i);
  }
  rows.add(row);
}
while(rs.next(){
列表行=新的ArrayList();
int i=1;

而(我我想你真正想要的是一个固定长度的
字符串[]
您将
结果集读入的数组。您知道数据的宽度-它是从
列中的SQL查询返回的。但是您希望它可以按您喜欢的行数运行,对吗?您可以使用
数组列表来实现这一点,只需不断添加成员。对于成员本身,它们可以被修复宽度(在您的例子中是9)数组

因此-更改处理每行的代码:

//Note - changed temp table to a List of String[] members,
//replacing one long list of Strings.
ArrayList<String[]> tempTable = new ArrayList<String[]>();

//Turn each row into a String[] and then add it to the list
while(rs.next())
{
    int i = 1; 
    String[] rowData = new String[columns];
    while(i<=columns)
    {
        rowData[i] = rs.getString(i++);
    }
    tempTable.add(rowData);
}
现在,您在
outArr
中获得了所需的二维字符串数组


注意如果数据具有可变宽度的行,则需要使用
List
List
方法。原理是一样的-这只是意味着您的代码将结果放入2D字符串数组更加困难,因为您必须找到最大宽度的行来标注
字符串[][]
。处理SQL查询时不需要此选项

最后一点注意你的方法很好-如果有点难读懂。如果你热衷于用这种方式做事-你可以如下生成你的子列表(逐个替换代码)不过,这是一种有点复杂的做事方式。我还根据注释将其填充到
outArr
2D数组中,这似乎是满足需求的关键

// get the dimensions of your 2D array from your tempTable size
// which will be columns * rows long
String[][] outArr = new String[tempTable.size()/columns][columns]

for (int subStart = 0; subStart < tempTable.size(); subStart += columns)
{
    ArrayList<String> tempTable1 = new ArrayList<String>(
                                     tempTable.subList(subStart, subStart+columns));
    int rownum = subStart / columns;

    // each "tempTable1" represents a row in the table - write
    // this element by element to your 2D String array.
    for (int i = 0; i < columns; i++)
    {
        outArr[rownum][i] = tempTable1.get(i);
    }

    String tableonLine = tempTable1.toString().replaceAll("[^a-zA-Z0-9\\-:.,]", " ");

    System.out.println("Sublist "+ rownum + ": "+tableonLine);
}
//从诱人的尺寸中获取2D数组的尺寸
//这将是列*行的长度
String[][]outArr=新字符串[tentable.size()/columns][columns]
for(int subStart=0;subStart
我想你真正想要的是一个固定长度的
字符串[]
您将
结果集读入的数组。您知道数据的宽度-它是从
列中的SQL查询返回的。但是您希望它可以按您喜欢的行数运行,对吗?您可以使用
数组列表来实现这一点,只需不断添加成员。对于成员本身,它们可以被修复宽度(在您的例子中是9)数组

因此-更改处理每行的代码:

//Note - changed temp table to a List of String[] members,
//replacing one long list of Strings.
ArrayList<String[]> tempTable = new ArrayList<String[]>();

//Turn each row into a String[] and then add it to the list
while(rs.next())
{
    int i = 1; 
    String[] rowData = new String[columns];
    while(i<=columns)
    {
        rowData[i] = rs.getString(i++);
    }
    tempTable.add(rowData);
}
现在,您在
outArr
中获得了所需的二维字符串数组


注意如果数据具有可变宽度的行,则需要使用
List
List
方法。原理是一样的-这只是意味着您的代码将结果放入2D字符串数组更加困难,因为您必须找到最大宽度的行来标注
字符串[][]
。处理SQL查询时不需要此选项

最后一点注意你的方法很好-如果有点难读懂。如果你热衷于用这种方式做事-你可以如下生成你的子列表(逐个替换代码)不过,这是一种有点复杂的做事方式。我还根据注释将其填充到
outArr
2D数组中,这似乎是满足需求的关键

// get the dimensions of your 2D array from your tempTable size
// which will be columns * rows long
String[][] outArr = new String[tempTable.size()/columns][columns]

for (int subStart = 0; subStart < tempTable.size(); subStart += columns)
{
    ArrayList<String> tempTable1 = new ArrayList<String>(
                                     tempTable.subList(subStart, subStart+columns));
    int rownum = subStart / columns;

    // each "tempTable1" represents a row in the table - write
    // this element by element to your 2D String array.
    for (int i = 0; i < columns; i++)
    {
        outArr[rownum][i] = tempTable1.get(i);
    }

    String tableonLine = tempTable1.toString().replaceAll("[^a-zA-Z0-9\\-:.,]", " ");

    System.out.println("Sublist "+ rownum + ": "+tableonLine);
}
//从诱人的尺寸中获取2D数组的尺寸
//这将是列*行的长度
String[][]outArr=新字符串[tentable.size()/columns][columns]
for(int subStart=0;subStart