美文网首页
Jave SE --- JDBC(14 Meta data)

Jave SE --- JDBC(14 Meta data)

作者: Tedisaname | 来源:发表于2018-12-16 20:25 被阅读7次
实验名称:集元数据练习
实验目的:

1、集元数据的相关概念;
2、学会DatabaseMetaData,并可获取数据库的相关信息;
3、学会ResultSetMetaData,可以通过该类的对象获取结果集的信息,并对查询结果进行处理。

实验内容:

在数据库中创建学生表Student,自主设置学生表的信息。
对学生表进行查询操作,并将查询结果输出(包括字段名称)。

实验步骤:
/*
改版本的代码并没有使用查询结果集与类对应起来,并且未
对结果集进行封装,也没有使用相应的反射机制,随意总体
说数据的安装性和封装性不能很好的体现,将对改代码进行改进
*/
package metadata;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

    import java.util.Properties;
    public class DBUTilsTools {
        public static Connection getConnection()   {
            Connection conn = null;
            InputStream is = ClassLoader.getSystemResourceAsStream("jdbc.properties");
            Properties properties = new Properties();
            try {
                properties.load(is);
                String driver = properties.getProperty("driver");
                String url = properties.getProperty("url");
                String userName = properties.getProperty("user");
                String password = properties.getProperty("password");
                Class.forName(driver);
                conn = DriverManager.getConnection(url, userName, password);
            } catch (IOException e1) {
                e1.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return conn;
        }
        
        public static int exeUpdate(String sql,Object...values) {
            Connection conn = null;
            conn = DBUTilsTools.getConnection();
            PreparedStatement pstmt = null;
            int n = 0;
            try {
                pstmt = conn.prepareStatement(sql);
                for(int i = 1;i <= values.length; i++){
                    pstmt.setObject(i, values[i-1]);
                }
                n = pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                DBUTilsTools.release(conn, pstmt, null);
            }
            return n;
        }
        
        public static void exeQuery(String sql,Object...values) {
            Connection conn = null;
            conn = DBUTilsTools.getConnection();
            
            PreparedStatement pstmt = null;
            ResultSet rs  = null;
            
            try {//相当于sql语句中?(占位符)的个数,?也就是所指定字段的名称
                pstmt = conn.prepareStatement(sql);
                for (int i = 1; i <= values.length; i++) {//该循环的作用可以认为是将sql语句将之前空缺的占位符补充完整
                    pstmt.setObject(i, values[i-1]);
                }
                //真正的执行sql语句
                rs = pstmt.executeQuery();//查询结束后,返回的结果中包含你所需的那几列
                
                
                //获取结果集的结构
                ResultSetMetaData rsmd = rs.getMetaData();
                int count = rsmd.getColumnCount();//获取结果集的列数
                
                for(int i = 1; i <= count; i++) {
                    System.out.print(rsmd.getColumnName(i) + "\t\t");//输出每一列的名称
                }
                System.out.println();//换行
                
                while(rs.next()) {//光标移动到下一行
                    for(int i = 1;i <= count; i++) {//遍历所查询的列的值
                    System.out.print(rs.getObject(i) + "\t");//打印输出所有列的内容
                    }
                    System.out.println();
                }
                
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                DBUTilsTools.release(conn, pstmt, rs);
            }
        }
        //释放连接
        public static void release(Connection conn, PreparedStatement pstmt,ResultSet rs) {

                if(rs != null)
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
                if(pstmt != null)
                    try {
                        pstmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                
                if(conn != null)
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                        
                        
                    }
        }   
        //driver codes:
        public static void main(String[] args) {
            String sql = "select bno,bname,bpublisher,bprice from book";
            DBUTilsTools.exeQuery(sql);
        }
}


相关文章

网友评论

      本文标题:Jave SE --- JDBC(14 Meta data)

      本文链接:https://www.haomeiwen.com/subject/xmnohqtx.html