1.1 案例三: 手动抽取一个 DBUtils 的工具类: 1.1.1 需求:
每次进行 JDBC 的 CURD 的操作的时候, 有很多的代码都是相似的. 可以不可以抽取工具类. 完成一些通用性的代码?
1.1.2 分析: 1.1.2.1 技术分析:
[JDBC 的元数据 MataData] (了解)-- 编写通用性较高的代码.
? DatabaseMetaData: 获得数据库连接的信息, 获得数据库的表的信息.
* 获得数据库元数据: Connection 中 getMetaData();
? ParameterMetaData: 获得 SQL 中的参数的个数及类型.
* 获得参数元数据: PreparedStatement 中 getParameterMetaData()
? ResultSetMetaData: 获得结果集中的列名及列的类型.
* 获得结果集元数据: ResultSet 中 getMeta()
[元数据的使用]
- @Test
- /**
- * 数据库元数据
- */
- public void demo1(){
- Connection conn = null;
- conn = JDBCUtils2.getConnection();
- // 获得数据库元数据:
- try {
- DatabaseMetaData metaData = conn.getMetaData();
- System.out.println("获得驱动名称:"+metaData.getDriverName());
- System.out.println("获得驱动 URL:"+metaData.getURL());
- System.out.println("获得用户名:"+metaData.getUserName());
- // 获得表中的主键:
- ResultSet rs = metaData.getPrimaryKeys(null, null, "category");
- if(rs.next()){
- String name = rs.getString("COLUMN_NAME");
- System.out.println(name);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- @Test
- /**
- * 参数元数据:
- */
- public void demo2(){
- Connection conn = null;
- PreparedStatement stmt = null;
- try{
- conn = JDBCUtils2.getConnection();
- String sql = "update category set cname = ? where cid = ?";
- stmt = conn.prepareStatement(sql);
- ParameterMetaData metaData = stmt.getParameterMetaData();
- int count = metaData.getParameterCount();
- System.out.println(count);
- }catch(Exception e){
- }
- }
- @Test
- /**
- * 结果集元数据:
- */
- public void demo3(){
- Connection conn = null;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- try{
- conn = JDBCUtils2.getConnection();
- String sql = "select * from category";
- stmt = conn.prepareStatement(sql);
- rs = stmt.executeQuery();
- ResultSetMetaData metaData = rs.getMetaData();
- int count = metaData.getColumnCount();
- for(int i = 1;i<=count ;i++){
- String name = metaData.getColumnName(i);
- String type = metaData.getColumnTypeName(i);
- System.out.println(name+type);
- }
- }catch(Exception e){
- }
- }
来源: http://www.bubuko.com/infodetail-2604930.html