问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样写一个通用的JDBC查询方法

发布网友 发布时间:2022-04-23 11:30

我来回答

3个回答

懂视网 时间:2022-04-30 11:46

package com.platform_db.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.platform_db.dao.IObjectDao;
import com.platform_db.db.DBUtil;

public class ObjectDaoImpl implements IObjectDao{
public List<?> find(String sql,Object[] pars) throws Exception {
PreparedStatement ps = null;
ResultSet rs = null;

Connection conn = DBUtil.openConnection();
ps = conn.prepareStatement(sql);
for (int i = 0;i < pars.length ; i++) {
ps.setObject(i+1, pars[i]);
}
rs = ps.executeQuery();

List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();

ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
while( rs.next() ){
Map<String , Object> map = new HashMap<String , Object>();
for (int i = 1; i <= columnCount; i++) {
map.put(md.getColumnName(i), rs.getObject(i));
}
data.add(map);
}

rs.close();
ps.close();
conn.close();

return data;
}

public boolean exec(String sql, Object[] pars) throws Exception {
Connection conn = DBUtil.openConnection();
conn.setAutoCommit(false);

PreparedStatement ps = conn.prepareStatement(sql);
for (int i = 0;i < pars.length ; i++) {
ps.setObject(i+1, pars[i]);
}
boolean flag = ps.execute();

conn.commit();
conn.setAutoCommit(true);
ps.close();
conn.close();
return flag;
}

public int[] execBatch(String sql, List<Object[]> list) throws Exception {
Connection conn = DBUtil.openConnection();
conn.setAutoCommit(false);

PreparedStatement ps = conn.prepareStatement(sql);
for(Object[] pars : list){
for (int i = 0;i < pars.length ; i++) {
ps.setObject(i+1, pars[i]);
}
ps.addBatch();
}

int[] counts = ps.executeBatch();

conn.commit();
conn.setAutoCommit(true);
ps.close();
conn.close();

return counts;
}
}

JDBC的crud通用方法

标签:

热心网友 时间:2022-04-30 08:54

public static Object get(Class clazz,String sql,Object[] pars)
{
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Object obj = null;

//获得数据库连接
conn = getConnection();
try {
//给sql的参数赋值并执行查询
ps = conn.prepareStatement(sql);
for (int i = 0; i < pars.length; i++) {
ps.setObject(i+1, pars[i]);
}
rs = ps.executeQuery();

//根据查询结果获得该rs对应的ResultSetMetaData对象
ResultSetMetaData rsmd = rs.getMetaData();
//获得返回的列的数量
int count = rsmd.getColumnCount();
//该数组存放列的名称
String[] columns = new String[count];
//向数组中存放列的名称
for (int i = 0; i < columns.length; i++) {
columns[i] = rsmd.getColumnLabel(i+1);
}

//如果结果中有数据存在
if(rs.next())
{
//根据pojo的class反射获得其对象
obj = clazz.newInstance();
//获得pojo所有的方法
Method[] methods = obj.getClass().getMethods();

for (int i = 0; i < columns.length; i++) {
//根据列名获得set方法<由于没有映射文件,要求pojo中的属性必须和列名相同>
String column = columns[i];
String methodName = "set" + column.substring(0,1).toUpperCase() + column.substring(1);

//根据获得的方法数组去迭代 如果方法名称和上面获得的set方法相同 就执行这个方法
for (int j = 0; j < methods.length; j++) {
Method method = methods[j];
if(method.getName().equals(methodName))
{
method.invoke(obj, rs.getObject(column));
}
}
}
}

} catch (Exception e) {
e.printStackTrace();
} finally{
close(rs,ps,conn);
}

return obj;

}

真要做能用的查询,还是使用xml配置文件或者注解好些。比较灵活,性能也要好些。
用元数据都是比较耗费性能的,而且也比较麻烦。

热心网友 时间:2022-04-30 10:12

Connection conn = getConnection();
List list = new ArrayList();
try{
Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(SQL);

ResultSetMetaData md = rs.getMetaData();

int columnCount = md.getColumnCount();

while (rs.next()) {

Map map = new HashMap();

for (int i = 1; i <= columnCount; i++) {

map.put(md.getColumnName(i), rs.getObject(i));

}

list.add(map);

}

}catch(SQLException e)
{
e.printStackTrace();
}

return list;
我自己写的,不管什么SQL,都可以查询获取到一个list,如何取list,我想不是这个主题的内容
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 jdbc怎么动态的创建一个数据库? JDBC用户特定条件查询怎么实现 jdbc的JTable中实现一个简单的查询功能 JDBC如何实现跨数据库的查询 java 中使用jdbc怎样实现动态的链接多个数据库?? jdbc preparedstatement可以动态查询么 Java里面的JDBC是什么意思啊? java中使用JDBC完成数据库操作的基本步骤是什么? JDBC可以动态的获取数据库里的所有的表吗 jdbc原理 JDBC中提供的两种实现数据查询的方法是什么? JDBC的工作原理是什么? jdbc preparedstatement可以用来进行动态查询吗 简述使用Jdbc实现数据查询的完整步骤 如何剪视频 怎样CUT一部电视剧中的片段?如题 谢谢了 单人cut什么意思 爱剪辑要剪某个综艺的单人cut怎么剪 福州家庭装修谁比较清楚? 油画是什么时候传入中国的 苹果11怎么不能长截图? 手机充电时显示充电显示充电异常找售后咋回事 18. 在制作PPT时,如何设置动作按钮和超链接? ppt链接中的超链接和动作有什么不同? 通过设置动作按钮和插入超链接来改变幻灯片的播放顺序吗? PPT中 动作设置 和 超链接 的区别?是不是作用是一样的? 要求在做的幻灯片中添加超级链接和动作按钮 请问应该怎么做呀???_百度... 动作按钮和超链接的异同 ppt中动作和超链接的区别 PPT动作超链接 关于PPT自定义动作和超链接问题,请求帮助! 支付宝账户管理在哪? 支付宝账户管理在什么地方啊 支付宝的账户管家在哪里 为什么我登录支付宝后找不到“支付宝帐号管理”?急用 支付宝设置银行账号管理有什么用 切菠萝的专用刀的名字是什么? 二级心理咨询师的个人成长报告应该怎么写? 个人分析报告怎么写? 个人成长分析报告应该怎么写啊?希望能够详细点,最好能给一篇范文