博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java执行sql解析_java执行SQL语句实现查询的通用方法详解
阅读量:4678 次
发布时间:2019-06-09

本文共 3005 字,大约阅读时间需要 10 分钟。

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

/*

* 执行sql查询语句

*/

public static VectorexecuteQuery(Classclazz, String sql, Object... args) {

Connection conn = null;

PreparedStatement preparedstatement = null;

ResultSet rs = null;

VectorvecRs = new Vector();

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();

MapmapMetaData = new HashMap();

// 打印一列的列名

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.Entryentry : 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;

}

转载地址:http://zafkp.baihongyu.com/

你可能感兴趣的文章
JAVA8学习笔记(二)----三个预定义接口
查看>>
JDBC连接各种数据库的字符串
查看>>
构建之法阅读笔记06
查看>>
CentOS minimal新装配置笔记
查看>>
压缩映象原理的一个应用
查看>>
Aurora — 一个在 MSOffice 内输入 LaTeX 公式的很好用插件
查看>>
关于sql优化的一个小总结
查看>>
Java语言中的正则表达式
查看>>
Java环境变量设置
查看>>
【JBPM4】判断节点decision 方法3 handler
查看>>
filter 过滤器(监听)
查看>>
Linux进程间通信---共享内存
查看>>
Computer Information
查看>>
交换机/路由器上的 S口 F口 E口
查看>>
P1298(矩阵切割)DP
查看>>
wzplayer for delphi demo截图
查看>>
团队第二周:SRS文档
查看>>
Zookeeper的安装与使用:
查看>>
密码策略限制最大与最小长度
查看>>
正则表达式模式
查看>>