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

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

/*

* 执行SQL查询语句

*/

public static Vector executeQuery(Class clazz,String sql,Object... args) {

Connection conn = null;

PreparedStatement preparedstatement = null;

ResultSet rs = null;

Vector vecRs = 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();

Map mapMetaData = 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.Entry 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,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语句实现查询的通用方法详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值