java执行SQL语句实现查询的通用方法详解

完成SQL查询 并将查询结果放入Vector容器,以便其他程序使用

/*
   * 执行sql查询语句
   */
public static <T> Vector<T> executeQuery(Class<T> clazz, String sql, Object... args) {
	Connection conn = null;
	PreparedStatement preparedstatement = null;
	ResultSet rs = null;
	Vector<T> vecRs = new Vector<T>();
	T obj = null;
	try {
		conn = JDBCTools.getConnection();
		preparedstatement = conn.prepareStatement(sql);
		// 通过sql语句来判断选择了那些列
		for (int i = 0; i < args.length; i++) {
			preparedstatement.setObject(i + 1, args[i]);
		}
		// 利用sql查询获取结果集
		// 利用反射创建实体类的对象
		// 获取结果街的别名Stud_id 获取JDBC的元数据
		// 获取结果集每一列的值,结合上一步得到一个Map键值对
		// 键:列的别名 值:列的值
		// 在利用反射对实体类对象的属性赋值
		// 属性为Map的键 值为Map的值
		rs = preparedstatement.executeQuery();
		// 获取元数据
		ResultSetMetaData rsmd = rs.getMetaData();
		Map<String, Object> mapMetaData = new HashMap<String, Object>();
		// 打印一列的列名
		while (rs.next()) {
			//获取数据表中满足要求的一行数据,并放入Map中
			for (int i = 0; i < rsmd.getColumnCount(); i++) {
				String columnLabel = rsmd.getColumnLabel(i + 1);
				Object columnValue = rs.getObject(columnLabel);
				// System.out.println(columnLabel);
				mapMetaData.put(columnLabel, columnValue);
			}
			//将Map中的数据通过反射初始化T类型对象
			if (mapMetaData.size() > 0) {
				obj = clazz.newInstance();
				for (Map.Entry<String, Object> entry : mapMetaData.entrySet()) {
					String fieldkey = entry.getKey();
					Object fieldvalue = entry.getValue();
					// System.out.println(fieldkey + ":" + fieldvalue);
					ReflectionUtils.setFieldValue(obj, fieldkey, fieldvalue);
					//通过反射赋值
				}
			}
			//将对象装入Vector容器
			vecRs.add(obj);
		}
	}
	catch (Exception e) {
		e.printStackTrace();
	}
	return vecRs;
}

其中使用到的工具类方法

获取数据库连接JDBCTools.getConnection()

/*
   * 获取数据库的连接
   */
public static Connection getConnection() throws Exception {
	Connection conn = null;
	String driver = null;
	String jdbcUrl = null;
	String username = null;
	String password = null;
	// 获取Properties对象
	Properties properties = new Properties();
	InputStream in = JDBCTools.class.getClassLoader().getResourceAsStream("jdbc.properties");
	properties.load(in);
	driver = properties.getProperty("driver");
	jdbcUrl = properties.getProperty("jdbcUrl");
	username = properties.getProperty("user");
	password = properties.getProperty("password");
	Class.forName(driver);
	conn = DriverManager.getConnection(jdbcUrl, username, password);
	return conn;
}

ReflectionUtils.setFieldValue(obj,fieldkey,fieldvalue);

将obj对象的fieldkey属性赋值为fieldvalue

//设置对象的属性
public static void setFieldValue(Object obj,String fieldName,Object value){
	Field field=getDeclaredField(obj, fieldName);
	if(field==null){
		throw new IllegalArgumentException("Could not find field["+
		    fieldName+"] on target ["+obj+"]");
	}
	makeAccessiable(field);
	try{
		field.set(obj, value);
	}
	catch(IllegalAccessException e){
		System.out.println("不可能抛出的异常");
	}
}
//判断field的修饰符是否是public,并据此改变field的访问权限
public static void makeAccessiable(Field field){
	if(!Modifier.isPublic(field.getModifiers())){
		field.setAccessible(true);
	}
}
//获取field属性,属性有可能在父类中继承
public static Field getDeclaredField(Object obj,String fieldName){
	for (Class<?> clazz=obj.getClass(); clazz!=Object.class; clazz=clazz.getSuperclass()){
		try{
			return clazz.getDeclaredField(fieldName);
		}
		catch(Exception e){
		}
	}
	return null;
}

总结

以上就是本文关于java执行SQL语句实现查询的通用方法详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • mybatis教程之动态sql语句_动力节点Java学院整理
  • 详解JAVA生成将图片存入数据库的sql语句实现方法
  • 详解Java的MyBatis框架中SQL语句映射部分的编写
  • 在Java的Hibernate框架中使用SQL语句的简单介绍
  • 详解Java的Hibernate框架中的缓存与原生SQL语句的使用
  • 10种Java开发者编写SQL语句时常见错误
  • java实现简单的给sql语句赋值的示例
  • java跟踪执行的sql语句示例分享
