JDBC(四)——ResultSet结果集、获取元数据

ResultSet结果集

当我们查询数据库时(select * from 表),返回的是一个二维的结果集,这时需要使用ResultSet来遍历结果集,获取每一行的数据。

使用ResultSet遍历查询结果

1)boolean next():将光标从当前位置向前移一行
next()初始指向0行,第一次调用指向第一行。
2)String gerString(int columnLabel):以String形式获取此ResultSet对象的当前行中指定列的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.java.jdbc.chap05.sec02;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.java.jdbc.model.Book;
import com.java.jdbc.util.DbUtil;

public class Demo1 {
private static DbUtil dbUtil = new DbUtil();
/**
* 用ResultSet遍历结果集
* @param book
* @throws Exception
*/
private static void listBook() throws Exception {
Connection con = dbUtil.getCon();
String sql = "SELECT * FROM t_book";
PreparedStatement pstat = con.prepareStatement(sql);
ResultSet rs = pstat.executeQuery(); //返回结果集合
while (rs.next()) { //每进行一次next(),就将遍历一行属性的值
int id = rs.getInt("id"); //获取第一列(id)的数据
String bookName = rs.getString("bookName"); //获取第二列(bookName)的数据
String author = rs.getString("author");
float price = rs.getFloat("price");
String bookTypeId = rs.getString("bookTypeId");
System.out.println("图书编号:" + id + "名称:" + bookName
+ "作者:" + author + "价格:" + price + "类型:" + bookTypeId);
System.out.println("=============================");
}
}
public static void main(String[] args) throws Exception {
listBook();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
加载数据库驱动成功
获取数据库连接成功
图书编号:1名称:数学作者:张三价格:50.0类型:2
=============================
图书编号:2名称:语文作者:李四价格:45.0类型:3
=============================
图书编号:3名称:数学作者:张三价格:50.0类型:2
=============================
图书编号:4名称:数学作者:张三价格:50.0类型:2
=============================
图书编号:5名称:英语作者:王二价格:87.0类型:1
=============================
图书编号:6名称:数学作者:张三价格:50.0类型:2
=============================
图书编号:7名称:英语作者:pstat价格:55.0类型:1
=============================

将每一行的查询结果封装成方法,List

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.java.jdbc.model;
/**
* 定义图书模型
* @author think
*
*/
public class Book {
private int id;
private String bookName;
private String author;
private float price;
private String bookTypeId;

public Book(int id, String bookName, String author, float price, String bookTypeId) {
super();
this.id = id;
this.bookName = bookName;
this.author = author;
this.price = price;
this.bookTypeId = bookTypeId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public String getBookTypeId() {
return bookTypeId;
}
public void setBookTypeId(String bookTypeId) {
this.bookTypeId = bookTypeId;
}
@Override
public String toString() {
// TODO Auto-generated method stub
//return super.toString();
return "[" + this.id + ", " + this.bookName + ", " + this.author
+ ", " + this.price + ", " + this.bookTypeId + "]";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.java.jdbc.chap05.sec02;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.java.jdbc.model.Book;
import com.java.jdbc.util.DbUtil;

public class Demo1 {
private static DbUtil dbUtil = new DbUtil();
/**
* 用ResultSet遍历结果集
* @param book
* @throws Exception
*/
private static List<Book> listBook1() throws Exception {
List<Book> bookList = new ArrayList<>();
Connection con = dbUtil.getCon();
String sql = "SELECT * FROM t_book";
PreparedStatement pstat = con.prepareStatement(sql);
ResultSet rs = pstat.executeQuery(); //返回结果集合
while (rs.next()) { //每进行一次next(),就将遍历一行属性的值
int id = rs.getInt("id"); //获取id(第一列)的数据
String bookName = rs.getString("bookName"); //获取bookName(第二列)的数据
String author = rs.getString("author");
float price = rs.getFloat("price");
String bookTypeId = rs.getString("bookTypeId");
Book book = new Book(id, bookName, author, price, bookTypeId);
bookList.add(book);
}
return bookList;
}
public static void main(String[] args) throws Exception {
//listBook();
List<Book> bookList = listBook1();
for (Book list : bookList){
System.out.println(list);
}
}
}
1
2
3
4
5
6
7
8
9
加载数据库驱动成功
获取数据库连接成功
[1, 数学, 张三, 50.0, 2]
[2, 语文, 李四, 45.0, 3]
[3, 数学, 张三, 50.0, 2]
[4, 数学, 张三, 50.0, 2]
[5, 英语, 王二, 87.0, 1]
[6, 数学, 张三, 50.0, 2]
[7, 英语, pstat, 55.0, 1]

使用元数据分析数据库

使用DataBaseMetaData获取数据库基本信息

DataBaseMetaData可以得到数据库的一些基本信息,包括数据库的名称,版本,表的信息。
其中
String getDataBaseProductName():获取数据库的名称//meta变化
int getDriverMajorVersion():获取此jdbc驱动程序的主版本号
int getDriverMinorVersion():获取此jdbc驱动程序的次版本号 //minor未成年的,次要的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.sql.Connection;
import java.sql.DatabaseMetaData;

import com.java.jdbc.util.DbUtil;

public class Demo1 {
public static void main(String[] args) throws Exception {
DbUtil dbUtil = new DbUtil();
Connection con = dbUtil.getCon();
DatabaseMetaData dbmd = con.getMetaData(); //获取元数据
System.out.println("数据库名称:" + dbmd.getDatabaseProductName()
+ ",\njdbc驱动版本号:" + dbmd.getDriverMajorVersion()
+ ". " + dbmd.getDriverMinorVersion());
}
}

使用ResultMetaData获取ResultSet对象中的信息

ResultSetMetaData可以获取关于ResultSet对象中列的基本信息。
其中
int getColumnCount():返回此ResultSet对象中的列数
String getColumnName(int column):获取指定列的名称
int getColumnType(int column):获取指定列的sql类型名称

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;

import com.java.jdbc.util.DbUtil;

public class Demo1 {
public static void main(String[] args) throws Exception {
DbUtil dbUtil = new DbUtil();
Connection con = dbUtil.getCon();
String sql = "SELECT * FROM t_book";
PreparedStatement pstat = con.prepareStatement(sql);
ResultSetMetaData rsmd = pstat.getMetaData();//获取结果集元数据
//DatabaseMetaData dbmd = con.getMetaData();
int count = rsmd.getColumnCount(); //获取结果集元数据列数
System.out.println("表一共有:" + count + "列");
//遍历属性名称
for (int i = 1; i <= count; i ++){
System.out.println("第" + i + "行的属性为:" + rsmd.getColumnName(i)
+ ",类型为:" + rsmd.getColumnTypeName(i));
}
}
}