JDBC实现增删改查(二)——JDBC实现查询功能

一、向数据库中添加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语句里面。

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值