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
    评论
好的,JDBCJava Database Connectivity的缩写,它是Java语言中用于操作数据库的标准API。在Java程序中使用JDBC查询数据的步骤如下: 1. 加载JDBC驱动程序 在使用JDBC操作数据库之前,需要先加载JDBC驱动程序。可以通过Class.forName()方法来加载驱动程序,例如: ``` Class.forName("com.mysql.jdbc.Driver"); ``` 2. 建立数据库连接 使用DriverManager.getConnection()方法建立与数据库的连接,需要指定数据库的URL、用户名和密码,例如: ``` String url = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, username, password); ``` 3. 创建Statement对象 使用Connection对象的createStatement()方法创建Statement对象,用于执行SQL语句,例如: ``` Statement stmt = conn.createStatement(); ``` 4. 执行SQL语句 使用Statement对象的executeQuery()方法执行查询语句,例如: ``` String sql = "select * from student where age > 18"; ResultSet rs = stmt.executeQuery(sql); ``` 5. 处理查询结果 使用ResultSet对象处理查询结果,例如: ``` while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("id=" + id + ", name=" + name + ", age=" + age); } ``` 6. 关闭资源 使用完ResultSet、Statement和Connection等资源后需要关闭,例如: ``` rs.close(); stmt.close(); conn.close(); ``` 以上就是使用JDBC查询数据的步骤,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值