代码之家  ›  专栏  ›  技术社区  ›  hamchi

基于结果集的基本编程JTable模型

  •  1
  • hamchi  · 技术社区  · 11 年前

    它不会添加数据,列名称会起作用,我累坏了,我不知道该何去何从。没有错误消息,只是不会这样做,它显示的是对象而不是字符串。我也不知道为什么它不起作用,因为model.addRow()要求一个对象[][],我相信我能实现吗?

    initComponents();
       try {
        PreparedStatement stat = Domein.dConnection().prepareStatement("SELECT domainid , domain FROM nabilpx84_hamchi.dnsp_domains");
            ResultSet resultaat = stat.executeQuery();
            ResultSetMetaData naam = resultaat.getMetaData();
    
            Object[] kolommen = new Object[2];
            Object[][] data = null ;
            DefaultTableModel model = new DefaultTableModel(null,data);
    
            // kolom namen          
            for (int i = 1; i <= naam.getColumnCount(); ++i) {
                model.addColumn(naam.getColumnName(i));
            }
            //records
    
            data = new Object[1][2];
    
             while(resultaat.next())
            {
                data[0][0] = resultaat.getInt(1);
                data[0][1] = resultaat.getString(2);
                if(resultaat.isFirst())
                {
                    model.addRow(data);
                }
            }
    
            uitvoerTabel.setModel(model);
    
    
        } catch (SQLException ex) {
            Logger.getLogger(Domein.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    3 回复  |  直到 11 年前
        1
  •  2
  •   Paul Vargas    11 年前

    你可以试试这样的方法:

    ResultSetMetaData metaData = rs.getMetaData();
    
    // names of columns
    Vector<String> columnNames = new Vector<String>();
    int columnCount = metaData.getColumnCount();
    for (int column = 1; column <= columnCount; column++) {
        columnNames.add(metaData.getColumnName(column));
    }
    
    // data of the table
    Vector<Vector<Object>> data = new Vector<Vector<Object>>();
    while (rs.next()) {
        Vector<Object> vector = new Vector<Object>();
        for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
            vector.add(rs.getObject(columnIndex));
        }
        data.add(vector);
    }
    
    DefaultTableModel model = new DefaultTableModel(data, columnNames);
    

    另一方面,服务层可以帮助您将Swing应用程序中的一个或多个存储库解耦或提供服务。

        2
  •  2
  •   Hovercraft Full Of Eels    11 年前

    你有一些看起来很时髦的代码,你似乎在添加数据 两次 进入您的桌子模型。为什么不创建一个列标题为Vector或String数组、行计数为0的DefaultTableModel,然后在while循环中添加Object数组行或Vector行?

    还有你 必须 为每一行创建一个新的Object数组或Vector。你在while循环中没有这样做。

    类似于:

        ResultSet resultaat = stat.executeQuery();
        ResultSetMetaData naam = resultaat.getMetaData();
    
        Vector<String> columnVector = new Vector<String>();
         for (int i = 1; i <= naam.getColumnCount(); ++i) {
            columnVector.addElement(naam.getColumnName(i));
        }       
    
    
        DefaultTableModel model = new DefaultTableModel(columnVector, 0);
    
        while(resultaat.next())    {
           // you must create a new Object array or Vector for each row
           Object[] rowData = new Object[2];
           rowData[0] = resultaat.getInt(1);
           rowData[1] = resultaat.getString(2);
           if(resultaat.isFirst()) {  // not sure what this is for
              model.addRow(rowData);
           }
        }
    

    此外,请查看数据库博客中Rob Camick的表格,您可以在这里找到: Table From Database

        3
  •  1
  •   Azad    11 年前

    我有自己的课,我从头痛中幸存下来 如果您需要填写任何jtable,请尝试以下操作:

    SQLGenerat sql  = new SQLGenerat ();
    jTable1.setModel(new DefaultTableModel(sql.getRows("SQL code"), sql.getColumns("SQl CODE")));
    

    这是你可以使用的课程

    import java.sql.*;
    import java.util.Vector;
    
    /**
     *
     * @author Azad
     */
    public class SQLGenerat {
        Connection con;
        Statement  st ;
        ResultSet  rs ;
    
    
        public Vector getColumnNames(String sql)
          {
              Vector  columnNames = new Vector();
              /*
               *dont foeget to  wirte your connection 
               *before executing any sql statement
               */
              try{
                  st = con.createStatement();
                  rs=  st.executeQuery(sql);
                  ResultSetMetaData metaData = rs.getMetaData();
                  int columns = metaData.getColumnCount();
    
                  while(rs.next())
                  {
                      Vector column = new Vector(columns);
                      for(int i = 0 ; i <= columns-1 ; i++){
                          column.addElement(metaData.getColumnName(i));
                      }
                      columnNames.addElement(column);
                  }
              }
              catch(SQLException ex)
              {
                 System.out.println(ex.getMessage());
              }
              return columnNames;
          }
    
          public Vector getRowDatas(String sql)
          {
              Vector rowDatas = new Vector ();
               /*
               *dont foeget to  wirte your connection 
               *before executing any sql statement
               */
    
              try{
                  st = con.createStatement();
                  rs=st.executeQuery(sql);
                  ResultSetMetaData metaData = rs.getMetaData();
                  int columns = metaData.getColumnCount();
    
    
                  while(rs.next())
                  {
                      Vector  rows = new Vector(columns);
    
                      for(int i = 0 ; i <= columns -1 ;i++)
                      {
                          rows.addElement(rs.getObject(i));
                      }
                      rowDatas.addElement(rows);
                  }
                  rs.close();
                  st.close();
              }
              catch(Exception ex)
              {
                  System.out.println(ex.getMessage());
              }
    
    
              return rowDatas;
          }
    }