搞了一下午,想要将数据库的数据展示到JTable中发现了很多方法。
有的需要将读取到的数据放到Vctor类中,再用枚举类型将Vctor的数据一个一个读取出来。
甚是麻烦。
最终在linweieran的博客上发现了这个非常简单轻便的方法,供大家参考。
再次也感谢这位老师。
转载自@
linweieran的博客
在上一个博文中学习了如何用Java连接数据库,那么连接上数据库后干嘛用呢,肯定是对数据库进行增删改查,在这里我又学习了一下,如何用JTabke读取数据库。
那么什么事JTable呢?在API中写道:JTable
用来显示和编辑常规二维单元表。也就是说:利用 JTable 类,可以以表格的形式展示数据,可设置允许用户编辑数据。我这里只是简答你的用JTable读取数据,后面的功能以后再实现。
那么如何使用JTable呢,在API中首先看JTable的构造方法:
- <span style="font-size:18px;">public JTable(Object[][] rowData,
- Object[] columnNames)构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames。rowData 是一个行数组,因此可以通过以下代码获取第 1 行,第 5 列单元格的值:
- rowData[1][5]; 所有行的长度必须与 columnNames 的长度相同。
- 参数:
- rowData - 新表的数据
- columnNames - 每列的名称</span>
新建class后需要写一个构造函数,在构造函数里设置列名,添加行数据这里只添加一行信息,加入画布中,设置大小,设置为可见。
- public class Test1 extends JFrame {
- //rowData用来存放行数据
- //columnNames存放列名
- Vector rowData,columnNames;
- JTable jt=null;
- JScrollPane jsp=null;
- public static void main(String[] args) {
- Test1 test1 = new Test1();
- }
- //构造函数
- public Test1(){
- columnNames=new Vector();
- //设置列名
- columnNames.add("学号");
- columnNames.add("名字");
- columnNames.add("性别");
- columnNames.add("年龄");
- columnNames.add("籍贯");
- columnNames.add("系别");
- rowData = new Vector();
- //rowData行数据,可以存放多行
- Vector hang=new Vector();
- hang.add("1");
- hang.add("linweieran");
- hang.add("男");
- hang.add("25");
- hang.add("spy");
- hang.add("自创");
- //加入到rowData
- rowData.add(hang);
- //初始化Jtable
- jt = new JTable(rowData,columnNames);
- //初始化 jsp
- jsp = new JScrollPane(jt);
- //把jsp放入到jframe
- this.add(jsp);
- this.setSize(400, 300);
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.setVisible(true);
- }
执行后的表格就是:
这里只是添加了一行信息,但是读数据库的时候需要从数据库中读取数据,那么代码需要给的地方就是添加行数据的地方,可想而知,在添加行数据的地方需要连接数据库,然后用查询语句查找表,然后读取放入行中,再添加至rowData中,初始化JTable。那么代码如下:
- public class Test2 extends JFrame {
- //从数据库中取出信息
- //rowData用来存放行数据
- //columnNames存放列名
- Vector rowData,columnNames;
- JTable jt=null;
- JScrollPane jsp=null;
- //定义数据库需要的全局变量
- PreparedStatement ps=null;
- Connection ct=null;
- ResultSet rs=null;
- public static void main(String[] args) {
- Test2 test2=new Test2();
- }
- //构造函数
- public Test2(){
- columnNames=new Vector();
- //设置列名
- columnNames.add("学号");
- columnNames.add("名字");
- columnNames.add("性别");
- columnNames.add("年龄");
- columnNames.add("籍贯");
- columnNames.add("系别");
- rowData = new Vector();
- //rowData可以存放多行,开始从数据库里取
- try {
- //加载驱动
- Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
- //得到连接
- ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1","sa","sa");
- ps=ct.prepareStatement("select * from stu");
- rs=ps.executeQuery();
- while(rs.next()){
- //rowData可以存放多行
- Vector hang=new Vector();
- hang.add(rs.getString(1));
- hang.add(rs.getString(2));
- hang.add(rs.getString(3));
- hang.add(rs.getInt(4));
- hang.add(rs.getString(5));
- hang.add(rs.getString(6));
- //加入到rowData
- rowData.add(hang);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally{
- try {
- if(rs!=null){
- rs.close();
- }
- if(ps!=null){
- ps.close();
- }
- if(ct!=null){
- ct.close();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- //初始化Jtable
- jt = new JTable(rowData,columnNames);
- //初始化 jsp
- jsp = new JScrollPane(jt);
- //把jsp放入到jframe
- this.add(jsp);
- this.setSize(400, 300);
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.setVisible(true);
- }
结束
linweieran