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