JDBCResSetMetaData&DatabaseMetaData&获取数据库主键的值

Posted MrChengs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBCResSetMetaData&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);
    }
    }

 




















以上是关于JDBCResSetMetaData&DatabaseMetaData&获取数据库主键的值的主要内容,如果未能解决你的问题,请参考以下文章

B1016 部分A+B

Educational Codeforces Round 23 A-F 补题

CodeForces - 950DA Leapfrog in the Array

《安富莱嵌入式周报》第266期:真正模拟DA神的威力,全开源nV级测量仪表挑战赛结束,欣赏震撼设计过程

ZYNQ从入门到秃头09 DDS IP 数字波形合成(基于ALINX 7020 && AN108)

oj---pat---b1016