使用PreparedStatement实现针对不同的表的通用的查询操作,返回一条查询结果

代码中Customer类的构造查看:针对单个表进行通用的查询操作_qq_46053741的博客-CSDN博客

代码中Order类的构造查看:当表的字段名与类的属性名不相同时,怎么查询表的记录_qq_46053741的博客-CSDN博客

代码中jdbcConnection类的构造查看:封装数据库的连接关闭操作_qq_46053741的博客-CSDN博客

下面是使用PreparedStatement实现针对不同的表的通用的查询操作:

package com3preparedstatementQuery;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import org.junit.Test;

import com3preparedstatement.bean.Customer;
import com3preparedstatement.bean.Order;
import com3preparedstatement.jdbc.jdbcConnection;


public class PreparedStatementQueryTest {
	@Test
	public void testGetInstance(){
		String sql=null;
		sql="select order_id id,order_name name,order_date date from reorder where order_id=?";
		Order order=GetInstance(Order.class,sql,2);
		System.out.println(order.toString());
		sql="select id,name,email,birth from Customers where id=?";
		Customer customer=GetInstance(Customer.class,sql,8);
		System.out.println(customer.toString());
	}
	
	public <T>T GetInstance(Class<T> clazz,String sql, Object ...args){
		//1、获取连接
		Connection conn=null;
		//2、实例化PreparedStatement对象,
		PreparedStatement ps=null;
		//4、执行查询操作,返回结果集
		ResultSet rs=null;
		try {
			conn = jdbcConnection.connection();
			ps = conn.prepareStatement(sql);
			//3、填充占位符
			for(int i=0;i<args.length;i++){
				ps.setObject(i+1, args[i]);
			}
			rs = ps.executeQuery();
			//5、获取结果集中的元数据
			ResultSetMetaData rsmd=rs.getMetaData();
			//6、获取表的列数
			int columnCount=rsmd.getColumnCount();
			if(rs.next()){
				T t=clazz.newInstance();
				for(int i=0;i<columnCount;i++){
					//7、获取当前记录列的值
					Object value=rs.getObject(i+1);
					//8、获取当前记录列的字段名
					String columnName=rsmd.getColumnLabel(i+1);
					//9、反射
					Field field=clazz.getDeclaredField(columnName);
					field.setAccessible(true);
					field.set(t, value);
				}
				return t;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		//10、关闭资源
		jdbcConnection.CloseResource(conn, ps, rs);
		return null;
	}
}

以下是使用PreparedStatement实现查询整个的示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class QueryTableExample { public static void main(String[] args) { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { // 1. 加载数据库驱动程序 Class.forName("com.mysql.jdbc.Driver"); // 2. 获取数据库连接 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "password"; conn = DriverManager.getConnection(url, user, password); // 3. 创建PreparedStatement对象 String sql = "SELECT * FROM mytable"; stmt = conn.prepareStatement(sql); // 4. 执行查询并获取结果 rs = stmt.executeQuery(); // 5. 处理结果 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); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 6. 关闭资源 try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 在上面的示例中,我们通过PreparedStatement对象执行了一个查询语句,查询了整个。在处理结果时,我们使用了ResultSet对象的next()方法来遍历结果中的每一行数据,并使用getInt()、getString()等方法获取每一列的值。最后,我们在finally块中关闭了所有资源,以确保程序正确释放资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值