元数据
1.数据库元数据
package com.cn.metadata;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import org.junit.Test;
import com.cn.util.JdbcUtil;
public class Demo1 {
/**
* 1.数据库元数据
* @throws Exception
*/
@Test
public void test1() throws Exception {
//获取连接
Connection conn = JdbcUtil.getConnection();
//获取数据库元数据
DatabaseMetaData metaData = conn.getMetaData();//alt+shift+L 快速获取方法返回值
/**
* 获取数据库元数据
*/
System.out.println(metaData.getUserName());
System.out.println(metaData.getURL());
System.out.println(metaData.getDatabaseProductName());
System.out.println(metaData.getDatabaseProductVersion());
System.out.println(metaData.getDriverVersion());
}
}
2.参数元数据
package com.cn.metadata;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import org.junit.Test;
import com.cn.util.JdbcUtil;
public class Demo1 {
/**
* 2.参数元数据
* @throws Exception
*/
@Test
public void test2() throws Exception {
//获取连接
Connection conn = JdbcUtil.getConnection();
//sql
String sql = "SELECT * FROM dept where id=? and deptName=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
ParameterMetaData paraMetaData = pstmt.getParameterMetaData();
//获取参数的个数
int count = paraMetaData.getParameterCount();
System.out.println(count);//结果为2
}
}
3.结果集元数据
package com.cn.metadata;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import org.junit.Test;
import com.cn.util.JdbcUtil;
public class Demo1 {
/**
* 3.结果集元数据
*/
@Test
public void test3() throws Exception {
//获取连接
Connection conn = JdbcUtil.getConnection();
//sql
String sql = "SELECT * FROM dept";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
ResultSetMetaData resultMetaData = rs.getMetaData();
/**
* 得到结果集元数据(目标:通过结果集元数据,得到列的名称)
*/
//迭代每一行结果
while(rs.next()){
//1.获取列的个数
int columnCount = resultMetaData.getColumnCount();
//2.遍历,获取每一列的值
for(int i=1; i<=columnCount; i++){
//得到每一列的列名称
String columnName = resultMetaData.getColumnName(i);//从1开始
//获取该行对应的列的值
Object columnValue = rs.getObject(columnName);
System.out.print(columnName + "=" + columnValue + ", ");
}
System.out.println();
}
}
}
package com.cn.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* jdbc的工具类
* @author liuzhiyong
*
*/
public class JdbcUtil {
private static String url = null;
private static String user = null;
private static String password = null;
private static String driverClass = null;
/**
* 静态代码块(只调用一次)
*/
static{
try {
//读取db.properties文件
Properties properties = new Properties();
/**
* 使用类路径的读取方式
* / 斜杠表示classpath的根目录
* 在java项目下,classpath的根目录从bin目录开始
* 在web项目下,classpath的根目录从WEB-INF/classes目录开始
*/
InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
properties.load(in);
//读取信息
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
driverClass = properties.getProperty("driverClass");
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
System.out.println("驱动程序注册出错!");
}
}
/**
* 获取连接对象的方法
*/
public static Connection getConnection(){
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 释放资源的重载方法
*/
public static void close(Connection conn, Statement stmt, ResultSet rs){
//关闭资源(顺序:后打开,先关闭)
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
System.out.println("ResultSet关闭失败!");
throw new RuntimeException(e);
}
}if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
System.out.println("Statement关闭失败!");
throw new RuntimeException(e);
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
System.out.println("Connection关闭失败!");
throw new RuntimeException(e);
}
}
}
/**
* 释放资源的重载方法
*/
public static void close(Connection conn, Statement stmt){
//关闭资源(顺序:后打开,先关闭)
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
System.out.println("Statement关闭失败!");
throw new RuntimeException(e);
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
System.out.println("Connection关闭失败!");
throw new RuntimeException(e);
}
}
}
}