CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

初学,写了一个关于打开数据库的小程序,请大家看看!

楼主kurama(kurama)2003-05-03 23:57:00 在 Java / J2SE / 基础类 提问

数据库中有三条不同的记录,但是在按“打开数据库”按钮打开以后,显示的是三条相同的记录,都是最后一条。不知为什么,还请大家指教!  
   
  import   javax.swing.*;  
  import   java.util.*;  
  import   java.awt.event.*;  
  import   java.sql.*;  
  import   java.awt.*;  
  import   javax.swing.table.*;  
  class   Window   extends   JFrame   implements   ActionListener  
  {  
    JButton   button;  
    JScrollPane   sp;  
    JPanel   panel;  
    JTable   table;  
    Container   container;  
    Connection   con;  
    Statement   sql;  
    ResultSet   rs;  
    MyTableModel   tm;  
    Window()  
    {  
      super("数据库");  
      button=new   JButton("打开数据库");  
      panel=new   JPanel();  
      tm=new   MyTableModel();  
      table=new   JTable(tm);  
      container=getContentPane();  
      sp=new   JScrollPane(table);  
      //sp.setViewportView(table);  
      container.add(sp,"Center");  
      panel.add(button);  
      container.add(panel,"South");  
      button.addActionListener(this);  
      setBounds(200,150,700,500);  
      setVisible(true);  
      addWindowListener(new   WindowAdapter()  
                                          {    
                                            public   void   windowClosing(WindowEvent   e)  
                                            {    
                                              System.exit(0);  
                                            }  
                                          });  
    }  
    public   void   actionPerformed(ActionEvent   ee)  
    {  
      if(ee.getSource()==button)  
      {  
        try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}  
        catch(ClassNotFoundException   e){}  
        try{  
                con=DriverManager.getConnection("jdbc:odbc:MS","   ","   ");  
                sql=con.createStatement();  
                rs=sql.executeQuery("SELECT   *   FROM   loan");  
                tm.rowdata.removeAllElements();  
                while(rs.next())    
                {    
                  tm.data.removeAllElements();  
                  tm.data.addElement(String.valueOf(rs.getLong(1)));  
                  tm.data.addElement(rs.getString(2));  
                  tm.data.addElement(rs.getString(3));  
                  tm.data.addElement(rs.getDate(4).toString());  
                  tm.rowdata.addElement(tm.data);  
                }  
                con.close();  
                tm.fireTableDataChanged();  
              }  
        catch(SQLException   e1){}      
      }  
    }  
  }  
  public   class   jtable  
  {  
    public   static   void   main(String   args[])  
    {  
      Window   window=new   Window();  
    }  
  }  
   
  class   MyTableModel   extends   AbstractTableModel    
  {  
    Vector   data,rowdata,columnnames;  
    MyTableModel()  
    {  
      data=new   Vector();      
      rowdata=new   Vector();  
      columnnames=new   Vector();  
      columnnames.addElement("编号");  
      columnnames.addElement("姓名");  
      columnnames.addElement("书名");  
      columnnames.addElement("借阅时间");  
      data.addElement("");  
      data.addElement("");  
      data.addElement("");  
      data.addElement("");  
      rowdata.addElement(data);  
    }  
    public   int   getColumnCount()    
    {  
      return   columnnames.size();  
    }            
    public   int   getRowCount()  
    {  
      return   rowdata.size();  
    }        
    public   String   getColumnName(int   col)  
    {  
      return   columnnames.get(col).toString();  
    }  
    public   Object   getValueAt(int   row,int   col)  
    {  
      return   ((Vector)rowdata.elementAt(row)).elementAt(col);  
    }  
    public   boolean   isCellEditable(int   row,   int   col)  
    {  
      return   false;  
    }  
  } 问题点数:50、回复次数:4Top

1 楼GoldApple(锋哥哥)回复于 2003-05-04 01:35:27 得分 50

我估计错误是出在   actionPerformed   方法中的   tm.rowdata.addElement(tm.data);   你在循环中只是清除了   tm.data   里面的元素,但是   tm.data   对象还是没有变化的!而   addElement   只保存了对   tm.data   的引用,这种情况就很像使用   Vector   保存   String[]   数组对象一样,你试试下面两段代码,它们是不同的  
   
  片断一:  
  Vector   v   =   new   Vector();  
  String[]   a   =   new   String[2];  
  int   i,counter=0;  
  for(i=0;i<3;i++)  
  {  
  a[0]=""   +   counter++;  
  a[1]=""   +   counter++;  
  v.add(a);  
  }  
  for(i=0;i<3;i++)  
  {  
  String[]   test=(String[])v.get(i);  
  System.out.println(test[0]+"***"+test[1]);  
  }  
   
  片断二:  
  Vector   v   =   new   Vector();  
  String[]   a   =   null;  
  int   i,counter=0;  
  for(i=0;i<3;i++)  
  {  
  a   =   new   String[2];  
  a[0]=""   +   counter++;  
  a[1]=""   +   counter++;  
  v.add(a);  
  }  
  for(i=0;i<3;i++)  
  {  
  String[]   test=(String[])v.get(i);  
  System.out.println(test[0]+"***"+test[1]);  
  }  
   
  所以,我估计你的程序也是应该把   tm.data   指向新的对象才能适用你的要求了。Top

2 楼kurama(kurama)回复于 2003-05-04 21:12:52 得分 0

我再改了一下,这下正确了,就是你说的那个问题!谢了哈!Top

相关问题

  • 怎么样打开新的oracle数据库???(初学者问题)
  • vb 初学,data 控件可以打开 access2000 的数据库吗?
  • ★★求一段vb数据库小程序
  • ★★求一段数据库小程序
  • 我是PB初学者,我自已做了个小程序,但不能对数据库中的记录进行增加或移动的操作请问何故????
  • 初学者,一个小程序
  • 关于小程序中访问数据库
  • 求一备份数据库(即access)的小程序
  • 我做个小程序不知道怎样设计数据库
  • 数据库的初学问题

关键词

  • 数据库
  • vector
  • sql
  • tm
  • 打开
  • panel
  • con
  • container
  • rs
  • sp

得分解答快速导航

  • 帖主:kurama
  • GoldApple

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo