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

📄 databaseoperation.java

📁 分类浏览学生基本信息表;;哈哈
💻 JAVA
字号:
//【例11.2】  连接指定数据库并获得数据库属性信息。
//【例11.3】  执行数据操纵的SQL语句。
//  数据库操作类
//实验11 按省份分类浏览student数据库中的stuinfo表。

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import javax.swing.table.*;

public class DataBaseOperation
{
    private Connection connection;                         //数据库连接对象 

        //构造方法,连接指定数据库。4个参数分别指定JDBC驱动程序、数据库URL、用户名和口令
    public DataBaseOperation(String driver,String url, String user, String password)
        throws ClassNotFoundException,SQLException
    {
        this.connection = null;
        Class.forName(driver);                             //指定JDBC驱动程序
        this.connection = DriverManager.getConnection(url,user,password); //返回数据库连接对象
    }

    public DataBaseOperation(String driver, String url) throws ClassNotFoundException,SQLException
    {
        this.connection = null;
        Class.forName(driver);
        this.connection = DriverManager.getConnection(url);
    }

    public void finalize() throws SQLException             //析构方法,关闭数据库连接
    {
        this.connection.close();
    }

    public String getDBAbout() throws SQLException         //获得所连接数据库的属性信息,返回字符串
    {
        String message = "";
        DatabaseMetaData dbmd = this.connection.getMetaData();
        message = "JDBC驱动程序:" + dbmd.getDriverName() +" "+ dbmd.getDriverVersion() + "\r\n" +
                  "JDBC URL:" + dbmd.getURL() + "\r\n" +
                  "数据库:" + dbmd.getDatabaseProductName() + "\r\n" +
                  "数据库版本:" + dbmd.getDatabaseProductVersion() + "\r\n"+
                  "用户名:" + dbmd.getUserName() + "\r\n";
        return message;
    }

//【例11.3】  执行数据操纵的SQL语句。

        //执行数据更新的SQL语句,包括INSERT、UPDATE、DELETE语句
        //执行成功返回所影响的行数,否则返回0
    public int dataUpdate(String sql) throws SQLException
    {
        Statement statement = this.connection.createStatement(); 
        int result = statement.executeUpdate(sql);
        statement.close();
        return result;
    }

        //执行数据查询的SELECT语句,参数table 指定表名,conditions 指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
        //执行成功返回数据结果集,否则返回null。
    public void select(String sql) throws SQLException
    {
        Statement statement = this.connection.createStatement();
        ResultSet resultset = statement.executeQuery(sql);           //执行数据查询SELECT语句
        if (resultset!=null)
        {
            ResultSetMetaData rsmd = resultset.getMetaData();        //返回元数据对象
            int columnCount = rsmd.getColumnCount();                 //获得列数
            for(int j=1;j<=columnCount;j++)
                System.out.print(rsmd.getColumnLabel(j)+"  ");       //获得列名
//            System.out.println();
            
            while(resultset.next())                                  //从前向后访问每行
            {
                for(int j=1;j<=columnCount;j++)                      //获得每列值
                    System.out.print(resultset.getString(j)+"  ");   //获得当前行指定列的值
                System.out.println();
            }
        }
        resultset.close();
        statement.close();
    }
    
//实验11 按省份分类浏览student数据库中的stuinfo表。

        //执行数据查询的SELECT语句,参数table 指定表名,conditions 指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
        //执行成功返回数据结果集,否则返回null。
    public String[] selectDistinct(String table, String column) throws SQLException
    {
        String[] results=null; 
        if(table!=null && table!="")
        {
            String sql = "SELECT DISTINCT "+column+" FROM "+table+" ORDER BY "+column;   //获得指定列不重复的值

            Statement statement = this.connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                  ResultSet.CONCUR_READ_ONLY);       //设置结果集属性为可滚动、只读
            ResultSet resultset = statement.executeQuery(sql);       //执行数据查询SELECT语句
            if (resultset!=null)
            {
                int rowCount=0;
                while(resultset.next())                              //获得结果集总行数
                    rowCount++;
        
                results = new String[rowCount];                      //按列数分配一维数组空间
                resultset.beforeFirst();                             //移动指针到第一行之前
                int i=0;
                while(resultset.next())                              //获得每列数据
                {
                    results[i] = resultset.getString(1);             //获得当前行指定列的值
                    i++;
                }
            }
            resultset.close();
            statement.close();
        }
        else
            throw new SQLException("表名不能为空。");

        return results;
    }

        //执行数据查询的SELECT语句,参数table 指定表名,conditions 指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
        //执行成功返回数据结果集,否则返回null。
    public void select(String table, String conditions, DefaultTableModel dataModel) throws SQLException
    {
        if(table!=null && table!="")
        {
            String sql = "SELECT * FROM " + table;                   //查询全部列时
            if(conditions!=null && conditions!="")
                sql +=" WHERE " + conditions;                        //增加查询条件
            sql +=" ORDER BY '#1'" ;                                 //默认按第1列的升序排序
//            System.out.println(sql);

            Statement statement = this.connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                  ResultSet.CONCUR_UPDATABLE);       //设置结果集属性为可滚动、只读
            ResultSet resultset = statement.executeQuery(sql);       //执行数据查询SELECT语句
            if (resultset!=null)
            {
                int rowCount=0;
                while(resultset.next())                              //获得结果集总行数
                    rowCount++;
        
                ResultSetMetaData rsmd = resultset.getMetaData();    //返回元数据对象
                int columnCount = rsmd.getColumnCount();             //获得列数

                dataModel.setRowCount(rowCount);
                dataModel.setColumnCount(columnCount);

                resultset.beforeFirst();                             //移动指针到第一行之前
                int i=0;
                while(resultset.next())                              //获得每列数据
                {
                    for(int j=1;j<=columnCount;j++)
                        dataModel.setValueAt(resultset.getString(j), i, j-1);//获得当前行指定列的值
                    i++;
                }
            }
            else
                dataModel.setRowCount(0);
            resultset.close();
            statement.close();
        }
        else
            throw new SQLException("表名不能为空。");
    }

}

⌨️ 快捷键说明

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