MySQL+Java——数据库查询操作

9 篇文章 0 订阅

使用Java对MySQL数据库中的数据进行查询是非常常见的操作,在查询过程中,也会有查询所有数据库的的名称、某数据库中所有数据表的名称、某数据表所有字段的名称、某查询语句中字段的名称等需求,本文主要解决以上查询时不常见的需求。

在前期的博客中已经讲解了如何连接数据库,这里既不在赘述,如有需要,请参考以下文章:
JAVA连接MySQL数据库操作

数据库连接代码如下:

class DataBaseConnection {
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private String URL = "jdbc:mysql://localhost:3306/" + database + "?characterEncoding=utf8&useSSL=true";
    private static final String USER = "mysql";
    private static final String PASSWORD = "mysql";
    public Connection dbConnection(){
        Connection con = null;
        try {
            Class.forName(DRIVER);//加载驱动程序
            con = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, "加载驱动器失败", "数据库连接", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "注册驱动器失败", "数据库连接", JOptionPane.ERROR_MESSAGE);
        }
        return con;
    }
}

注意:
上述代码中的database为要查询的数据库,可通过某种自定义途径使其变更为想要查询的数据库。或者直接将其写为想要查询的数据库。
如:

private String URL = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true";

一、查询MySQL 中所有数据库的名称

        DataBaseConnection dataBaseConnection = new DataBaseConnection();
        Connection con = dataBaseConnection.dbConnection();
        ResultSet rs = null;// 创建结果集
        PreparedStatement prst;
        Vector<String> dataBaseNames = null;
        try {
            prst = con.prepareStatement("show databases");
            rs = prst.executeQuery();
            dataBaseNames = new Vector<String>();
            while(rs.next()){dataBaseNames.add(rs.getString(1));}
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //输出数据库名称
        System.out.println(dataBaseNames);

二、查询某数据库中左右数据表的名称

只需简单改动上述代码的查询语句即可

DataBaseConnection dataBaseConnection = new DataBaseConnection();
        Connection con = dataBaseConnection.dbConnection();
        ResultSet rs = null;// 创建结果集
        PreparedStatement prst;
        Vector<String> tableNames = null;
        try {
            prst = con.prepareStatement("show tables");
            rs = prst.executeQuery();
            tableNames = new Vector<String>();
            while(rs.next()){dataBaseNames.add(rs.getString(1));}
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //输出表名称
        System.out.println(tableNames);

三、查询某数据表中全部字段的名称

        DataBaseConnection dataBaseConnection = new DataBaseConnection();
        final String SELECT = "select * from " + table;
        String[] titles = null;
        Connection con = dataBaseConnection.dbConnection();
        ResultSet rs = null;// 创建结果集
        PreparedStatement prst = null;// 创建一个PreparedStatement对象
        prst = con.prepareStatement(SELECT);
        rs = prst.executeQuery();
        ResultSetMetaData metaData = rs.getMetaData();
        int column = metaData.getColumnCount();

            /*
             * 获取表格字段名称
             */
        titles = new String[column];
        for(int i=0;i<column;i++){
            titles[i] = metaData.getColumnLabel(i+1);
            //titles[i] = metaData.getColumnName(i+1);
        }
        //输出字段名称
        for(int i=0;i<titles.length;i++){
            System.out.println(titles[i]);
        }

注意:代码中的table泛指数据表,同样可通过某种途径使其变更为想要查询的数据表。

四、某查询语句中的字段名称

DataBaseConnection dataBaseConnection = new DataBaseConnection();
        Connection con = dataBaseConnection.dbConnection();
        ResultSet rs = null;// 创建结果集
        PreparedStatement prst = null;// 创建一个PreparedStatement对象
        prst = con.prepareStatement("select sepal_length,sepal_width from iris");
        String[] columnName = null;
        try {
            rs = prst.executeQuery();
            ResultSetMetaData metaData = rs.getMetaData();
            int column = metaData.getColumnCount();

            columnName = new String[column];
            for(int i=0;i<columnName.length;i++){
                columnName[i] = metaData.getColumnName(i+1);
            }
            //输出查询的部分字段名称
            for(int i=0;i<columnName.length;i++){
                System.out.println(columnName[i]);
            }
        }catch (Exception e) {
            e.printStackTrace();
        }

备注:
三和四的原理是一样的,只是在不同需求下会有不同的用处,三主要针对的是整个数据表,四主要针对的是单个查询语句。如果该查询语句所查询的数据库为整个数据表的数据,则两者效果是一样的,注意区分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值