以编程方式可扩展的数组

时间:2015-03-05 15:30:46

标签: java oracle

我有一个带有一列(名称)的db表(示例),我想从该表中读取记录并将它们存储在一个数组中(我不想去收集那种东西)。我希望我的数组大小动态增长。有人可以修复我的Java代码吗? 我在这里发布我的代码。

public class ArrayEx {

  public static void main(String[] args) throws Exception {
    String str[]=new String[4];
    int i=-1;
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","sasi","admin");
    Statement st=con.createStatement();
    ResultSet rs=st.executeQuery("select name from sample");
    while(rs.next()){
        i++;

        str[i]=rs.getString("name");
    }
    for(int j=0;j<str.length;j++)
    {
        System.out.print(str[j]+" ");
    }
  }
}

4 个答案:

答案 0 :(得分:1)

如果您想要一个增长的数组,请使用ArrayList。否则,您可以确定前面的行数并使用数组。

Statement st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs=st.executeQuery("select name from sample");
rs.last();
int lastRow = rs.getRow();
String str[]=new String[lastRow-1];
rs.beforeFirst();
while (rs.next()) {
   ...
}

答案 1 :(得分:1)

使用集合是最好的方法。但是,既然你不想要你使用Collection,你可以做这样的事情。

在First中只声明数组

String str [];

执行Query并获得Resultset后,您可以使用Resultset的大小动态分配str的值。

海峡=新[ResultSet_size];

但这是一种非常古老而又糟糕的编码技术。

答案 2 :(得分:1)

基本上,如果你真的想要使用&#34;成长&#34;数组,它看起来像这样:

int capcity = 4;
int usedSlots = 0;
String growingArray[] = new String[capcity];

现在你&#34;只是&#34;不断增加&#34; usedSlots&#34;每次在数组中存储值。如果&#34; usedSlots&#34;达到目前的容量&#34 ;;您可以增加容量,创建新数组,复制所有现有数组元素......等等。但正如其他人所指出的那样 - 如果事先知道所需元素的最大数量,则不需要增长数组。另一方面,如果该数字未知,那么使用数组是完全错误的。

你知道 - 除非我们在讨论你的作业课程,否则你不要使用馆藏的要求就是......傻瓜&#34;。就像要求木匠用指甲连接一些物品一样;但请不要使用锤子。

简单地说:它没有意义;没有使用收藏品你什么也得不到。实际上,你&#34;获得&#34;代码将更难理解和维护(当您向同行提交此代码时,这可能会给您带来一些负面反馈。)

答案 3 :(得分:1)

这不是面向对象的,看起来像一个小C练习。无论如何,您的代码很少有修改工作: 注意:Arrays.copyOf()分配指定大小的新数组并复制原始数组的元素。您也可以手动执行此操作...

public static void main(String[] args) throws Exception {
    int incSize = 4; // will increase the array of this size when needed
    String str[]=new String[incSize];
    int i=0; // keeps count of nb of occupied slots

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","sasi","admin");
    Statement st=con.createStatement();
    ResultSet rs=st.executeQuery("select name from sample");
    while(rs.next()){
        // If we reach the end of the array, let's increase it
        if (i == str.length) {
            str = Arrays.copyOf(str, str.length+incSize);
        }
        str[i] = rs.getString("name");
        i++;
    }
    for(int j=0;j<str.length;j++)
    {
        System.out.print(str[j]+" ");
    }
}