JDBC元数据
元数据分类:数据库元数据、参数元数据、结果集元数据
元数据- MetaData
元数据:在JDBC中可以使用元数据获取数据库、表、表中字段等一些信息。
元数据的作用:在JDBC中可以获取元数据的信息,通过元数据可以编写一些通用性较高的代码、框架。
数据库元数据: DataBaseMetaData(Connection对象创建的)
获取数据库元数据:Connection.getMetaData()
DataBaseMetaData对象
•获取数据库的链接的基本信息
•getURL():返回一个String类对象,代表数据库的URL。
•getUserName():返回连接当前数据库管理系统的用户名。
•getDriverName():返回驱动驱动程序的名称。
•获取表的基本信息
•获取表的名称
•getPrimaryKeys(String catalog, String schema, String table):返回指定表主键的结果集
package cn.itcast.metaData;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.junit.Test;
import cn.itcast.utils.MyJdbcUtil2;
/**
* 数据库元数据
* @author Administrator
*
*/
public class DataBaseMetaDataDemo {
@Test
public void run(){
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
// 获取资源
conn = MyJdbcUtil2.getConnection();
// 获取数据库元数据
DatabaseMetaData metaData = conn.getMetaData();
// 获取url 链接的基本信息
System.out.println(metaData.getURL());
System.out.println(metaData.getUserName());
System.out.println(metaData.getDriverName());
// 获取主键的信息
rs = metaData.getPrimaryKeys(null, null, "t_account");
if(rs.next()){
// 获取
System.out.println(rs.getString("TABLE_NAME"));
System.out.println(rs.getString("COLUMN_NAME"));
System.out.println(rs.getString("PK_NAME"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
MyJdbcUtil2.release(rs, stmt, conn);
}
}
}
参数元数据: ParameterMetaData
作用:可以获取SQL语句中?号的个数、类型等。
如花获得参数元数据:PreparedStatement . getParameterMetaData()
•getParameterCount()
•获得指定参数的个数
•getParameterTypeName(int param)
•获得指定参数的sql类型
getParameterType异常处理
•Parameter metadata not available for the given statement
MySQL中默认不让获取参数的类型,所有需要在url后面添加该参数
url后面拼接参数
•?generateSimpleParameterMetadata=true
使用参数元数据获取的参数类型不正确,这是因为MySQL支持的不好。想要获取正确的参数类型,需要使用结果集元数据。
package cn.itcast.metaData;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import org.junit.Test;
import cn.itcast.utils.MyJdbcUtil2;
/**
* 参数元数据
* @author Administrator
*
*/
public class ParameterMetaDataDemo {
@Test
public void run(){
Connection conn = null;
PreparedStatement stmt = null;
try {
// 获取资源
conn = MyJdbcUtil2.getConnection();
// 编写SQL语句
String sql = "update t_account set money = ? ,username = ? where id = ?";
// 预编译
stmt = conn.prepareStatement(sql);
// 获取参数元数据
ParameterMetaData metaData = stmt.getParameterMetaData();
// 获取参数的个数
int count = metaData.getParameterCount();
System.out.println("参数的个数是:"+count);
String msg = metaData.getParameterTypeName(1);
System.out.println("参数的类型:"+msg);
} catch (Exception e) {
e.printStackTrace();
}finally{
MyJdbcUtil2.release(stmt, conn);
}
}
}
元数据- ResultSetMetaData
作用: