⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 databasetest2.java

📁 java中关于数据库的一些范例
💻 JAVA
字号:
import javax.swing.*;
import java.awt.*;
//import java.awt.event.WindowAdapter;
//import java.awt.event.WindowEvent;
//import java.awt.event.ActionListener;
import javax.swing.table.*;
import java.applet.Applet;
import java.sql.*;
//import javax.swing.event.*;
import java.awt.event.*;
import java.util.Vector;

//import javax.swing.table.AbstractTableModel;
//import javax.swing.event.TableModelEvent;
import java.io.*;

public class DatabaseTest1{
	public static void main(String args[]){
	/*声明一个JFrame对象,标题为"FancyTable"*/
    JFrame frame=new JFrame("FancyTable");
    /*声明一个JLabel对象,用于放在JFrame正上方*/
    JLabel titleLabel=new JLabel("fancy talbe demo!");
    
/*声明了两个JPanel对象,mainPanel用于放置显示数据所用的表格,subPanel用于放置上面的sortButton和queryButton两个按钮*/
    JPanel mainPanel=new JPanel(false);
     
        /*声明一个JScrollPane对象tablePanel,用于使得生成的表格带有滚动条*/
        JScrollPane tablePanel;
        
/*为sorButton注册事件监听器,单击该按钮就会出现排序对话框,也就是图13-7所示的界面*/
        
        /*调用本类中的createTable()方法生成表格*/
        tablePanel=createTable();
        mainPanel.add(tablePanel);
        /*上面的这几行代码用于控制mainPanel面板的组件布局*/
/*为Frame对象注册窗口事件监听器,这样就可以单击界面右上方的关闭按钮退出程序的运行*/
        frame.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){System.exit(0);}});
        /*将mainPanel添加到Frame中的Center位置*/
        frame.getContentPane().add("Center",mainPanel);
        /*将sortButton和queryButton添加到subPanel面板中*/
       
        /*将subPanel添加到Frame中的South位置*/
        
        /*使Frame以最紧凑的样式显示*/
        frame.pack();
        /*使Frame可见*/
        frame.setVisible(true);
    }
/**createTable() creates a table and add the table to a JScrollPane,then return the JScrollPane*/
    public static JScrollPane createTable(){
        TableModel stuTable;
        JDBCAdapter dt;
        /*声明Vector型变量rowVector,用于存放读取到的信息*/
   		Vector rowVector;
   		/*声明JTable对象,用于会创建一个显示读取信息的表格*/
    	JTable table;
/*根据从主界面中获得的boolean型变量fileCon的值决定:是按照文件流方式还是按照JDBC访问数据库的方式读取的数据创建表格*/
        /*通过JDBC访问数据库获得的数据创建表格*/
        	/*url指定需要访问的数据库名称*/
            String url="jdbc:odbc:MyDatabase";
            /*driver指定访问数据库的驱动程序的名称*/
            String driver="sun.jdbc.odbc.JdbcOdbcDriver";
            /*user和password用于指定访问数据库时使用的用户名和密码*/
            String user="sa";
            String password="";
            /*query代表需要执行的SQL语句*/
            String query="select * from student";
            /*通过构造一个JDBCAdapter类的对象来访问数据库*/
            dt=new JDBCAdapter(url,driver,user,password);
/*对指定的数据库MyDatabase执行SQL语句,executeQuery方法是类JDBCAdapter中定义的*/
            dt.executeQuery(query);
            /*将取得的结果赋给stuTable对象*/
            stuTable=dt;
            /*根据取得的数据创建表格*/
            table=new JTable(stuTable);
            /*用矢量rowVector存放取得的数据行向量*/
            rowVector=dt.rows;
        
        /*使得表格各列的大小设置为可以自动调节*/
        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        /*根据创建的表格生成JScrollPane对象,这样表格就可以带有滚动条*/
        JScrollPane scrollpane=new JScrollPane(table);
        return scrollpane;
    }
}


