随笔-0  评论-0  文章-2  trackbacks-0

今天又开始了好久的数据库连接练习,差不多练得差不多了,准备好好复习以迎接即将到来的期末考试(不能挂科啊)。这是废话,开始我的总结吧。

 

  采用的java 语言 eclipse工具,连接的是MM Sqlserver数据库ql语句,会将返回的结果返回的table的控件对象上。

右面的是一个tree汇集了来自数据库的学生信息。

其实就是为了练习数据库和table以及tree的结合,功能较简单没来得及优化。

 就喜欢简介的说明加图片,就来个我的类图吧

 

B

1 连接数据库:

        在建立工程后,需要为驱动包构建路径,然后获得一个连接对象:

    public Connection getConn()

    {

       String url="jdbc:sqlserver://localhost:1433;DatabaseName=Demo;";

       String userName="root";

    String password="root";    

    try {                 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");                   conn=DriverManager.getConnection(url,userName,password);

              } catch (ClassNotFoundException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

                  return null;

              } catch (SQLException e) {

                  e.printStackTrace();

                  return null;

              }            

           return conn;     

    }

 

 

 

2查询数据库:

 当输入一行sql语句(别输错了,否则会报错的,这需要优化),就会将sql语句对应的结果集返回。

package sql;

 

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.util.Vector;

 

import javax.swing.table.AbstractTableModel;

 

public class ResultsetTableModel extends AbstractTableModel {

 

    String[] columNames =null;   //列名

    Vector data = new Vector();

 

 

    public void SetResultSet(ResultSet rs) throws SQLException {

 

       ResultSetMetaData rsmd =   (ResultSetMetaData) rs.getMetaData();

      

       columNames =new String[rsmd.getColumnCount()];//

       for(int i=0;i<rsmd.getColumnCount();i++)

       {

           columNames[i]=rsmd.getColumnName(i+1);//没有第0

       }

       data.clear();//Before use the Vector data ,we should clear it

 

       while(rs.next())//每一列的信息

       {

           String [] rowIn = new String[rsmd.getColumnCount()];

 

           for(int i=0;i<rsmd.getColumnCount();i++)

           {

              rowIn[i] = rs.getString((i+1));

           }

           data.add(rowIn)

       }

    }

       public int getRowCount() {//得到行数

       // TODO Auto-generated method stub

       return data.size();

    }

    @Override

    public int getColumnCount() {//得到列数

       // TODO Auto-generated method stub

       return columNames.length;

    }  

     * 获取第rowIndex行,第column列的

     */

    public String getValueAt(int rowIndex, int columnIndex) {

       // TODO Auto-generated method stub

       return ((String []) data.elementAt(rowIndex))[columnIndex];

    }

    public String getColumnName(int columIndex) {

       return columNames[columIndex];

    }

}

 

 

上面的是个类:由于数据库查询的结果为ResultSet是一个结果集需要一定的处理才可以将数据显示到table的控件对象上。

 

 

好了这个类建立好了就需要被调用:

 

public void getRs () throws SQLException {

      

       sqlServerTest ss = new sqlServerTest();

       String strSql=textArea.getText();

       ResultSet rs =ss.excuteQurre(strSql);

       rsModel.SetResultSet(rs);

       table.setModel(rsModel);

    }

在数据库操作类sqlServerTest 需要对应有:

public ResultSet excuteQurre(String strSql) {

       ResultSet rs;

       try {

           con=getcon();

           PreparedStatement psmt=con.prepareStatement(strSql);

        rs= psmt.executeQuery();

       } catch (SQLException e) {e.printStackTrace();   return null;

       }

       return rs;

           }

O了,这样就可以将数据结果返回到table上。

  怎么将数据库上的数据返回到一个tree控件对象。在巩固一下啊:

 先通过sql语句得到一个结果集,再将结果集进行Model化,然后就可以设置table的结果集显示。

 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

 

将数据显示在一个tree控件对象上:

            首先先看一个tree控件的简单用法:

构造函数:

/*

JTree的构造函数:

JTree()

JTree(Hashtable value)

JTree(Object[] value)//只有这个构造函数可以创建多个根结点

JTree(TreeModel newModel)

JTree(TreeNode root)

JTree(TreeNode root, boolean asksAllowsChildren)

JTree(Vector value)

 

*/

private void getTreeNodes(){

       sqlServerTest ss= new sqlServerTest();

       String strSql="select distinct sdept from student";

       ResultSet rs = ss.excuteQurre(strSql);   

       try {         while(rs.next())

           {         

              String dept = rs.getString(1);           

              DefaultMutableTreeNode deptNode = new DefaultMutableTreeNode(dept);            

              ResultSet rs_dept= getStudents(dept);

              while(rs_dept.next())              {

                  String strStu = rs_dept.getString("sname");

                  System.out.println(strStu);

                  DefaultMutableTreeNode stuNode = new DefaultMutableTreeNode(strStu);

                  deptNode.add(stuNode);                

              }

              root.add(deptNode);            

           }

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }     

    }

