实验名称:集元数据练习
实验目的:
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);
}
}
网友评论