Java 循环以从数据库表中获取无限ArrayList/List
我使用以下代码从数据库表创建ArrayList,并将其拆分为3个单独的ArrayList: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
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