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

来源:互联网 发布:淘宝退款原因有哪些 编辑:程序博客网 时间:2024/05/21 10:22

使用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();        }

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