(0)

相关推荐

  • 10种Java开发者编写SQL语句时常见错误

    Java开发者对于面向对象编程思维与命令行编程思维的协调程度,取决于他们如下几种能力的水平: 技巧(任何人都可以编写命令行形式的代码) 教条(有的人使用"模式 - 模式"的方式,即模式无处不在,并以名字作为标识) 情绪状况(在初期,真正面向对象形式的代码比起命令式代码会更加难懂.) 但是,当Java开发人员编写SQL语句时,一切都变得不同了.SQL是一种说明式语言,与面向对象思想和命令式思想无关.在SQL语言中,查询非常容易表达.但它也不是那么容易以最佳或最正确地方式编写出来.开发人员

  • java跟踪执行的sql语句示例分享

    代码: 复制代码 代码如下: package com.lwj.test.proxy; import java.lang.reflect.InvocationHandler;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;import java.sql.SQLExce

  • 详解Java的MyBatis框架中SQL语句映射部分的编写

    1.resultMap SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对应的接口类的路径.写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用,例如: <mappers> <mapper resource="com/liming/manager/data/mappers/UserMapper.xml" /> <mapper resource="com/liming/mana

  • 详解JAVA生成将图片存入数据库的sql语句实现方法

    详解JAVA生成将图片存入数据库的sql语句实现方法 实现代码: 注释很清楚,不在重述~ public class Image2Hex { public static void main(String[] args) { try{ //存放图片的文件夹 File list = new File("d:/qmx"); File[] lists = list.listFiles(); String name; //生成的语句存放文件 PrintWriter pw = new PrintWr

  • mybatis教程之动态sql语句_动力节点Java学院整理

    有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息.使用Oracle的序列.mysql的函数生成Id.这时我们可以使用动态sql. 下文均采用mysql语法和函数(例如字符串链接函数CONCAT). selectKey 标签 在insert语句中,在Oracle经常使用序列.在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键.使用myBatis的selec

  • 在Java的Hibernate框架中使用SQL语句的简单介绍

    Hibernate中有HQL查询语法.但我们用得比较熟的还是数SQL语句,那么应该怎么来让Hibernate支持SQL呢?这个不用我们去考虑了,Hibernate团队已经早就做好了.        废话不说,直接来例子啦. select * from t_user usr 上面是一条SQL语句,又是废话,是个人都知道.我们想让Hibernate执行这条语句,怎么办呢?看代码: Query query = session.createSQLQuery("select * from t_user u

  • 详解Java的Hibernate框架中的缓存与原生SQL语句的使用

    Hibernate缓存 缓存是所有关于应用程序的性能优化和它位于应用程序和数据库之间,以避免数据库访问多次,让性能关键型应用程序有更好的表现. 缓存对Hibernate很重要,它采用了多级缓存方案下文所述: 第一级缓存: 第一级缓存是Session的缓存,是一个强制性的缓存,通过它所有的请求都必须通过. Session对象不断自身的动力的对象,提交到数据库之前. 如果发出多个更新一个对象,Hibernate试图拖延尽可能长的时间做了更新,以减少发出的更新SQL语句的数量.如果您关闭会话,所有被缓

  • java实现简单的给sql语句赋值的示例

    代码本身很简单.拼接sql的时候?不好数,简单的用来赋值. 复制代码 代码如下: /**  * TODO 循环赋值,缺少的类型可随时添加  * @author Lucius  * @param pt  * @param list  * @throws SQLException  */ public static void setParam(PreparedStatement pt, List list) throws SQLException{  for(int i = 0;i<list.siz

  • java执行SQL语句实现查询的通用方法详解

    完成SQL查询 并将查询结果放入Vector容器,以便其他程序使用 /* * 执行sql查询语句 */ public static <T> Vector<T> executeQuery(Class<T> clazz, String sql, Object... args) { Connection conn = null; PreparedStatement preparedstatement = null; ResultSet rs = null; Vector<

  • PHP获取MySQL执行sql语句的查询时间方法

    如下所示: //计时开始 runtime(); //执行查询 mysql_query($sql); //计时结束. echo runtime(1); //计时函数 function runtime($mode=0) { static $t; if(!$mode) { $t = microtime(); return; } $t1 = microtime(); list($m0,$s0) = explode(" ",$t); list($m1,$s1) = explode("

  • PostgreSQL查看带有绑定变量SQL的通用方法详解

    当我们在PostgreSQL中分析一些历史的SQL问题时,往往看到的SQL都是带有绑定变量的.而对于pg,我们没法像Oracle一样通过例如dba_hist_sqlbind之类的视图去获取历史的绑定变量值.不仅如此,对于这些带有绑定变量的SQL,我们甚至没法像在Oracle中一样获取一个预估的执行计划. 在pg中使用explain去执行则会报错: bill=# explain select * from t1 where id = $1 and info = $2; ERROR: there i

  • Java Fluent Mybatis 聚合查询与apply方法详解流程篇

    前言 接着上一篇文章:Java Fluent Mybatis 分页查询与sql日志输出详解流程篇 我把分页已经调整好了,现在实验一下官方给出的聚合查询方法. GitHub代码仓库:GitHub仓库 数据准备 为了聚合查询的条件,添加了几条数据. MIN 我们试着获取最小的年龄. 方法实现 @Override public Integer getAgeMin() { Map<String, Object> result = testFluentMybatisMapper .findOneMap(

  • DQL命令查询数据实现方法详解

    目录 一.SELECT语法-排序 二.SELECT语法-分页查询 三.SELECT语法-分组查询 四.WHERE与HAVING对比 五.子查询 1.IN子查询 2.EXISTS子查询 六.多表连接查询 1.内连接 2.多表内连接 3.左外连接 4.右外连接 5.自连接 6.不同的SQL JOIN对比 一.SELECT语法-排序 SELECT [ALL | DISTINCT] { * | table.* | [ table.field1 [ as alias1] [, table.field2 [

  • java并发编程_线程池的使用方法(详解)

    一.任务和执行策略之间的隐性耦合 Executor可以将任务的提交和任务的执行策略解耦 只有任务是同类型的且执行时间差别不大,才能发挥最大性能,否则,如将一些耗时长的任务和耗时短的任务放在一个线程池,除非线程池很大,否则会造成死锁等问题 1.线程饥饿死锁 类似于:将两个任务提交给一个单线程池,且两个任务之间相互依赖,一个任务等待另一个任务,则会发生死锁:表现为池不够 定义:某个任务必须等待池中其他任务的运行结果,有可能发生饥饿死锁 2.线程池大小 注意:线程池的大小还受其他的限制,如其他资源池:

  • Java语言中flush()函数作用及使用方法详解

    最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写出,也可以使用flush方法将缓冲区中的数据强制写出或使用close()方法关闭流,关闭流之前,缓冲输出流将缓冲区数据一次性写出.flash()和close()都使数据强制写出,所以两种结果是一样的,如果都不写的话,会发现不能成功写出 针对上述回答,给出了精准的回答 FileOutPutStream

  • 对laravel in 查询的使用方法详解

    今天遇到多条件搜索,其中需要用到in查询,但是laravel不支持 [ 'type', 'in', '1,2,3'] 这样的写法 经过一波百度,也没发现什么好的方法. 其中一种方法是: $where = function ($query) {$query->whereIn('id', [1,2])->orWhere('d_id', '=', '83');} 这样确实可以解决,是一种解决方法.但我总觉得还有更好的方法,找到了 DB::Raw(); 开始我是这样用的 但是这样总会在sql后面出现i

  • Java实现Excel转PDF的两种方法详解

    目录 一.使用spire转化PDF 1.使用spire将整个Excel文件转为PDF 2.指定单个的sheet页转为PDF 二.使用jacob实现Excel转PDF(推荐使用) 1.环境准备 2.执行导出PDF 使用具将Excel转为PDF的方法有很多,在这里我给大家介绍两种常用的方法,分别应对两种不一样的使用场景,接下来我在springboot环境下给大家做一下演示! 一.使用spire转化PDF 首先介绍一种比较简单的方法,这种方法可以使用短短的几行代码就可以将我们的Excel文件中的某一个

  • Java实现添加条形码到PDF表格的方法详解

    目录 程序环境 代码示例 条码的应用已深入生活和工作的方方面面.在处理条码时,常需要和各种文档格式相结合.当需要在文档中插入.编辑或者删除条码时,可借助于一些专业的类库工具来实现.本文,以操作PDF文件为例,介绍如何在编辑表格时,向单元格中添加条形码. 程序环境 本次功能测试中,使用 Free Spire.PDF for Java. 实现功能的大致思路:生成条形码,将条形码保存为图片,然后在PDF中的表格单元格中插入条码图片. Spire.PDF for Java 中的Spire.Pdf.Bar

随机推荐