这就算我的学校心得了,其他的不想多写。源程序如下:

     

package sql;

/*

JTree的构造函数:

JTree()

JTree(Hashtable value)

JTree(Object[] value)//只有这个构造函数可以创建多个根结点

JTree(TreeModel newModel)

JTree(TreeNode root)

JTree(TreeNode root, boolean asksAllowsChildren)

JTree(Vector value)

 

*/

import java.awt.BorderLayout;

 

public class tableView extends JDialog implements ActionListener,TreeSelectionListener {

 

    /**

     *

     */

   

    private final JPanel contentPanel = new JPanel();

    private JTable table;

    private JScrollPane scrollPane;

    private JTextArea textArea = new JTextArea();

    private JButton button = new JButton("执行");

    private JTree tree ;

    private DefaultMutableTreeNode root =new DefaultMutableTreeNode();

    private ResultsetTableModel rsModel = new ResultsetTableModel();

 

    /**

     * Launch the application.

     */

    public static void main(String[] args) {

       try {

           tableView dialog = new tableView();

           dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

           dialog.setVisible(true);

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

    public void init(){

       setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

       scrollPane = new JScrollPane();

       table = new JTable();

    }

 

    /**

     * Create the dialog.

     * @throws SQLException

     */

    public tableView() throws SQLException {

       setBounds(100, 100, 577, 487);

       getContentPane().setLayout(null);

      

       init();

       table.setBounds(30, 24, 329, 175);

      

      

       scrollPane.setBounds(47, 214, 294, 185);

       scrollPane.setViewportView(table);

       getContentPane().add(scrollPane);     

      

      

       textArea.setWrapStyleWord(true);

       textArea.setRows(10);

       textArea.setBounds(66, 49, 275, 125);

        getContentPane().add(textArea);

      

      

       button.setBounds(156, 184, 93, 23);

       button.addActionListener(this);

       getContentPane().add(button);

       getTreeNodes();

      

       JScrollPane scrollPane_1 = new JScrollPane();

       scrollPane_1.setBounds(351, 77, 164, 326);

       getContentPane().add(scrollPane_1);

      

       tree = new JTree(root);

       scrollPane_1.setViewportView(tree);

      

       tree.addTreeSelectionListener(this);

      

      

      

       setVisible(true);

      

      

    }

    public void getRs () throws SQLException {

      

       sqlServerTest ss = new sqlServerTest();

       String strSql=textArea.getText();

       ResultSet rs =ss.excuteQurre(strSql);

       rsModel.SetResultSet(rs);

       table.setModel(rsModel);

    }

    private void getTreeNodes()

    {

       sqlServerTest ss= new sqlServerTest();

       String strSql="select distinct sdept from student";

       ResultSet rs = ss.excuteQurre(strSql);

      

      

       try {

           while(rs.next())

           {         

              String dept = rs.getString(1);           

              DefaultMutableTreeNode deptNode = new DefaultMutableTreeNode(dept);            

             

             

              ResultSet rs_dept= getStudents(dept);

              while(rs_dept.next())              {

                  String strStu = rs_dept.getString("sname");

                  System.out.println(strStu);

                  DefaultMutableTreeNode stuNode = new DefaultMutableTreeNode(strStu);

                  deptNode.add(stuNode);

                 

              }

              root.add(deptNode);

             

           }

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

      

    }

    public ResultSet getStudents(String dept)

    {

       sqlServerTest ss= new sqlServerTest();

       String strSql="select * from student where sdept='"+dept+"'" ;

       ResultSet rs = ss.excuteQurre(strSql);

       return rs;   

    }

   

    @Override

    public void actionPerformed(ActionEvent e) {

       // TODO Auto-generated method stub

       if(e.getActionCommand().equals("执行"))

       {

           try {

              table.repaint();

              getRs();

           } catch (SQLException e1) {

              // TODO Auto-generated catch block

              e1.printStackTrace();

           }

       }     

    }

    @Override

    public void valueChanged(TreeSelectionEvent e) {

       // TODO Auto-generated method stub

//     System.out.println(e.getPaths());

      

       JTree tree = (JTree) e.getSource();      

       // 利用JTreegetLastSelectedPathComponent()方法取得目前选取的节点.

       DefaultMutableTreeNode selectionNode =

           (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();

 

       String nodeName = selectionNode.toString();

       System.out.println(nodeName);

      

      

    }

}

 

                                                      2011-6-10

posted on 2011-06-24 14:05 ownWell 阅读(58) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: