微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JDBC查询

JDBC查询数据库中表的字段,将其封装到Java bean中。

package com.JDBC;

import org.junit.Test;

import java.lang.reflect.Field;
import java.sql.*;

public class JDBC03 { //不确定sql查询字段及筛选条件的情况下的查询通用方法 public static void queryTest(String sql,Object...args) { Connection connection1 = null; PreparedStatement preparedStatement = null; ResultSet resultSet1 = null; try { //读取配置文件中的信息获取连接 connection1 = JDBCUtils.getConnection(); //预编译sql preparedStatement = connection1.prepareStatement(sql); //填充占位符 for(int i=0; i<args.length; i++){ preparedStatement.setobject(i+1, args[i]); } //执行sql resultSet1 = preparedStatement.executeQuery(); //获取结果集的元数据 ResultSetMetaData MetaData = resultSet1.getMetaData(); //获取结果集的列数,确定要查询的字段数量 int columnCount = MetaData.getColumnCount(); //整个过程为将查询结果的字段值封装到对象中,而那些对象中未被查询属性仍为认值 while(resultSet1.next()){ Pet pet = new Pet(); //结果集的每一行造一个对象,在其他情况下可以将pet封装到list中 for (int i = 0; i < columnCount; i++) { //对要查询的各个字段进行处理 Object object = resultSet1.getobject(i + 1); //获取该字段的查询值 String columnName = MetaData.getColumnName(i + 1); //获取该字段名,确定要set的对象属性 Field declaredField = Pet.class.getDeclaredField(columnName); //通过反射set对象属性(重点) declaredField.setAccessible(true); //private declaredField.set(pet, object); } System.out.println(pet); } } catch (Exception e) { e.printstacktrace(); } finally { //关闭资源 JDBCUtils.closeConnection(connection1, preparedStatement,resultSet1); } } @Test public void test(){ String sql = "select name,species,age from pet where species=?;"; queryTest(sql, "cat"); } }

占位符只能取字符型,不能取关键字和表名等。(可能部分解决sql注入的问题?)

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