JDBC元数据
所谓的元数据(Meta Data)指的是一些附加在正规操作上的数据内容(关于数据库本身的数据信息),例如:如果说现在两个人互相交谈,那么虽然交谈的内容是核心的数据,但是在这个数据之上还会包含有交谈的辅助信息,例如:我是否跟一个人交谈?我交谈的人能否懂我的意思?
范例:获取数据库元数据信息
import java.sql.*;
import java.util.Arrays;
public class JDBCDemo {
public static final String DRIVER = "com.mysql.cj.jdbc.Driver"; //数据库的驱动程序
public static final String URL="jdbc:mysql://localhost:3306/yootk"; //连接地址
public static final String USER = "root"; //用户名
public static final String PASSWORD = "mysqladmin"; //密码
public static void main(String[] args) throws Exception{
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL,USER,PASSWORD); //连接数据库
DatabaseMetaData dm = connection.getMetaData(); //获取元数据
System.out.println("【数据库的主版本号】:"+dm.getDatabaseMajorVersion());
System.out.println("【子版本号】:"+dm.getDatabaseMinorVersion());
System.out.println("【数据库产品名称】:"+dm.getDatabaseProductName());
ResultSet resultSet = dm.getPrimaryKeys(null,"root","user"); //获取表信息
if (resultSet.next()){ //判断是否还有下一个元素
System.out.println("【catalog】"+resultSet.getObject(1));
System.out.println("【表名称】"+resultSet.getObject(3));
}
}
}
【数据库的主版本号】:8
【子版本号】:0
【数据库产品名称】:MySQL
【catalog】mysql
【表名称】user
除了以上可以获取的数据库的元数据之外,和我们编写程序过程之中最为重要的操作是有些差异的,因为以上只是获取了据库的信息,而真正有用的是查询结果集元数据。
范例:获取结果集数据
import jdk.jfr.MetadataDefinition;
import java.sql.*;
import java.util.Arrays;
public class JDBCDemo {
public static final String DRIVER = "com.mysql.cj.jdbc.Driver"; //数据库的驱动程序
public static final String URL="jdbc:mysql://localhost:3306/yootk"; //连接地址
public static final String USER = "root"; //用户名
public static final String PASSWORD = "mysqladmin"; //密码
public static void main(String[] args) throws Exception{
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL,USER,PASSWORD); //连接数据库
String sql = "SELECT uid,name,age,birthday,salary,note FROM user WHERE uid = ?;"; //查询sql语句
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setObject(1,1); //设置查询占位
ResultSet resultSet = preparedStatement.executeQuery(); //查询
ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); //获取查询结果集的元数据,preparedStatement也可以获取集的元数据
System.out.println("获取返回数的列数:"+resultSetMetaData.getColumnCount());
for (int x = 1;x < resultSetMetaData.getColumnCount();x++){
System.out.printf("列名称:%s、列类型:%s、列常量值:%s\n",
resultSetMetaData.getColumnName(x),
resultSetMetaData.getColumnTypeName(x),
//每一个列名对应一个列常量值
resultSetMetaData.getColumnType(x));
}
}
}
获取返回数的列数:6
列名称:uid、列类型:BIGINT、列常量值:-5
列名称:name、列类型:VARCHAR、列常量值:12
列名称:age、列类型:INT、列常量值:4
列名称:birthday、列类型:DATE、列常量值:91
列名称:salary、列类型:FLOAT、列常量值:7