首页 > 数据库技术 > 详细

JDBC查询

时间:2020-06-25 14:18:32      阅读:67      评论:0      收藏:0      [点我收藏+]

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注入的问题?)

技术分享图片

 

JDBC查询

原文:https://www.cnblogs.com/faded828x/p/13191626.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!