首页 > 其他分享 >JDBC之ResultSet和元数据

JDBC之ResultSet和元数据

时间:2022-12-20 00:33:55浏览次数:38  
标签:ps JDBC String md int ResultSet 获取 数据

ResultSet

从名字上就可以看到是结果集,表示的是查询出来的结果集。

JDBC用ResultSet来封装结果集,查询结果表的对象。

查询结果分为两种情况:

单值

单个结果,比如说SQL如下:

select count(*) from account;
select max(id) from account;
select min(id) from account;

查询出来的是一个数字

多值

普遍来说是多个字段,这个时候对象就可以发挥效果。

select id,name,address from account where id = 1;

重点

游标

在ResultSet有一个游标的概念

提供一个游标,默认游标指向结果集第一行之前。调用一次next(),游标向下移动一行。提供一些get方法。

根据while循环的使用经验,如果不知道有多少条,那么使用while进行判断即可。

get方法

既然获取出来的有结果,那么就需要得到对应的值。ResultSet也提供了对应的方法

ResultSet接口常用API

  • boolean next();将光标从当前位置向下移动一行
  • int getInt(int colIndex)以int形式获取ResultSet结果集当前行指定列号值
  • int getInt(String colLabel)以int形式获取ResultSet结果集当前行指定列名值
  • float getFloat(int colIndex)以float形式获取ResultSet结果集当前行指定列号值
  • float getFloat(String colLabel)以float形式获取ResultSet结果集当前行指定列名值
  • String getString(int colIndex)以String 形式获取ResultSet结果集当前行指定列号值
  • String getString(String colLabel)以String形式获取ResultSet结果集当前行指定列名值
  • Date getDate(int columnIndex); 以Date 形式获取ResultSet结果集当前行指定列号值
  • Date getDate(String columnName);以Date形式获取ResultSet结果集当前行指定列名值
  • void close()关闭ResultSet 对象

使用示例

public class User implement Serializable{

    private int id;
    private String username;
    private String password;
    private String nickname;

    //提供get/set/toString方法 Alt+Insert
}

对应的JDBC代码如下所示

List<User> list = new ArrayList<User>();

while (resultSet.next()) {
    //每遍历一次, 就是1条记录, 就封装成一个User对象
    User user = new User(resultSet.getInt("id"),
    resultSet.getString("username"),
    resultSet.getString("password"),
    resultSet.getString("nickname")
);
list.add(user);

}

元数据

数据库的元数据就是 数据库、表、列的定义信息。

​ ① 由PreparedStatement对象的getParameterMetaData ()方法获取的是ParameterMetaData对象。

  ② 由ResultSet对象的getMetaData()方法获取的是ResultSetMetaData对象。

ParameterMetaData

ParameterMetaData是由preparedStatement对象通过getParameterMetaData方法获取而来,ParameterMetaData可用于获取有关PreparedStatement对象和其预编译sql语句 中的一些信息. eg:参数个数,获取指定位置占位符的SQL类型

获得ParameterMetaData:

ParameterMetaData parameterMetaData =  preparedStatement.getParameterMetaData ();

API

方法名称
int getParameterCount(); 获得参数个数
int getParameterType(int param) 获取指定参数的SQL类型。 (注:MySQL不支持获取参数类型)
String getParameterClassName(int param) 返回第n个参数的参数类型
......
@Test
public void testPs() throws SQLException {
    String url = "jdbc:mysql://localhost:3306/mysql_index_test?useSSL=true";
    Connection connection = DriverManager.getConnection(url, "root","root");
    String sql = "insert into user values(null , ? , ?, ?)";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1, "aa");
    ps.setString(2, "aa");
    ps.setString(3, "aa");
    //得到元数据
    ParameterMetaData md = ps.getParameterMetaData();
    System.out.println("参数的个数:" + md.getParameterCount());  
    //后续的这些方法会报错。
    System.out.println("第一个的参数类型名称:"+md.getParameterClassName(1));
}

ResultSetMetaData

ResultSetMetaData是由ResultSet对象通过getMetaData方法获取而来,ResultSetMetaData可用于获取有关ResultSet对象中列的类型和属性的信息。

API

方法名称 说明
getColumnCount() 获取结果集中列项目的个数
getColumnName(int column) 获得数据指定列的列名
getColumnTypeName() 获取指定列的SQL类型
getColumnClassName() 获取指定列SQL类型对应于Java的类型
@Test
public void testResultSetMetaData() throws SQLException {
    Connection conn = C3p0Util.getConn();
    String sql = "select * from user where id = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setInt(1, 45);
    ResultSet rs = ps.executeQuery();
    //重点关注元数据
    ResultSetMetaData md = rs.getMetaData();
    System.out.println("列的个数:" + md.getColumnCount());
    System.out.println("第1列的名字:"+md.getColumnName(1));
    System.out.println("第2列的数据库类型:"+md.getColumnTypeName(2));
    System.out.println("第2列的java类型:"+md.getColumnClassName(2));
}

标签:ps,JDBC,String,md,int,ResultSet,获取,数据
From: https://www.cnblogs.com/likeguang/p/16993426.html

相关文章