3 回答
TA贡献2041条经验 获得超4个赞
您需要为 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) );
}
TA贡献1865条经验 获得超7个赞
我认为,如果您正在使用 Swing 和数据库学习 Java 编程,这里有几个想法:
尝试分阶段进行应用。
从代码开始,GUI 部分只包含一些虚拟数据(不是数据库数据;您还没有连接到数据库)。
在这一点上,您可以显示一个窗口 (a
JFrame
) 和其中的 aJTable
,其中包含一些虚拟数据(例如,在程序中创建)。现在,对应用程序的数据库方面进行编码。
从数据库表中获取数据并验证您是否能够读取它并将其打印到 IDE 中的控制台。
成功后,将
JTable
的虚拟数据替换为 db 数据。您应该让应用程序显示一个窗口,其中包含一个
JTable
和查询的数据库数据。
这是Oracle 的 Java 教程中JTable
使用 Swing GUI构建的链接。
TA贡献1155条经验 获得超0个赞
我可以提供一些建议来改进您的代码:
不要在方法范围内创建数据库连接。使用池来管理它们并将连接传递给需要它的对象。
使您的 SQL 成为静态字符串。
该存储过程为您做什么?直接,vanilla SQL 应该足以查询一个表。
您应该知道您的存储过程返回什么。为什么要使用 ResultSetMetaData?
根据 camickr 的建议,继续使用您正在使用 Swing 的 Vector b/c。
您不会关闭方法范围内的任何资源。
不要将异常消息打印到控制台。记录整个堆栈跟踪;它将比单纯的消息有更多的信息。
添加回答
举报