class JDBCAdapter extends AbstractTableModel {
    /*声明一个Connection对象,用于和数据库建立连接*/
    Connection          connection;
    /*声明一个Statement对象,用于对数据库执行SQL语句*/
    Statement           statement;
    /*声明一个ResultSet对象,用于存放SQL语句执行的结果*/
    ResultSet           resultSet;
    /*定义一个字符串数组,用于存放结果集中的列数*/
    String[]            columnNames = {};
    /*声明一个Vector对象,用于将取得的数据按行放在rows中*/
    Vector		rows = new Vector();
    /*声明ResultSetMetaData对象,用于从ResultSet对象中获得数据属性和类型*/
    ResultSetMetaData   metaData;
    /**
     *create a connection to the database specified by parameter url.url parameter is
 *the name of database,driverName parameter is the name of a driver,which JDBC used
     *to connect to database.
     */
     /*下面是构造方法,四个参数分别代表要连接的数据库,驱动程序,用户名和密码*/
    public JDBCAdapter(String url, String driverName,
                       String user, String passwd) {
        try {
        	/*返回driverName字符串对应的类对象*/
            Class.forName(driverName);
            /*输出"Opening db connection"提示信息*/
            System.out.println("Opening db connection");
			/*下面的语句进行数据库的连接*/
            connection = DriverManager.getConnection(url, user, passwd);
            /*创建SQL语句*/
            statement = connection.createStatement();
        }
        catch (ClassNotFoundException ex) {
            /*输出没有找到数据库驱动程序类的信息*/
            System.err.println("Cannot find the database driver classes.");
            System.err.println(ex);
        }
        catch (SQLException ex) {
        	/*输出不能连接到数据库的信息*/
            System.err.println("Cannot connect to this database.");
            System.err.println(ex);
        }
     }
     /**
      * create a table model by executing  sql statement.
      */
      /*executeQuery(String query)方法执行字符串参数query指定的语句*/
    public void executeQuery(String query) {
    	/*if语句中的条件表示数据库连接不成功或者没有创建SQL语句*/
        if (connection == null || statement == null) {
            System.err.println("There is no database to execute the query.");
            return;
        }
        try {
        	/*执行SQL语句,将结果放在结果集对象resultSet中*/
            resultSet = statement.executeQuery(query);
/*通过getMetaData()方法将resultSet中的数据传到ResultSetMetaData对象metaData中*/
            metaData = resultSet.getMetaData();
            /*获得metaData中数据的列数*/
            int numberOfColumns =  metaData.getColumnCount();
            /*根据取得的列数创建字符串数组,数组的长度就是上面得到的列数*/
            columnNames = new String[numberOfColumns];
            /*将取得数据的各列名称赋给字符串数组中的各元素*/
            for(int column = 0; column < numberOfColumns; column++) {
                columnNames[column] = metaData.getColumnLabel(column+1);
            }
            /*对rows进行初始化*/
            rows = new Vector();
            while (resultSet.next()) {
            	/*声明一个Vector对象newRow,用于存放取得结果集中一行数据*/
                Vector newRow = new Vector();
                /*利用一个for循环,将结果集中一行数据放到newRow矢量中*/
                for (int i = 1; i <= getColumnCount(); i++) {
	            newRow.addElement(resultSet.getObject(i));
            	}
/*将上面的矢量newRow作为矢量rows中的一个元素,这样rows中的一个元素就代表结果集中的一行数据*/
                rows.addElement(newRow);
            }
            /*将发生的事件提交给监听器*/
            fireTableChanged(null); // Tell the listeners a new table has arrived.
        }
        catch (SQLException ex) {
            System.err.println(ex);
        }
    }
    /*将前面生成的结果集对象\SQL语句对象和数据库连接对象关闭*/
    public void close() throws SQLException {
        System.out.println("Closing db connection");
        resultSet.close();
        statement.close();
        connection.close();
    }
    /*通过finalize()执行上面的close()方法*/
    protected void finalize() throws Throwable {
        close();
        super.finalize();
    }
    /*重写getColumnName方法,获得参数column指定列的名称*/
    public String getColumnName(int column) {
        if (columnNames[column] != null) {
            return columnNames[column];
        } else {
            return "";
        }
    }
/**
     * Implementation of the TableModel Interface
     */
    /*重写getColumnCount方法,获得列数*/
    public int getColumnCount() {
        return columnNames.length;
    }
/**
     * Implementation of the TableModel Interface
     */
     /*重写getRowCount方法,获得行数*/
    public int getRowCount() {
        return rows.size();
    }
/**
     * Implementation of the TableModel Interface
     */
    /*重写getValueAt方法,获得参数指定位置的对象*/
    public Object getValueAt(int aRow, int aColumn) {
        Vector row = (Vector)rows.elementAt(aRow);
        return row.elementAt(aColumn);
    }
/**
     * Implementation of the TableModel Interface
     */
    /*获得指定列上对象的类型*/
    public String dbRepresentation(int column, Object value) {
        int type;
        if (value == null) {
            return "null";
        }
        try {
            type = metaData.getColumnType(column+1);
        }
        catch (SQLException e) {
            return value.toString();
        }
        switch(type) {
        case Types.INTEGER:
        case Types.DOUBLE:
        case Types.FLOAT:
            return value.toString();
        case Types.BIT:
            return ((Boolean)value).booleanValue() ? "1" : "0";
        case Types.DATE:
            return value.toString(); // This will need some conversion.
        default:
            return "\""+value.toString()+"\"";
        }
    }
/**
     * Implementation of the TableModel Interface
     */
     /*重写setValueAt方法,设置指定位置上对象的值*/
    public void setValueAt(Object value, int row, int column) {
        try {
        	/*获得指定列的名称*/
            String tableName = metaData.getTableName(column+1);
            if (tableName == null) {
                System.out.println("Table name returned null.");
            }
            String columnName = getColumnName(column);
            /*使用字符串变量query指定SQL语句*/
            String query =
                "update "+tableName+
                " set "+columnName+" = "+dbRepresentation(column, value)+
                " where ";
            for(int col = 0; col<getColumnCount(); col++) {
                String colName = getColumnName(col);
                if (colName.equals("")) {
                    continue;
                }
                if (col != 0) {
                    query = query + " and ";
                }
                query = query + colName +" = "+
                    dbRepresentation(col, getValueAt(row, col));
            }
            System.out.println(query);
            System.out.println("Not sending update to database");
        }
        catch (SQLException e) {
            System.err.println("Update failed");
        }
        Vector dataRow = (Vector)rows.elementAt(row);
        dataRow.setElementAt(value, column);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -