zoukankan      html  css  js  c++  java
  • JDBC(5)ResSetMetaData&DatabaseMetaData&获取数据库主键的值

    ResSetMetaData
    可用于获取关于 ResultSet 对象中列的类型和属性信息的对象:
    getColumnName(int column):获取指定列的名称
    getColumnCount():返回当前 ResultSet 对象中的列数。 
    getColumnTypeName(int column):检索指定列的数据库特定的类型名称。 
    getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。 
    isNullable(int column):指示指定列中的值是否可以为 null。 
    isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读

        @Test
        public void testResSetMetaData(){
            Connection conn = null;
            PreparedStatement preparedstatement = null;
            ResultSet rs = null;
            
            try {
                conn = getConnection();
                String sql = "select * from student";
                preparedstatement = (PreparedStatement) conn.prepareStatement(sql);
                rs = preparedstatement.executeQuery();
                
                //1.得到ResSetMetaData()对象
                ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
                
                
                //2.得到列的个数
                int c = rsmd.getColumnCount();
                System.out.println(c);
                
                //3.得到列名
                for(int i = 0; i < c;i++){
                    String sName = rsmd.getColumnName(i + 1);
                    
                    //得到列的别名
                    String  cLabel = rsmd.getColumnLabel(i + 1);
                    System.out.println(sName + "==" + cLabel);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }


    DatabaseMetaData 
    DatabaseMetaData 类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以非常详细的了解数据库的信息:
    可以由Connection得到      
    getURL():返回一个String类对象,代表数据库的URL。
    getUserName():返回连接当前数据库管理系统的用户名。
    isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
    getDatabaseProductName():返回数据库的产品名称。
    getDatabaseProductVersion():返回数据库的版本号。
    getDriverName():返回驱动驱动程序的名称。
    getDriverVersion():返回驱动程序的版本号
    @Test
        public void testDatebaseMetaData(){
    
            
            Connection conn = null;
            ResultSet rs = null;
            try {
                conn = getConnection();
                DatabaseMetaData data = (DatabaseMetaData) conn.getMetaData();
                //得到数据库的版本号
                int version = data.getDatabaseMajorVersion();
                System.out.println(version);
                
                //得到连接数据库的用户名
                String user = data.getUserName();
                System.out.println(user);
                
                //得到MYSQL中有那些数据库
                rs = data.getCatalogs();
                while(rs.next()){
                    System.out.println(rs.getString(1));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
               Close(rs,null , conn);
            }
            
        }
    
    
    prepareStatement(sql, autoGeneratedKeys)
        @Test
        public void testPreparedStatementjdbc(){
            
            //返回主键的值
            Connection connection = null;
            PreparedStatement preparedStatement = null;
            
            try {
                connection = JdbcTools.getConnection();
                String sql = "insert into student(sname,sclass) values(?,?)";
                
                
                //preparedStatement = (PreparedStatement) connection.prepareStatement(sql);
                
                //prepareStatement(sql, autoGeneratedKeys);
                //使用重载的prepareStatement(sql, flag);生成 preparedstatement对象
                preparedStatement = (PreparedStatement) connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
                
                preparedStatement.setString(1, "MrChengs");
                preparedStatement.setInt(2, 123456);
                preparedStatement.executeUpdate();
                
                
                //通过getGeneratedKeys();方法返回结果集
                //包含了新生成的主键的ResultSet对象
                ResultSet rs = preparedStatement.getGeneratedKeys();
                if(rs.next()){
                    System.out.println(rs.getInt(1));
                }       
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
               Close(null, preparedStatement, connection);
        }
        }







  • 相关阅读:
    移动零【283】
    下一个排列【31】
    插入区间【57】
    有效的山脉数组【941】
    两个数组的交集【349】
    求根到叶子节点数字之和【129】
    解决已经pip 安装成功的第三方包,但总是标红或者运行报错import PendingDeprecationWarning
    String、StringBuffer与StringBuilder之间区别
    《Java 核心技术第 10 版》-- 读书笔记
    【转载】如何保证消息不被重复消费?
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/9780854.html
Copyright © 2011-2022 走看看