Test Kiểm Tra Thực Hành Cuối Kì JAVA2


Đây là một bài mẩu khá đơn giản cho phần kiểm tra thực hành cuối kì sắp tới .

Theo mình biết thì cô chỉ cần biết mình thêm xóa sửa kết nối thành công là trên 6 rồi. 4 điểm còn lại cho việc load table lên vào thao tác y chan vậy.

hôm nay mình demo lại bài số 2 và củng giới thiệu các bạn đến cách load table theo DatabaseMetadata và ResultSetMetadata cách này khá hay nếu ai yêu thích có thể phát triển lớp này lên nửa thì rất là tốt.

đây là hình ảnh của việc tạo TableModel:

/**
 *
 * @author kobe
 */
public class DataTable extends AbstractTableModel {
    // cai nay la lay du lieu

    Object[][] contents;
    // mang String nay de lay ten cua column trong table( ResultsetMetadata)
    String[] columnNames;
    // lưu trữ loại của column
    Class[] columnClasses;

    public DataTable(Connection cnDetails,
            String EmployeeDetails) throws Exception {

        getTableContents(cnDetails, EmployeeDetails);
    }

    protected void getTableContents(Connection cnDetails,
            String EmployeeDetails) throws SQLException {
        DatabaseMetaData meta = cnDetails.getMetaData();
        // lay mo ta cua cac cot trong table
        ResultSet rs = meta.getColumns(null, null, EmployeeDetails, null);

        // Khai báo 2 đối tượng của ArrayList để lưu trữ tên của column
        //và loại của nó
        ArrayList colNameList = new ArrayList();
        ArrayList colClassesList = new ArrayList();

        while (rs.next()) {
            colNameList.add(rs.getString("COLUMN_NAME"));
            int dbType = rs.getInt("DATA_TYPE");
            // kiem tra loai du lieu duoc dua vao Arralist colClassesList
            switch (dbType) {
                case Types.INTEGER:
                    colClassesList.add(Integer.class);
                    break;
                case Types.FLOAT:
                    colClassesList.add(Float.class);
                    break;
                case Types.DOUBLE:
                case Types.REAL:
                    colClassesList.add(Double.class);
                    break;
                case Types.DATE:
                case Types.TIME:
                case Types.TIMESTAMP:
                    colClassesList.add(Date.class);
                    break;
                default:
                    colClassesList.add(String.class);
                    break;
            }
        }
        // ta luu tru~ kich thuoc cua namelist vào đối tượng columnNames
        //được khaibáo phía trên, va luu tru~ du~ lieu vao String Array đó
        columnNames = new String[colNameList.size()];
        // ta chuyen ArrayList nay` thanh Mot Mang String cho columnNames;
        colNameList.toArray(columnNames);
        //================================================================
        // Tuong tu voi mot Mang? Class
        columnClasses = new Class[colClassesList.size()];
        colClassesList.toArray(columnClasses);
        //==================================================
        // Lấy tấc cả data từ table và đặt nó vào
        //trong Object[][] Conntens array
        Statement st = cnDetails.createStatement();
        rs = st.executeQuery("Select * from " + EmployeeDetails);
        ArrayList rowList = new ArrayList();

        while (rs.next()) {
            ArrayList cellList = new ArrayList();
            for (int i = 0; i < columnClasses.length; i++) {
                Object cellValue = null;
                // Kiểm tra loại dữ liệu của mỗi phần tữ trong ArralistClass
                // Nếu tìm thấy ta lưu trũ vào class Object;
                if (columnClasses[i] == String.class) {
                    cellValue = rs.getString(columnNames[i]);
                } else if (columnClasses[i] == Integer.class) {
                    cellValue = new Integer(rs.getInt(columnNames[i]));
                } else if (columnClasses[i] == Float.class) {
                    cellValue = new Float(rs.getInt(columnNames[i]));
                } else if (columnClasses[i] == Double.class) {
                    cellValue = new Float(rs.getDouble(columnNames[i]));
                } else if (columnClasses[i] == Date.class) {
                    cellValue = rs.getDate(columnNames[i]);
                } else {
                    System.out.println("Không thể gán : " + columnNames[i]);
                }
                // them vào
                cellList.add(cellValue);
            }
            // tạo một mảng đối tượng chưa cellist;
            Object[] cells = cellList.toArray();
            rowList.add(cells);
        }
        // thoát khỏi vòng while
        // tao sữ dụng mảng 2 chiều Object ở trên
        contents = new Object[rowList.size()][];
        for (int i = 0; i < contents.length; i++) {
            contents[i] = (Object[]) rowList.get(i);
        }
        System.out.println("Tao xong model với " + contents.length + "row(s)");

    }// ket thuc

    @Override
    public int getRowCount() {
        return contents.length;
    }

    @Override
    public int getColumnCount() {
        if (contents.length == 0) {
            return 0;
        } else {
            return contents[0].length;
        }
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return contents[rowIndex][columnIndex];
    }
    // gọi trả về loại dữ liệu của mổi colmun

    @Override
    public Class getColumnClass(int col) {
        return columnClasses[col];
    }
    // phuong thức này trả về tên của column

    @Override
    public String getColumnName(int col) {
        return columnNames[col];
    }
}

ai biết cách load bảng thì cứ down về mà tham khảo mình dám chắc sẻ không hối hận khi đọc code này đâu =]] =]] . với lại bài này mình không thao tác trên ResultSet để các bạn học trung bình có thể làm cho nhanh và dể. ^^!

Giao diện đề bài .

Bài này mình củng sử dụng sự kiện click của chuột luôn nên các bạn có thể xóa di mất cái button F-P-N-L cho đở phiền phức nha. hy vọng các bạn có thể tham khảo và làm bài kiểm tra tốt .

Code bài viết : Download

CSDL ( Kết nối bằng Data Source ) :

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: