一、向数据库中添加10条数据(使用JDBC添加数据已在上篇博客中讲过,故不展示具体过程)
二、使用JDBC查询数据 ,Java代码如下
package date0428;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Find {
public static void main(String[] args) {
//try语句和finally语句属于不同的代码块,需提高声明权限。
Connection connection=null;
Statement statement=null;
ResultSet resultset=null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//建立连接
connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");
//创建SQL语句对象
statement =connection.createStatement();
//输入SQL语句
String sql ="select * from userinfo ";
//执行SQL语句
resultset =statement.executeQuery(sql);
//使用while循环获得查询到的数据
while(resultset.next()) {
String id =resultset.getString("id");
String username =resultset.getString("username");
String password =resultset.getString("password");
System.out.println(id+"--"+username+"--"+password);
}
}catch (Exception e) {
e.printStackTrace();
}finally {
//释放资源,顺序是 resultset>>statement>>connection
try {
//如果不加入if语句,则有可能会出现空指针异常
if (resultset!=null) {
resultset.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
//如果不加入if语句,则有可能会出现空指针异常
if (statement!=null) {
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
//如果不加入if语句,则有可能会出现空指针异常
if (connection!=null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
三、注意事项
1、与添加、删除、修改操作相比,查询操作需要使用到ResultSet对象,释放资源时也需要先释放对应的资源。
2、上图中的SQL语句为:select * from userinfo ,即查询表内所有数据,所以需要while循环遍历所有数据。
3、如果要查询指定的某条数据,例如SQL语句: select * from userinfo where username='5' ,则使用if语句包裹resultset.next()方法即可。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Find {
public static void main(String[] args) {
//try语句和finally语句属于不同的代码块,需提高声明权限。
Connection connection=null;
Statement statement=null;
ResultSet resultset=null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//建立连接
connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");
//创建SQL语句对象
statement =connection.createStatement();
//输入SQL语句
String sql ="select * from userinfo where username='5' ";
//执行SQL语句
resultset =statement.executeQuery(sql);
//使用if语句获得查询到的数据
if(resultset.next()) {
String id =resultset.getString("id");
String username =resultset.getString("username");
String password =resultset.getString("password");
System.out.println(id+"--"+username+"--"+password);
}
}catch (Exception e) {
e.printStackTrace();
}finally {
//释放资源,顺序是 resultset>>statement>>connection
try {
//如果不加入if语句,则有可能会出现空指针异常
if (resultset!=null) {
resultset.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
//如果不加入if语句,则有可能会出现空指针异常
if (statement!=null) {
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
//如果不加入if语句,则有可能会出现空指针异常
if (connection!=null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
输出结果为
e456dbd2-d52a-49f5-b6b5-1df03ac14467--5--5
4、查询操作释放资源的顺序和增删改操作相同,遵循“先开后关”的原则。
5、程序中的finall语句块中的代码(对应释放资源的功能)可能会有人写成下面这种方式
package date0428;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.UUID;
public class Test {
public static void main(String[] args) {
ResultSet resultset=null;
Connection connection=null;
Statement statement=null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root","root");
statement= connection.createStatement();
String sql="select*from userinfo";
resultset= statement.executeQuery(sql);
while(resultset.next()) {
String id=resultset.getString("id");
String userName =resultset.getString("user_name");
String passWord =resultset.getString("password");
System.out.println(id+"--"+userName+"--"+passWord);
}
}catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (resultset!=null) {
resultset.close();
} //若此if语句出现异常,则try语句其后的代码无法执行,不能成功释放资源,故需要分开写try-catch语句。
if (statement!=null) {
statement.close();
}
if (connection!=null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
6、上述代码将3条if语句用1个try-catch语句包裹起来,看似节省了代码量,程序也能正常运行。但我们来思考一个问题:倘若第1条if语句出现了异常,那其后的语句就不能执行。也就是说, statement和connection这两个资源无法正常关闭,所以不能将3条if语句写在同一个try-catch语句里面。