乐趣区

关于java:小知识系列查询数据库数据的元信息

简介

java 中数据库的操作置信大家都不生疏,JDK 提供了 java.sql 包来标准对数据库的各种操作。咱们最罕用的操作就是从数据库的 ResultSet 中获取数据,其实这个包中还有一个十分有用的类叫做 ResultSetMetaData,能够通过这个类来获取查问数据的元信息,一起来看看吧。

应用 ResultSet

java.sql.ResultSet 是一个通用的标准,用来示意从数据库获取到的数据。

通常来说,咱们通过 connection 来创立 Statement,而后通过执行查问语句来失去:

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                        ResultSet.CONCUR_UPDATABLE);
         ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");

resultSet 提供了各种 getter 办法,来获取后果集中的各种数据。能够通过 index,也能够通过 column 名称来获取。

当然,应用 index 它的效率会更高,index 是从 1 开始的。如果是通过列名来获取数据,传入的列名是大小写不敏感的,如果后果数据中有多个匹配的类,则会返回最先匹配的那一列。

在 get 的过程中,JDBC driver 会尝试将后果数据的数据库类型转换成为对应的 java 类型。

JDBC 2.0 API,ResultSet 也能够进行更新和插入操作,可能咱们很少这样做,个别都是先结构好数据后直接插入。

先看下更新操作:

         rs.absolute(5); // 将游标挪动到第 5 行
         rs.updateString("SITE", "www.flydean.com"); // 将 SITE 更新为 www.flydean.com
         rs.updateRow(); // 更新到数据库中 

再看下插入操作:

  
         rs.moveToInsertRow(); // 将游标挪动到插入行
         rs.updateString(1, "www.flydean.com"); // 将插入行的第一列更新为 www.flydean.com
         rs.updateInt(2,35); // 更新第二列为 35
         rs.updateBoolean(3, true); // 更新第三列为 true
         rs.insertRow();
         rs.moveToCurrentRow();

应用 ResultSetMetaData

有了 ResultSet, 咱们能够通过它的 getMetaData 办法,来获取后果集的元数据。

什么是元数据呢?元数据又叫做 Metadata,是用来形容数据属性的数据。

   ResultSetMetaData getMetaData() throws SQLException;

举个具体的例子:

       ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
       ResultSetMetaData rsmd = rs.getMetaData();
       int numberOfColumns = rsmd.getColumnCount();
       boolean b = rsmd.isSearchable(1);

ResultSetMetaData 提供了很多十分有用的元数据检测办法:

咱们能够拿到列的名称、类型、字段长度、是否为空等很多有意义的数据。

这个元数据有什么用呢?

通过元数据,咱们能够拿到数据库的形容文件,从而能够主动创立对应的数据库表格的映射关系,从而缩小手动代码的输出,十分的不便。

用过 MybatisPlus 的敌人可能晓得,它提供了一个 AutoGenerator,能够主动生成 mapper 对象和对应的 xml 文件,十分好用,大家能够试一试。

总结

以上就是 ResultSet 和 ResultSetMetaData 的介绍,大家学会了吗?

本文已收录于 http://www.flydean.com/02-db-resultsetmetadata/

最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!

欢送关注我的公众号:「程序那些事」, 懂技术,更懂你!

退出移动版