注册 登录
编程论坛 JAVA论坛

怎样把数据库里面的数据读到集合里面去

天一 发布于 2005-08-28 12:28, 2510 次点击

import java.sql.*; import java.io.*; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.border.*;

public class EmployeepreparedStatement extends Frame implements Serializable { /*JTable table; Panel p; Object l[][],lieming[]={"货物ID号","货物名称","货物颜色","货物体积","货物价格","货物产地"}; public EmployeepreparedStatement() { p=new Panel(); LinkedList goodlist=(LinkedList)rs.readObject();//在集合当中怎样把数据库里面的数据读到集合中去 int length=goodlist.size(); l=new Object[length][6]; table=new JTable(l,lieming); p.removeAll(); p.add(new JScrollPane(table)); p.validate(); Iterator iter=goodlist.iterator(); int i=0; while(iter.hasNext()) { EmployeepreparedStatement gds=(EmployeepreparedStatement)iter.next(); l[1][0]=EmployeepreparedStatement. setSize(500,300); setVisible(true); */ public static void main(String args[]) { int id; String name; String color; int higth; int price; String address; try { Statement smt; Connection con; System.out.println("正在追被连接"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con=DriverManager.getConnection("jdbc:odbc:MyServer"); Statement sm=con.createStatement(); ResultSet rs=sm.executeQuery("select itemId,itemName,itemColor,itemHight,itemPrice,itemAddress from itemtable" ); while(rs.next()) { id=rs.getInt("itemId"); name=rs.getString("itemName"); color=rs.getString("itemColor"); higth=rs.getInt("itemHight"); price=rs.getInt("itemPrice"); address=rs.getString("itemAddress"); System.out.println(id+"\t"+name+"\t"+color+"\t"+higth+"\t"+address+"\t"+price); } sm.close(); con.close(); } catch(Exception e) { System.out.println(e.toString()); } EmployeepreparedStatementd(); JTable table; Panel p; Object l[][],lieming[]={"货物ID号","货物名称","货物颜色","货物体积","货物价格","货物产地"}; public void EmployeepreparedStatementd() { try { p=new Panel(); LinkedList goodlist=(LinkedList)rs.readObject();//在集合当中怎样把数据库里面的数据读到集合中去 int length=goodlist.size(); l=new Object[length][6]; table=new JTable(l,lieming); p.removeAll(); p.add(new JScrollPane(table)); p.validate(); Iterator iter=goodlist.iterator(); int i=0; while(iter.hasNext()) { EmployeepreparedStatement gds=(EmployeepreparedStatement)iter.next(); l[i][0]=id; l[i][1]=name; l[i][2]=color; l[i][3]=higth; l[i][4]=price; l[i][5]=address; i++; } table.repaint(); } catch(Exception ee) { System.out.println(ee.toString()); } setSize(500,300); setVisible(true); } } }

28 回复
#2
kai2005-08-28 16:10
错了一塌糊涂,我都不知道怎么改好了。
#3
天一2005-08-29 12:34
你能帮我写一个吗?谢谢
#4
天一2005-08-29 12:39
能帮我阐述一下JSP 和XML 和J2EE之间联合一起做一个项目。
里面的具体机制能帮我阐述一下吗?
我理解不太清楚。
#5
天一2005-08-29 12:46
我还想问你一个问题,关于模式的
怎样理解模式呢?
#6
kai2005-08-29 19:50
关于Java 程序对数据库的操作的问题,这个话题很大,我可以给你一段DemoCode,但是这样的断章取义的代码意义不大,我也不知你是否能理解。
下面是一段JDBC的查询实例的代码:

// 申明一个方法和一些变量
public void ListStudents() throws SQLException
{
  int i, NoOfColumns;
 String StNo, StFName, StLName;
 // 初始化并加载JDBC-ODBC 驱动程序
  Class.forName("jdbc.odbc.JdbcOdbcDriver");
  // 创建连接对象
  Connection Ex1Con = DriverManager.getConnection("jdbc.odbc:StudentDB"; uid = "admin"; pw = "sa");
 // 创建一个简单的 Statement 对象
  Statement Ex1Stmt = Ex1Con.createStatement();
  // 创建 SQL 串, 传送到 DBMS 并执行SQL语句
  ResultSet Ex1rs = Ex1Stmt.executeQuery("SELECT StudentNumber, FirstName, LastName FROM Students");
  // 处理每一个数据行直到不再有数据行
  // 在控制台显示结果
  System.out.println("Student Number    First Name    Last Name");
  while(Ex1rs.next())
  {
    //将列值保存到Java变量中
    StNo = Ex1rs.getString(1);
    StFName = Ex1rs.getString(2);
    StLName = Ex1rs.getString(3);
    System.out.println(StNo, StFName, StLName);
  }
}
JDBC 涉及的方方面面很多,不是一两段代码可以跟你解释地清楚的。如果要详细说,那就要写本书出来了。
以上这一段代码对于理解你觉得意义大吗?我看是不大,如果你真的想学JDBC,那么下面这个连接对你有用
http://java.

另外对于小型的程序根本不需要什么数据库,你完全可以构造一个所谓的数据库,也就是说用class来构造一个数据模型,然后在程序中创建你的数据并存入你所建立的那个数据结构中,在程序运行期间,你也可以将数据存入一个文件中,并以访问文件的形式访问你的数据,这样可以降低对内存的开销,如果数据块不是很大,在程序运行期间就不必存入文件,而是直接access,这样程序的运行速度可加快。但最终那些数据是一定要存为文件,以便下次access. 这是我对你提的建议,这也是我通常的做法。

当然学学JDBC 也很好。

对于模式这个问题,也是一个很大的话题,有专门的书介绍这个话题,书名好像叫DesignPattern。
这本书我没看过。所以我使用我自己的设计模式,那就是消息机制模式。也就是说,Object 与 Object 之间以消息机制来互相联系,其实我光这么说,你肯定不能理解。以后你在碰到这样的问题时,具体提出来,我们可以一起来设计一个适合于具体问题的设计模式。
#7
飘飘叶子2005-08-30 00:15
上面的程序编译都不会通过的吧……少了try块

借宝地问个问题,怎么写代码能够实现点右上角的关闭按钮而弹出对话框询问是否真的要关闭程序……点是退出,点否返回,很多程序都是这样的吧……
#8
kai2005-08-30 02:43
上面的代码只是示意性代码, 通过与否是与 try 无关的, 你应该注意到那个紧跟函数名后的那个 throws, 也就是说,那个调用此函数的函数块中将使用 try ... catch...
对于上面的解释不知道我是否说清楚了? 如果没有理解下篇帖子中可以给你举个例子.

回答你的第二个问题,
你应该在 public class 中加上下面的代码:
protected void processWindowEvent(WindowEvent e)
{
  if (e.getID() == WindowEvent.WINDOW_CLOSING)
  {
     // your code here
  }
}
#9
tempnetbar2005-08-30 05:35
kai上面的代码是无法起到实际作用的,估计kai你自己没有写过这样的程序吧?还要配合把JFrame的默认关闭操作改为DO_NOTHING。方法是setDefaultCloseOperation(int operation)。否则光用上面的方法你是无法阻止窗体关闭的。kai你可以试着问一下自己,即使在//your code here部分添加了对话框代码,如果用户选择否的话你怎么阻止窗体的关闭呢?
#10
飘飘叶子2005-08-30 17:17
那要怎么写代码啊…… 发现setDefaultCloseOperation(int)里写0相对于是JFrame.DO_NOTHING_ON_CLOSE 3是EXIT_ON_CLOSE 但要怎么控制呢……
#11
kai2005-08-30 19:23
tempnetbar, 你说错了,我在40天前写的一个Project 中就用到了这个函数,程序中有类似的实现功能。 如果你们想要,把Email 地址告诉我一声,我把代码发给你们,你们自己去看。
#12
tempnetbar2005-08-30 22:05
嗯,你是说setDefaultCloseOperation这个函数吧?还是说不用这个函数就可以实现?
#13
kai2005-08-30 22:12
我当然不是说你的那个setDefaultCloseOperation,而是我所指的那个函数.
#14
tempnetbar2005-08-31 07:32
?那你说来听听啊,还有什么函数可以取消对窗体的关闭?
#15
kai2005-08-31 07:41
我说的很清楚了,可惜你两眼昏花,戴个眼镜好像也看不清楚,那我怎么办呢?
#16
kai2005-08-31 08:17
算了,看来不给你一段代码看看你是不会明白的。下面是一段DemoCode,自己去看吧。
import javax.swing.*;
import java.awt.event.*;


public class JFrameDemo extends JFrame
{
  protected void processWindowEvent(WindowEvent e)
  {
    if (e.getID() == WindowEvent.WINDOW_CLOSING)
    {
      int value =  JOptionPane.showConfirmDialog(null,
                                              "Really close the window?",
                                              "Really close the window",
                                              JOptionPane.YES_NO_CANCEL_OPTION) ;
      switch (value)
      {
        case JOptionPane.YES_OPTION:
          System.exit(0);
        case JOptionPane.NO_OPTION:
        case JOptionPane.CANCEL_OPTION:
        default:
          // cancel
          return ;
      }
    }
  }
  public JFrameDemo()
  {
    super("JFrameDemo");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
  }
  public static void main(String [] args)
  {
    JFrameDemo jframeDemo = new JFrameDemo();
    jframeDemo.setSize(400,300);
    jframeDemo.setVisible(true);
  }
}

本来是想发给你们我写的一个Project 的代码的,不过现在决定不发给你们了,你们太没有眼福了。
一般来讲,当用户点击关闭按钮后,应该显示提醒用户是否 save 的对话框的。
提示就到这里了,再不明白,我也无能为力了。
#17
天一2005-08-31 12:53
你用的是提示用户的机制关闭窗体的。
你的代码可以理解。想法很好的
#18
tempnetbar2005-09-01 08:39
哦,明白了耶~原来是processWindowEvent嘎嘎,没看清。不过你这个代码的不完美之处在于需要继承JFrame才能覆盖那个方法。我的那种方法就不用。大家看情况用吧
#19
kai2005-09-01 17:56
tempnetbar, 你还是说错了,你的那个setDefaultCloseOperation 是不能达到飘飘叶子的那个要求的。你再仔细看看飘飘叶子的要求吧。还有setDefaultCloseOperation是要设置参数的。正如10楼所说的,通过设置参数 JFrame.DO_NOTHING_ON_CLOSE,你可以实现点击大叉而不关闭程序。而飘飘叶子要的不是这个,他要的是让用户来决定是否关闭程序。通常很多软件都是这么做的,当然不是询问是否关闭,而是询问是否在关闭之前对最后的改动做存储。有3种可供选择,1)yes 按钮,存储文件并关闭程序 2)no 按钮,不存储文件,关闭程序 3)cancel 按钮,什么也不做,也就说,不关闭程序,但也不存储文件。 其次想说的是,你所说的那个所谓不完美之处,恰恰又是你搞错了。我来问你,你那个 setDefaultCloseOperation是在哪个类里?回答是:在JFrame 里,那个JFrame.DO_NOTHING_ON_CLOSE 也是JFrame中的一个常数。还有,任何应用程序难道可以没有一个JFrame 的实体吗?当然是不可以的。所以 在 main 函数中你必须有一个 JFrame的实体,而最简单,最通常的做法就是那个包含main() 的那个public class 定义为继承JFrame.
#20
tempnetbar2005-09-01 18:20
嘿嘿嘿嘿,那我一会儿也把代码贴上来,我上次就是这么写的,你难道也近视?我没有说只用这个函数啊,当然还要配合其他的东东啦,哇哈哈哈哈
#21
飘飘叶子2005-09-01 21:04
processWindowEvent已经提供了退出机制,那么setDefaultCloseOperation(EXIT_ON_CLOSE);这句就可以不用写啦……
非常感谢2位版主的帮忙~
#22
kai2005-09-01 22:02
你说的很对,我之所以保留了这一句,就是要让你看看,setDefaultCloseOperation(EXIT_ON_CLOSE); 对程序的无影响性,如果你将这一句删掉,程序的运行结果是一样的,所以这就很说明问题了。
#23
tempnetbar2005-09-02 08:46

老kai真是会算计我啊,嘿嘿,连反例都给准备好了,哈哈。让事实说话吧。 import java.awt.event.*; import javax.swing.*;

public class FrameExit extends WindowAdapter { public static void main(String args[]) { JFrame jf = new JFrame("AskExit"); jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); jf.addWindowListener(new FrameExit()); jf.setSize(200,200); jf.setVisible(true); } public void windowClosing(WindowEvent e) { int choice = JOptionPane.showConfirmDialog(null,"relly want to exit?","fuck kai:)",JOptionPane.YES_NO_OPTION); if(choice == JOptionPane.YES_OPTION) { System.exit(0); } } }

#24
tempnetbar2005-09-02 08:50
对各位看官说明一下,两个方法各有千秋,kai的做法也让我大开眼界啊。正如我所说,他的方法必须继承JFrame,当然了一般情况下如果写窗体,都会继承JFrame。我的方法比较适合一些例外的特殊情况,也就是你不想或不能继承JFrame的情况。但是呢~黄婆卖瓜总要夸自己一下,我这个方法无论你是继承JFrame还是不继承JFrame都有效,哈哈。不过说句实话,如果你继承JFrame,肯定是kai的方法简单点,我的方法则因为通用性付出了一点代价,代码长了点。哇哈哈哈哈
#25
kai2005-09-02 09:56
千呼万唤始出来,
大珠小珠落玉盘。
代码暗隐损人语,
只因黄婆卖瓜急。
J湖散人真厉害,
语重心长道释语。
只是落尾娃哈哈,
颇似大肚弥勒佛。
#26
tempnetbar2005-09-02 10:21
妙…………
#27
偶记2015-06-08 17:49
#28
偶记2015-06-08 17:49
发错了
#29
偶记2015-06-08 17:49
1