如何在Java中使用向量定义表格模型

时间:2018-08-29 11:15:58

标签: java mysql swing

我试图将MySQL表链接到我的Java项目,并且想在我的Java框架上往复移动MySQL表。到目前为止,我已经编写了这段代码。

try{
    Class.forName(cn);
    Connection con = (Connection) DriverManager.getConnection(url, u, p);
    Statement stmt = (Statement) con.createStatement();
    String q = "select eno,name,salary,dept,(salary*12) as spa from employee;";
    ResultSet rs = stmt.executeQuery(q);
    ResultSetMetaData rsmd = rs.getMetaData();
    int cc=rsmd.getColumnCount();
    Vector columns = new Vector(cc);
    Vector data = new Vector();
    Vector row;

    while(rs.next()) {
        row=new Vector(cc);

        for (int i = 1; i <= cc; i++) {
            row.add(rs.getString(i));
        }

        data.add(row);
    }

JTable table=new JTable(data,columns);
DefaultTableModel m = new DefaultTableModel(data, columns);
jTable1.setModel(m);

} catch (Exception e){
   System.out.println(e.getMessage());
}

我曾经使用过向量,但现在无法确定如何为表'jTable1'定义模型。MySQL table and its description

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我想,如果您正在学习使用Swing和Java进行Java编程,这里有一些想法:

  1. 尝试分阶段完成应用程序。
  2. 从代码开始,GUI部分仅包含一些虚拟数据(不是数据库数据;您尚未连接到数据库)。
  3. 此时,您可以在其中显示窗口(JFrame)和其中包含一些伪数据(例如,在程序中创建)的JTable
  4. 现在,对应用程序的数据库方面进行编码。
  5. 从数据库表中获取数据,并验证您能够读取并将其打印到IDE中的控制台。
  6. 成功后,用数据库数据替换JTable的伪数据。
  7. 您应该让应用程序显示一个带有JTable的窗口,并在其中查询数据库数据。

此处是使用Oracle's Java tutorials上的Swing GUI构建JTable的链接。

答案 1 :(得分:0)

我可以提供一些建议来改善您的代码:

  1. 不要在方法范围内创建数据库连接。使用池来管理它们,并将连接传递到需要它的对象中。
  2. 使您的SQL成为静态字符串。
  3. 该存储过程为您做什么?直接,原始的SQL应该足以查询表。
  4. 您应该知道存储过程将返回什么。为什么要使用ResultSetMetaData?
  5. 根据camickr的建议,继续使用正在使用Swing的Vector b / c。
  6. 您不会在方法范围内关闭任何资源。
  7. 不要将异常消息打印到控制台。记录整个堆栈跟踪;它会提供比单纯的消息更多的信息。

答案 2 :(得分:0)

您需要为TableModel指定列名。现在,您刚刚定义了一个空的Vector,因此表格认为有0列,因此没有任何显示。

您可以从ResultSetMetaData获取列名:

String sql = "Select * from ???";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery( sql );
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();

//  Get column names

Vector<Object> columnNames = new Vector<Object>();

for (int i = 1; i <= columns; i++)
{
    columnNames.addElement( md.getColumnLabel(i) );
}