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

📄 databaseoperation.java

📁 Jbuilder 边写的世界杯足球赛成绩统计 ~~新手上路 多多关照!!
💻 JAVA
字号:
//【例11.2】  连接指定数据库并获得数据库属性信息。
//【例11.3】  执行数据操纵的SQL语句。
//  数据库操作类

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.*;
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语句
        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表。
//【例13.1】  输入并分类浏览参赛队信息。

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

        return results;
    }


        //执行包含集函数的数据查询SELECT语句
    public int selectCount(String sql) throws SQLException
    {
        Statement statement = this.connection.createStatement();
        ResultSet resultset = statement.executeQuery(sql);           //执行数据查询SELECT语句
        resultset.next();
        int count = resultset.getInt(1);
        resultset.close();
        statement.close();
        return count;
    }


        //执行数据查询的SELECT语句,参数table 指定表名,conditions 指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
        //执行成功返回数据结果集,否则返回null。
    public void select(String table, String conditions, String sort_column, DefaultTableModel tableModel) throws SQLException
    {
        if(table!=null && table!="")
        {
            String sql = "SELECT * FROM " + table;                   //查询全部列时
            if(conditions!=null && conditions!="")
                sql +=" WHERE " + conditions;                        //增加查询条件
            sql +=" ORDER BY "+ sort_column ;                        //按指定列的升序排序
//            sql +=" ORDER BY '#1'" ;                        //默认按第1列的升序排序,SQL Server不支持#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();             //获得列数

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

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

}


/*
①  执行数据插入INSERT语句的方法
在DataBaseOperation类中添加下列insert()方法。insert()方法将参数指定的表、列及列值转换成一条数据插入的INSERT语句,参数table指定表名,columns[]数组指定多个列,values[]数组指定多个列对应的取值,执行成功返回1,否则返回0。该方法声明如下。


②  执行数据查询SELECT语句的方法
在DataBaseOperation类中添加下列select()方法。select()方法将参数指定的表及条件转换成一条数据查询的SELECT语句,参数table指定表名,conditions指定WHERE子句的查询条件,多个条件时用逻辑运算符连接。
由于调用executeQuery()方法执行SELECT语句返回一个结果集ResultSet对象,这个对象需要在保持数据库连接的状态才能访问,而select()方法调用是不基于数据库连接的,所以,select()方法不能简单返回一个ResultSet对象,需要将ResultSet对象中的数据读出并转移到一个二维数组Object[][]中。该方法声明如下。

其中,将ResultSet对象属性设置为可滚动的,按从前向后的方向对结果集访问了两次,第一次循环获得结果集的总行数,以确定二维数组的维数,再调用beforeFirst()方法使结果集指针回到第1行之前,准备再一次对结果集进行访问。
*/

/*


        //执行数据查询的SELECT语句,参数table 指定表名,conditions 指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
        //执行成功返回数据结果集,否则返回null。
    public Object[][] select(String table, String conditions) throws SQLException
    {
        Object[][] resultobj = null;
        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();             //获得列数

                resultobj = new String[rowCount][columnCount];       //按行列数分配二维数组空间

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

        return resultobj;
    }

        //数据查询,没有条件,返回表中全部数据
    public Object[][] select(String table) throws SQLException
    {
        return select(table,"");
    }




        //执行INSERT语句插入一行数据,参数table指定表名,columns[]数组指定多个列,values[]数组指定多个列对应的取值
        //执行成功返回1,否则返回0
    public int insert(String table, String[] columns, Object[] values) throws SQLException
    {
        int result = 0;
        String sql = "INSERT INTO " + table + " ";         //转换表名
        if (columns!=null)                                 //转换多个列名
        {
            sql += " (" + columns[0];
            for(int i=1;i<columns.length;i++)
                sql += " , " + columns[i];
            sql += ")";
        }
        
        sql += " VALUES ('"+ values[0]+"'";                     //转换多个列值
        for(int i=1;i<values.length;i++)
            sql += " , '" + values[i] +"'";
        sql += ")";

        System.out.println(sql);

        Statement statement = this.connection.createStatement(); 
        result = statement.executeUpdate(sql);             //执行数据插入INSERT语句
        statement.close();
        return result;
    }

        //数据插入,没有指定列,values[]数组指定所有列的取值
    public int insert(String table, Object[] values) throws SQLException
    {
        return insert(table, null, values);
    }

*/

⌨️ 快捷键说明

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