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