JDBC完成查询

使用JDBC查询数据

数据的查询相较增删改有一些区别,就是返回值不同,增删改会返回int类型的数据,而查询则什么类型的返回值都会有可能,既然都有可能,那么我们就使用一个对象来进行存储。

实际上,查询的返回值是通过一个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
37
38
39
40
41
42
43
44
45
46
47
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* JDBC的查询:
* 加载驱动
* 创建数据库连接对象
* 创建sql命令对象
* 创建sql命令
* 执行sql命令
* 返回存储了查询到的数据的对象(ResultSet)。
* ResultSet是基于指针进行数据存储的,类似枚举。
* 关闭资源
* 问题:
* 查询的返回值类型是ResultSet,是基于指针进行数据存储的,不便于数据的针对性获取。
* 快速获取返回值:
* alt+shift+L 把光标放到最后
* @author x1aolin
*
*/
public class TestSelect {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//创建数据库连接对象
String url = "jdbc:oracle:thin:@localhost:1521:XE";
Connection conn = DriverManager.getConnection(url,"jiahui", "peijiahui");
//创建sql命令对象
Statement stmt = conn.createStatement();
//创建sql命令
String sql = "select * from stu";
//执行sql命令 查询会返回一个ResultSet对象
//该对象是基于指针的,只能一个一个不断地next来进行寻找
ResultSet rs = stmt.executeQuery(sql);
System.out.println("学号\t姓名\t性别\t余额");
while(rs.next()){
System.out.print(rs.getInt("id")+"\t"+rs.getString("name")+"\t");
System.out.print(rs.getString("ssex")+"\t"+rs.getDouble("money")+"\n");
}
//关闭资源
stmt.close();
conn.close();
}
}

从上面代码可以看出,查询的返回值类型是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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.x1aolin.practice;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.x1aolin.pojo.Stu;

/**
* JDBC的查询:
* 加载驱动
* 创建数据库连接对象
* 创建sql命令对象
* 创建sql命令
* 执行sql命令
* 返回存储了查询到的数据的对象(ResultSet)。
* ResultSet是基于指针进行数据存储的,类似枚举。
* 取值十分不方便,所以我们使用ArrayList来进行存储处理。
* 关闭资源
* 问题:
* 查询的返回值类型是ResultSet,是基于指针进行数据存储的,不便于数据的针对性获取。
* 解决:
* 将数据转换到ArrayList中进行存储。以“一条”数据为单位进行存储,所以需要封装对象
* 使用:
* 创建和表结构相同的实体类进行单条数据的存储(一条数据就是一个实例化对象)
* 然后将对象存储到ArrayList当中。
*
* 快速获取返回值: alt+shift+L 把光标放到最后
*/
public class TestSelect {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//使用ArrayList来进行存储
List<Stu> list = new ArrayList<>();
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//创建数据库连接对象
String url = "jdbc:oracle:thin:@localhost:1521:XE";
Connection conn = DriverManager.getConnection(url,"jiahui", "peijiahui");
//创建sql命令对象
Statement stmt = conn.createStatement();
//创建sql命令
String sql = "select * from stu";
//执行sql命令 查询会返回一个ResultSet对象
//该对象是基于指针的,只能一个一个不断地next来进行寻找
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
//创建学生对象 数据库中一条记录对应一个对象
Stu stu = new Stu();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setSsex(rs.getString("ssex"));
stu.setMoney(rs.getDouble("money"));
//将对象存储到ArrayList当中
list.add(stu);
}
//关闭资源
rs.close();
stmt.close();
conn.close();
System.out.println(list.toString());
}
}

Stu.java

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
package com.x1aolin.pojo;

public class Stu {
private int id;
private String name;
private String ssex;
private double money;

public Stu() {
}

public Stu(int id, String name, String ssex, double money) {
this.id = id;
this.name = name;
this.ssex = ssex;
this.money = money;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSsex() {
return ssex;
}
public void setSsex(String ssex) {
this.ssex = ssex;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
@Override
public String toString() {
return "Stu [id=" + id + ", name=" + name + ",ssex=" + ssex + ", money=" + money + "]";
}
}

郑重声明:上面的代码仅仅是为了突出学习重点,并没有进行封装和异常处理,这在实际开发中是不被允许的,在main()方法中只需要进行功能的调用,所有功能性的声明,都要封装起来。关于如何操作,请看下一节,数据库层的封装。

您的每一份支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------