Java 如何从JTable中的数据库获取数据?

Java 如何从JTable中的数据库获取数据?,java,swing,jtable,actionlistener,Java,Swing,Jtable,Actionlistener,我试图在JTable中显示数据库中的数据 这是我的主类的ActionListener的一部分 if(e.getSource()==jjb) { String j[] = null; Vector r = new Vector(); Vector finl = new Vector(); try { d10.connection(); int b = d10.getclmncnt(); for(int g =

我试图在
JTable
中显示数据库中的数据

这是我的主类的
ActionListener
的一部分

if(e.getSource()==jjb)
{
    String j[] = null;
    Vector r = new Vector();
    Vector finl = new Vector();
    try
    {
        d10.connection();
        int b = d10.getclmncnt();
        for(int g = 1; g<=b+1;g++)
        {
            j = new String[g];

        }
        for(int g = 1; g<=b;g++)
        {
            j[g] = d10.gettableclmn(g);
        }
        Vector v = new Vector();
        for(int g = 1; g<=b;g++)
        {
            v.addElement(j[g]);
        }
        int a = d10.getrwcnt();
        System.out.println("no of rows are   ::::  "+a);

        r = d10.getalldata(b);

        JTable t = new JTable(r,v);
        t.setLayout(null);
        TableColumn tc;
        for(int hh = 0;hh<t.getColumnCount();hh++)
        {               
            tc = t.getColumnModel().getColumn(hh);
            tc.setWidth(75);
        }
        JScrollPane js = new JScrollPane(t);

        js.setBounds(10, 100, 1000, 500);
        p5.add(js);
        p5.repaint();
    }
    catch (ClassNotFoundException e1)
    {
        e1.printStackTrace();
    }
    catch (SQLException e1)
    {
        e1.printStackTrace();
    }
}

当我运行此代码时,只有第一个结果显示在
JTable
中,但是当我调用
函数d10.getrwcnt()时它将输出为
79
行。我的代码有什么问题?

您的问题是
getalldata
方法的循环

Vector v = new Vector(d);
    try {

        Statement s = c.createStatement();
        ResultSet r = s.executeQuery("select * from data");

        while(r.next()) 
        //Every time when this loop gets executed you are adding
        //data to the same vector v, instead one instance depicts one row in database,
        //so you will have to create a new instance everytime.
        {
            v = new Vector(d); //create an instance for every row in database.
            v.add(r.getInt(1));
            v.add(r.getInt(2));
            v.add(r.getInt(3));
            v.add(r.getInt(4));
            v.add(r.getInt(5));
            v.add(r.getInt(6));
            v.add(r.getInt(7));
            v.add(r.getInt(8));
            v.add(r.getInt(9));
            v.add(r.getInt(10));
            v.add(r.getInt(11));
            v.add(r.getString(12));
            rr.add(v); // add the values here
        }



    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

您的问题是
getalldata
方法的循环

Vector v = new Vector(d);
    try {

        Statement s = c.createStatement();
        ResultSet r = s.executeQuery("select * from data");

        while(r.next()) 
        //Every time when this loop gets executed you are adding
        //data to the same vector v, instead one instance depicts one row in database,
        //so you will have to create a new instance everytime.
        {
            v = new Vector(d); //create an instance for every row in database.
            v.add(r.getInt(1));
            v.add(r.getInt(2));
            v.add(r.getInt(3));
            v.add(r.getInt(4));
            v.add(r.getInt(5));
            v.add(r.getInt(6));
            v.add(r.getInt(7));
            v.add(r.getInt(8));
            v.add(r.getInt(9));
            v.add(r.getInt(10));
            v.add(r.getInt(11));
            v.add(r.getString(12));
            rr.add(v); // add the values here
        }



    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

移动第一行和最后一行

    Vector v = new Vector(d);
    .... 
    while(r.next()) {
        v.add(r.getInt(1));
        v.add(r.getInt(2));
        ...
        v.add(r.getString(12));
    }

    rr.add(v);
在循环内部,如下所示

    while(r.next()) {
        Vector v = new Vector(d);
        v.add(r.getInt(1));
        v.add(r.getInt(2));
        ...
        v.add(r.getString(12));

        rr.add(v);
    }
而且,我可以看出你的代码很模糊,请不要介意。你能做的事情很少

  • 适当地处理连接,尝试使用一些连接池API
  • 使用后关闭您的
    结果集
  • 停止使用
    Vector
    ,改用
    ArrayList
    ,尤其是当Vector没有任何用途时
  • 尝试遵守Java命名约定
  • 使用有意义的变量,而不是
    b
    g
    j

移动第一行和最后一行

    Vector v = new Vector(d);
    .... 
    while(r.next()) {
        v.add(r.getInt(1));
        v.add(r.getInt(2));
        ...
        v.add(r.getString(12));
    }

    rr.add(v);
在循环内部,如下所示

    while(r.next()) {
        Vector v = new Vector(d);
        v.add(r.getInt(1));
        v.add(r.getInt(2));
        ...
        v.add(r.getString(12));

        rr.add(v);
    }
而且,我可以看出你的代码很模糊,请不要介意。你能做的事情很少

  • 适当地处理连接,尝试使用一些连接池API
  • 使用后关闭您的
    结果集
  • 停止使用
    Vector
    ,改用
    ArrayList
    ,尤其是当Vector没有任何用途时
  • 尝试遵守Java命名约定
  • 使用有意义的变量,而不是
    b
    g
    j

    • 只搜索点,因为您没有搜索以下内容

      • 向量的工作原理

      • JTable的工作原理

      • LayoutManager的工作原理

      • 阅读相关问题(右下角)

      • 不要重新发明轮子,搜索ResultSetTableModel或TableFromDatabase

      • 您对Swing中的一致性有异议


        • 只搜索点,因为您没有搜索以下内容

          • 向量的工作原理

          • JTable的工作原理

          • LayoutManager的工作原理

          • 阅读相关问题(右下角)

          • 不要重新发明轮子,搜索ResultSetTableModel或TableFromDatabase

          • 您对Swing中的一致性有异议


          能否将硬编码数据动态放入表中?您能否成功列出数据库的输出(例如到命令行)?这似乎是两个不同的问题。另一方面,为了更快地获得更好的帮助,请发布一个。您可以动态地将硬编码数据放入表中吗?您能否成功列出数据库的输出(例如到命令行)?这似乎是两个不同的问题。顺便说一句,为了尽快得到更好的帮助,请发一封邮件。我尝试了你的建议。但它仍然不能正常工作。。。。以前,JTable中只添加了第1行。现在,重复同一行,直到行数被占用。我尝试了您建议的方法。但它仍然不能正常工作。。。。以前,JTable中只添加了第1行。现在同一行重复,直到行数被占用。看我的答案看我的答案