怎么在开发的GUI界面程序中链接数据库

解决方案 »

  1.   

    方法和WEB中差不多,用JDBC连接。
      

  2.   

    A一个pojo普通类用于保存数据库字段(包括get和set)
    B用jdbc获取数据库的数据集,并将数据用set方法保持到pojo普通类
    C在GUI中显示pojo普通类中的数据(用get方法)
    D如
    show = new JLabel();
    show.setText(pojo.getId());
      

  3.   

    用JDBC啊,跟普通程序是一样的
      

  4.   

    jdbc,找下相关资料吧,就那几行代码,哪连都一样
      

  5.   

    我在费点时间给你写写吧连接:
    String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=liuyan";
    String user = "sa";//默认登录ID
    String pass = "";//密码try{
    DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());
    Connection conn = DriverManager.getConnection(url,user,pass);
    if(conn!=null)
      System.out.println("连接成功");
    }
    catch (Exception ex) {
    ex.printStackTrace();
    }
      

  6.   

    import javax.swing.*;
    import java.awt.*;
    import javax.swing.table.*;
    import java.util.*;
    import java.awt.event.*;
    import javax.swing.table.TableColumn;
    import java.sql.*;
    import sun.jdbc.odbc.JdbcOdbcDriver;
    class Typec extends JFrame
    {
    //窗体及窗体控件
    JPanel pnla=null;
    JPanel pnlb=null;
    JTable table=null;
    TestModela md=null;
    TestModelb mdb=null;
    TableColumn tc=null;
    javax.swing.JComboBox jc=null;
    javax.swing.JCheckBox jboxa=null;
    javax.swing.JCheckBox jboxb=null;
    DataBase db=new DataBase();       //连接sql数据javax.swing.JScrollPane js;
    JButton but;
    JTextField jt1=null;
    JTextField jt2=null;
    JTextField jt3=null;
    JTextField jt4=null;
    JTextField jt5=null;
    //Object数组构造jtable
    Object[][] a=new Object[2][3];
    Object[] b={"a","b","c"};  
    //Object数组构造jtable
    Object[][] aa={{"a","b","c"}};
    //vector数组构造jtable
    Vector va,vb,vc;//实现功能
    //1)将Object数组构造的jtable添加到窗体上去
    //2)将JTable的第一列的属性改为文本框,第二列的属性改变为下拉框
    void addObject()

      table=new JTable(a,b);
      
      tc=new TableColumn();
      jt1=new javax.swing.JTextField(10);
      jt1.setBackground(Color.red);
      jc=new JComboBox();
      jc.addItem("男");
      jc.addItem("女");
      tc=table.getColumnModel().getColumn(1);
      tc.setCellEditor(new DefaultCellEditor(jt1));
      tc=table.getColumnModel().getColumn(2);
      tc.setCellEditor(new DefaultCellEditor(jc));
      
      js=new JScrollPane(table);
      this.getContentPane().add(js,BorderLayout.CENTER);
      this.setSize(700,350);  //必须先添加后显示,不然会不正常的显示的
      this.show();  
    }
    //实现功能
    //1)使用Object模板来创建JTable
    //2) 实现JTable的表格边框的隐藏和显示b及指定列的隐藏和显示
    void addObjectMd()
    {
      pnla=new JPanel();
      jt1=new JTextField(10);
      but=new JButton("设置行高");
      but.addActionListener(new butsj());
      jboxa=new JCheckBox("隐藏",false);
      jboxa.addItemListener(new MyItemListener());
      jboxb=new JCheckBox("删除",false);
      jboxb.addItemListener(new MyItemListener());
      pnla.add(jt1);
      pnla.add(but);
      pnla.add(jboxa);
      pnla.add(jboxb);
         
         md=new TestModela(aa,b);  //使用模板必须数组里有值
         table=new JTable(md);  
         js=new JScrollPane(table);
      pnlb=(JPanel)this.getContentPane();
      pnlb.setLayout(new BorderLayout());
      pnlb.add(pnla,BorderLayout.NORTH);
      pnlb.add(js,BorderLayout.CENTER);
       
      
      this.setSize(700,350);  //必须先添加后显示,不然会不正常的显示的
      this.show(); 
          
    }
    void addVector()
    {
      
      vc=new Vector();
      vc.add("va");
      vc.add("vb");
      vc.add("vc");
      va=new Vector();
      va.add(vc);
      vb=new Vector();
      vb.add("va");
      vb.add("vb");
      vb.add("vc");
      table=new JTable(va,dvb);
      js=new JScrollPane(table);
      this.getContentPane().add(js,BorderLayout.CENTER);
      this.setSize(700,350);  //必须先添加后显示,不然会不正常的显示的
      this.show();  
    }
    void addVectorMd()                                    //czVector模板类
    {     //定义表中的一条数据,相当于一个一维数组
      vc=new Vector();
      vc.add("va");
      vc.add("vb");
      vc.add("vc");
      vc.add(new Boolean(false));
      va=new Vector();
      //将产生的数据增加到va中去
      va.add(vc);
      vb=new Vector();
      //定义JTable的标题
      vb.add("va");
      vb.add("vb");
      vb.add("vc");
      vb.add("vd");
         mdb=new TestModelb(va,vb);
      table=new JTable(mdb);
      //表格已构造完毕
      
      

  7.   


      js=new JScrollPane(table); 
      jt1=new JTextField(10);
         jt2=new JTextField(10);
         jt3=new JTextField(10);
         jt4=new JTextField(10);
             but=new JButton("增加");
         but.addActionListener(new butsj());
         
      pnla=new JPanel();
      pnla.add(jt1);
      pnla.add(jt2);
      pnla.add(jt3);
      pnla.add(jt4);  pnla.add(but);
      
      pnlb=(JPanel)this.getContentPane();
      pnlb.setLayout(new BorderLayout());
      pnlb.add(pnla,BorderLayout.NORTH);
      pnlb.add(js,BorderLayout.CENTER);
      this.setSize(700,350);  //必须先添加后显示,不然会不正常的显示的
      this.show();  
    }  void addVectorSql() 
      {
         DataBase.FillVector("select * from students");
               va=DataBase.data;   //获取数据库中的行数据
               vb=DataBase.title;  //获取数据库中的标题
               
               mdb=new TestModelb(va,vb);
               table=new JTable(mdb);
               js=new JScrollPane(table);
               pnla=new JPanel();
         pnlb=(JPanel)this.getContentPane();
         pnlb.setLayout(new BorderLayout());
         pnlb.add(pnla,BorderLayout.NORTH);
         pnlb.add(js,BorderLayout.CENTER);
         this.setSize(700,350);  //必须先添加后显示,不然会不正常的显示的
         this.show();  
      }    
    ////处理Click事件
    private class butsj implements ActionListener
    {
      public void actionPerformed(ActionEvent e)
      {
         if((e.getSource()==but)&&but.getText().equals("增加"))
         {
                   vc=new Vector();
                   vc.add(jt1.getText());
                      vc.add(jt2.getText());
                         vc.add(jt3.getText());
                      vc.add(new Boolean(jt4.getText().equalsIgnoreCase("true")));//将此 String 与另一个 String 进行比较,不考虑大小写。
                   mdb.AddRow(vc);    
         }
         else if((e.getSource()==but)&&but.getText().equals("设置行高"))
         {
          
         int h=Integer.parseInt(jt1.getText());//得到输入的值
         if(h>0)
            table.setRowHeight(h);//设置table的行高
         }
        
    }
    }//处理CheckBox 的选中事件
      private class MyItemListener implements ItemListener
      {
       public void itemStateChanged(ItemEvent e)
       {
        //先判断事件源 再判断事件源是否被选中
       if(e.getSource()==jboxa)
          if(jboxa.isSelected())
           {
         //设置是否显示表格线
         table.setShowHorizontalLines(true);
         table.setShowVerticalLines(true);
           }
          else
           {
          
             table.setShowHorizontalLines(false);
             table.setShowVerticalLines(false);
             }
         //是否删除分数列
       if(e.getSource()==jboxb)
         if(jboxb.isSelected())//是否选中
         {
          tc=table.getColumnModel().getColumn(2);
          table.getColumnModel().removeColumn(tc);
          table.updateUI();
         }
         else
         {
          table.getColumnModel().addColumn(tc);
         }
        
       }
      }
      }//这是Typec的右括弧,不要搞混啦
    //使用Object创建jtable模板
    class TestModela extends javax.swing.table.DefaultTableModel
    {
    Object[][] data;
    Object[] title;
    TestModela(Object[][] d,Object[] t)
    {
      super(d,t);
      this.data=d;
      this.title=t;
    }
    public Object getValueAt(int r,int c)
    {
      return data[r][c];//得到r行c列的数据
    }
    public Class getColumnClass(int c)
    {
      //将不同的数据类型
      //以对应的形式来显示,大家可以比较这个例子中的显示
      //和前几个例子的区别
      return data[0][c].getClass();
    }
    //设置r行,c列的值为 value
    //当用户在修改JTable中的数据时,能自动调用,并修改data中的数据
    public void setValueAt(Object value, int r,int c)
    {
      data[r][c]=value;
    }
    }
    //使用Vector创建jtable模板
    //对于JTable来说,它是一个二维结构,表中的整个数据由一个Vector
    //表中的每一行也是一个Vector
    class TestModelb extends javax.swing.table.DefaultTableModel
    {
      
    Vector a;
    Vector b;
    TestModelb(Vector a,Vector b)
    {
      super(a,b);
      this.a=a;
      this.b=b;
    }
    public Object getValueAt(int c,int b)   //得到每一列的数据
    {
      Vector v=(Vector)a.get(c);//取出可变数组中的数据
      return v.get(b);         //得到每一行没一列的值
    }
    public Class getColumnClass(int c)
    {
      Vector v=(Vector)a.get(0);
      return v.get(c).getClass();   //将字符串变成各中类型的数据
    }     public boolean isCellEditable(int r,int c)
         {
          //除了第二列不能修改
          //其它都可能修改
          if(c==2)
              return false;
          return true;
            }
    //在自定义的TableModel中重写了AddRow方法
    //向data中增加一个Vector,相当于增加了一条记录
    public void AddRow(Vector row)
    {
      a.add(row);
      this.fireTableDataChanged();//通知所有侦听器,表的所有行单元格值可能已更改,如果不调用,将不会更改
    }//???????????????????如何实现删除行呢
    }
    /*
    // 在pubs数据库中建一个表students
    create table students(st_xh varchar(10),st_name varchar(10),st_age int)
    insert into students
    values('1000 0001','小王',25)
    再建一个Odbc数据源test
    联结pubs
    */
    class DataBase                                                 //cz数据库类
    {
             public static Connection conn=null;//这是一个连接对象
             public static ResultSet rs=null;//这是一个记录集对象
             public static Statement st=null;//这是一个语名对象
             public static PreparedStatement pst=null;//执行带参数据的语句
             public static CallableStatement cst=null;//执行存储过程
             public static ResultSetMetaData rsmd=null;//得到记录集的原信息
             public static Vector data,title,row;
             //在构造函数中去联结数据库
             public DataBase()
             {
                     data=new Vector();
                     title=new Vector();   //必须使用异常捕获,不然程序将报错
                     try{
                             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                             conn=DriverManager.getConnection("jdbc:odbc:test","sa","sa");
                             st=conn.createStatement();
                     }catch(SQLException e)
                     {
                             e.printStackTrace();
                     }catch(Exception e)
                     {
                             e.printStackTrace();
                     }
             }
             //根据strSql来向两个集合增加数据
             //data中存放表中的每条记录,每条记录也放入一个Vector中
             //title中存放表的列的信息,根据ResultSetMetaData来提供
             public static void FillVector(String strSql)
             {
                     int s;
                     int fieldCount;
                     try{
                       data.clear();
                       title.clear();
                     rs=st.executeQuery(strSql);//得到结果集
                     rsmd=rs.getMetaData();//得到结查集的原数据
                     fieldCount=rsmd.getColumnCount();
                     while(rs.next())
                     {
                             row=new Vector();
                             for(int i=0;i<fieldCount;i++)
                             {
                                     row.add(rs.getString(i+1));
                             }
           //及格就增加一个true否则增加一个false
           if(Integer.parseInt(row.get(row.size()-1).toString())>60)
                             row.add(new Boolean(true));
                             else
                             row.add(new Boolean(false));
                             
                             data.add(row);
                             System.out.println(data.size());
                     }
                     for(int i=0;i<rsmd.getColumnCount();i++)
                     {
                             title.add(rsmd.getColumnLabel(i+1));
                     }
                     title.add("Pass");
             }catch(SQLException e)
             {
                     e.printStackTrace();
        }
    }
    }class test
    {
    public static void main(String args[])
    {
      Typec tc=new Typec();     //tc.addObject(); 
        // tc.addObjectMd(); 
          // tc.addVector();
          // tc.addVectorMd();
           tc.addVectorSql();
         
         
        
    }
    }
      

  8.   

    这是把数据库里面的数据读出来用jtable显示出来
    很方便的,
    楼主好好看看吧,等你分数哦
      

  9.   

    zhmt(今天,你给我分了吗?) 
    绝对是一SB
      

  10.   

    下面的代码是以前写的一个小东西,可以执行SQL语句或者有结果集的存储过程。贴上来,你可以参考一下import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.Properties;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JSplitPane;
    import javax.swing.JTable;
    import javax.swing.JTextArea;
    import javax.swing.table.DefaultTableModel;
    public class JConnect extends JFrame implements ActionListener{
    JTextArea jta;
    JTable table;
    JButton sure;
    JButton cancel;
    Connection conn;

    public JConnect(){
    this.addWindowListener(new WindowListener(){ public void windowActivated(WindowEvent e) {

    } public void windowClosed(WindowEvent e) {

    } public void windowClosing(WindowEvent e) {
    closecon();
    System.exit(0);
    } public void windowDeactivated(WindowEvent e) {

    } public void windowDeiconified(WindowEvent e) {

    } public void windowIconified(WindowEvent e) {

    } public void windowOpened(WindowEvent e) {

    }

    });
    JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
    jta = new JTextArea();
    jta.setLineWrap(true);
    jta.setAutoscrolls(true);
    // jta.setText("#sp_sysmon '00:00:05'");
    jsp.add(new JScrollPane(jta),JSplitPane.BOTTOM);
    table = new JTable();
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    jsp.add(new JScrollPane(table),JSplitPane.TOP);
    jsp.setDividerLocation(400);
    sure = new JButton("确定");
    sure.addActionListener(this);
    cancel = new JButton("取消");
    cancel.addActionListener(this);
    JPanel bp = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    bp.add(sure);
    bp.add(cancel);
    JPanel pane = (JPanel) this.getContentPane();
    pane.setLayout(new BorderLayout());
    pane.add(jsp,BorderLayout.CENTER);
    pane.add(bp,BorderLayout.SOUTH);
    initConn();
    this.setBounds(200,140,800,600);
    }

    private void closecon(){
    if(conn != null){
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    } private void initConn() {
    try {
    //这段是连sybase的
    // String ipAddress = "192.168.0.1";
    // Class.forName("com.sybase.jdbc2.jdbc.SybDriver").newInstance();
    // String url = "jdbc:sybase:Tds:" + ipAddress + ":5006";
    // System.out.println(url);
    // conn = DriverManager.getConnection(url, "sa", "sybase");

    //这段是连oracle的,用的thin驱动
    // String ipAddress = "192.168.16.15";
    // Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    // String url = "jdbc:oracle:thin:@" + ipAddress + ":1521:openview";
    // System.out.println(url);
    // conn = DriverManager.getConnection(url, "ultranms", "ultranms");

    //这段是连MSSQL的
    // String ipAddress = "192.168.3.36";
    // Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    // String url = "jdbc:microsoft:sqlserver://" + ipAddress + ":1433";
    // System.out.println(url);
    // conn = DriverManager.getConnection(url, "sa", "");

    //这段是连DB2
    String ipAddress = "192.168.5.37";
    Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
    String url = "jdbc:db2://" + ipAddress + ":50000/test";
    System.out.println(url);
    conn = DriverManager.getConnection(url, "DB2ADMIN", "xh");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    public static void main(String argv[]) {
    JConnect jcc = new JConnect();
    jcc.setVisible(true);
    } public void testConnection(String sql){
    try {
    Statement st = conn.createStatement();
    ResultSet rs = st
    .executeQuery(sql);
    ResultSetMetaData rsmd = rs.getMetaData();
    int count = rsmd.getColumnCount();

    String[] colName = new String[count];
    StringBuffer sbf = new StringBuffer();
    for (int i = 1; i <= count; i++) {
    colName[i-1] = rsmd.getColumnName(i);
    sbf.append(colName[i-1] + ",");
    }
    System.out.println(sbf.toString());
    DefaultTableModel dtm = new DefaultTableModel(colName,0);
    table.setModel(dtm);
    while (rs.next()) {
    Object[] value = new Object[count];
    for (int i = 1; i <= count; i++) {
    value[i-1] = rs.getObject(i);
    }
    dtm.addRow(value);
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }

    private void exesp(final String sql) {
    //
    Thread th = new Thread() {
    public void run() {
    try {
    CallableStatement cs = conn.prepareCall("{ call " + sql
    + "}"); // call spName(?,?,?)
    boolean flag = true;
    int rsIndex = 1;
    ResultSet rs = cs.executeQuery();
    while (flag) {
    ArrayList result = new ArrayList();
    ;
    rs = cs.getResultSet();
    if (rs != null) { // todo 应该为needRsIndex== rsIndex
    ResultSetMetaData metaData = null;
    try {
    if (rs != null)
    metaData = rs.getMetaData();
    } catch (Exception e) {
    e.printStackTrace();
    }
    int columnCount = metaData.getColumnCount();
    if (columnCount > 0) {
    // 使用元数据获得关于结果集列的信息
    while (rs.next()) {
    // 处理结果
    Properties recordInfo = new Properties();
    if (result == null)
    result = new ArrayList();
    for (int i = 1; i < columnCount + 1; i++) {
    String dbName = metaData
    .getColumnLabel(i);
    if (dbName != null)
    dbName = dbName.trim();
    recordInfo.put(dbName.toUpperCase(), rs
    .getObject(i));
    }
    result.add(recordInfo);
    }
    if (result != null && !result.isEmpty()) {
    System.out.println("结果集:" + rsIndex + "=="
    + result);
    rsIndex = rsIndex + 1;
    }
    }
    }
    boolean more = cs.getMoreResults();
    if (!more)
    break;
    }
    if (rs != null)
    rs.close();
    cs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    };
    th.start();
    try {
    th.join(10000);
     conn.close();
    } catch (Exception e) {
    }
    //       
    } public void actionPerformed(ActionEvent e) {
    if (e.getSource() == sure) {
    if (jta.getText().startsWith("#"))
    exesp(jta.getText().substring(1));
    else
    testConnection(jta.getText());
    } else if (e.getSource() == cancel) {
    closecon();
    System.exit(0);
    }
    }}