package com.zl.dao;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.zl.utils.LogUtil;
/**
* @ClassName: DBHelper.java
* @Description:
* @author POM
* @version V1.0
* @Date
*/
public class DBHelper {
private Connection con=null;
private PreparedStatement pstmt=null;
private ResultSet rs=null;
static{
try {
Class.forName(MyProperties.getInstance().getProperty("driverClassName"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
DBHelper dao = new DBHelper();
String sql = "select t_id from tag where t_name = '历史'";
List<Map<String,Object>> res = dao.findSingle(sql);
for(Map<String,Object> m:res){
System.out.println(m);
}
}
public Connection getConn(){
Connection con = null;
try {
con = DriverManager.getConnection(MyProperties.getInstance().getProperty("url"),MyProperties.getInstance().getProperty("username"),MyProperties.getInstance().getProperty("password"));
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
//class反射
/**
* 关闭的方法
*/
public void closeAll(Connection con,PreparedStatement pstmt,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
LogUtil.log.error(e.toString());
}
}
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
LogUtil.log.error(e.toString());
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
LogUtil.log.error(e.toString());
}
}
}
/**
* 设置PreparedStatement对象的sql语句中的参数?
*/
public void setValues(PreparedStatement pstmt,Object ... params){
if(pstmt!=null&¶ms!=null&¶ms.length>0){
String type=null;
for(int i=0,len=params.length;i<len;i++){
Object o=params[i];
try {
type=o.getClass().getName();
if("javax.sql.rowset.serial.SerialBlob".equals(type)){
pstmt.setBlob(i+1, (Blob)o);
}else if("java.lang.Integer".equals(type)){
pstmt.setInt(i+1,Integer.parseInt(String.valueOf(o)));
}else if("java.lang.Double".equals(type)){
pstmt.setDouble(i+1, Double.parseDouble(String.valueOf(o)));
}else{
pstmt.setString(i+1,String.valueOf(o));
}
}catch (SQLException e) {
e.printStackTrace();
LogUtil.log.error(e.toString());
}
}
}
}
public void setValues(PreparedStatement pstmt,List<Object> params){
if(pstmt!=null&¶ms!=null&¶ms.size()>0){
Object[] objs = params.toArray();
setValues(pstmt,objs);
}
}
/**
* 增删改
* @param sql:sql语句集合,里面可以加?
* @param params:表示?对应的参数值的集合
* @return int:返回的值。成功>0,失败<=0
*/
public int update(List<String> sql,List<List<Object>> params){
int result=0;
con=getConn();
try {
con.setAutoCommit(false); //事务处理
for(int i=0;i<sql.size();i++){
List<Object> param=params.get(i);
pstmt=con.prepareStatement(sql.get(i)); //预编译对象
setValues(pstmt,param); //设置参数
result=pstmt.executeUpdate();
}
con.commit(); //没有错处执行
} catch (SQLException e) {
e.printStackTrace();
LogUtil.log.error(e.toString());
try {
con.rollback(); //出错回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
closeAll(con,pstmt,null);
}
return result;
}
/**
* 单表增删改
* @param sql:sql语句集合,里面可以加?
* @param params:表示?对应的参数值的集合
* @return int:返回的值。成功>0,失败<=0
*/
public int update(String sql,Object ... params){
int result=0;
con=getConn();
try {
pstmt=con.prepareStatement(sql); //预编译对象
setValues(pstmt,params); //设置参数
result=pstmt.executeUpdate();
} catch (SQLException e) {
LogUtil.log.error(e.toString());
try {
con.rollback(); //出错回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
closeAll(con,pstmt,null);
}
return result;
}
public int update(String sql,List<Object> params){
Object[] objs = params.toArray();
return update(sql,objs);
}
/**
* 聚合查询
* @param sql:聚合查询语句
* @param params:参数列表,用来替换sql中的?(占位符)
* @return list:结果集
*/
public List<String> find(String sql,Object ... params){
List<String> list=new ArrayList<String>();
con=getConn();
try {
pstmt=con.prepareStatement(sql); //预编译对象
setValues(pstmt,params); //设置参数
rs=pstmt.executeQuery(); //执行查询
ResultSetMetaData md=rs.getMetaData(); //结果集的元数据,它反映了结果集的信息
int count=md.getColumnCount(); //取出结果集中列的数量
if(rs.next()){
for(int i=1;i<=count;i++){
list.add(rs.getString(i));
}
}
} catch (SQLException e) {
e.printStackTrace();
LogUtil.log.error(e.toString());
}finally{
closeAll(con,pstmt,rs);
}
return list;
}
public List<String> find(String sql,List<Object> params){
Object[] objs = params.toArray();
return find(sql,objs);
}
/**
* 查询单个表
* @param <T> 泛型:即你要得到的集合中存的对象的类型
* @param sql: 查询语句,可以含有?
* @param params: ?所对应的参数值的集合
* @param c: 泛型类型所对应的反射对象
* @return :存储了对象的集合
* @throws SQLException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public <T> List<T> find(String sql,Class<T> c,Object ... params){
List<T> list=new ArrayList<T>(); //要返回的结果的集合
con=getConn(); //获取连接
try {
pstmt=con.prepareStatement(sql); //预编译对象
setValues(pstmt,params); //设置占位符
rs=pstmt.executeQuery(); //执行查询语句,得到结果集
Method[] ms=c.getMethods(); //取出这个反射实例的所有方法
ResultSetMetaData md=rs.getMetaData(); //获取结果集的元数据,它反映了结果集的信息
String[] colNames=new String[md.getColumnCount()];//创建一个数据colNames,用来存放列的名字
for(int i=0;i<colNames.length;i++){ //将列名保存到colName数组中
colNames[i]=md.getColumnName(i+1);
}
T t;
String colType=null; //类型名
Object obj=null;
while(rs.next()){//一条记录一条记录地迭代
t = c.newInstance();//实例化c类对象
for(String cn:colNames){
obj = rs.getObject(cn);//取得每条记录中每一列的值
if(obj!=null){//保证值不为空
colType = obj.getClass().getName();//取得类型名
for(Method m:ms){
if(("set"+cn).equalsIgnoreCase(m.getName())){//如果是对应的set方法
if("java.lang.Integer".equals(colType)){
m.invoke(t, rs.getInt(cn));
}else if("java.math.BigInteger".equals(colType)){
m.invoke(t, rs.getInt(cn));
}else if("java.lang.Double".equals(colType)){
m.invoke(t, rs.getDouble((cn)));
}else if("java.math.BigDecimal".equals(colType)){
m.invoke(t, Double.parseDouble( rs.getBigDecimal(cn).toString()) );
}else if("image".equals(colType)){
m.invoke(t, rs.getBlob(cn));
}else{
m.invoke(t, rs.getString(cn));
}
}
}
}
}
list.add(t);
}
} catch (Exception e) {
e.printStackTrace();
LogUtil.log.equals(e.toString());
}finally{
closeAll(con, pstmt, rs);
}
return list;
}
public <T> List<T> find(String sql,Class<T> c,List<Object> params){
没有合适的资源?快使用搜索试试~ 我知道了~
java网上订餐系统前后台.rar
共462个文件
png:80个
class:77个
java:74个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 141 浏览量
2024-02-21
15:06:44
上传
评论 1
收藏 10.66MB RAR 举报
温馨提示
java源码 仅供学习和参考,禁止一切商业行为
资源推荐
资源详情
资源评论
收起资源包目录
java网上订餐系统前后台.rar (462个子文件)
index.js.bak 13KB
DBHelper.class 13KB
DBHelper.class 12KB
BasicServlet.class 8KB
ResfoodBizImpl.class 7KB
ResfoodServlet.class 6KB
ResorderServlet.class 6KB
RedisUtil.class 6KB
RedisUtil.class 6KB
BasicServlet.class 5KB
Resorder.class 5KB
Resorder.class 5KB
FileUploadUtil.class 4KB
FileUploadUtil.class 4KB
Resfood.class 4KB
Resfood.class 4KB
ResuserServlet.class 4KB
ResorderBizImpl.class 4KB
Test1.class 4KB
UserRedis.class 4KB
TagUtil.class 4KB
UserRedis.class 4KB
UpAndDownServlet.class 3KB
VerifyCodeServlet.class 3KB
ResfoodBizImpl.class 3KB
UpAndDownUtil.class 3KB
RankUtil.class 3KB
RankUtil.class 3KB
LoginFilter.class 3KB
Resorderitem.class 3KB
HistoryServlet.class 3KB
ResorderServlet.class 3KB
ResadminServlet.class 3KB
AutoCompleteUtil.class 3KB
Resuser.class 3KB
Resuser.class 3KB
Encrypt.class 2KB
Encrypt.class 2KB
Resadmin.class 2KB
Resadmin.class 2KB
ResfoodServlet.class 2KB
IndexServlet.class 2KB
ResuserBizImpl.class 2KB
TimerListener.class 2KB
MoneyUtils.class 2KB
HistoryBizImpl.class 2KB
ResorderBizImpl.class 2KB
CharacterEncodingFilter.class 2KB
CharacterEncodingFilter.class 2KB
ResuserServlet.class 2KB
Test2.class 2KB
DateUtils.class 2KB
ResadminBizImpl.class 1KB
MyProperties.class 1KB
MyProperties.class 1KB
ResuserBizImpl.class 1KB
Test1.class 1KB
InitListener.class 1KB
JsonModel.class 1KB
JsonModel.class 1KB
IResfoodBiz.class 1KB
TimerListener$2.class 857B
TimerListener$1.class 853B
UserRankBizImpl.class 852B
Person.class 714B
ZLConstants.class 668B
ZLConstants.class 619B
IResorderBiz.class 527B
LogUtil.class 524B
LogUtil.class 516B
Test.class 381B
IResfoodBiz.class 357B
IResorderBiz.class 334B
IResuserBiz.class 297B
IResuserBiz.class 277B
IHistoryBiz.class 255B
IResadminBiz.class 186B
IUserRankBiz.class 146B
.classpath 714B
.classpath 581B
org.eclipse.wst.common.component 540B
org.eclipse.wst.common.component 478B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.jsdt.ui.superType.container 49B
easyui.css 47KB
ueditor.css 43KB
ueditor.min.css 34KB
video-js.css 21KB
video-js.min.css 11KB
index.css 8KB
shCoreDefault.css 7KB
codemirror.css 3KB
reset.css 2KB
icon.css 2KB
dialogbase.css 2KB
webuploader.css 515B
demo.css 361B
iframe.css 41B
Thumbs.db 335KB
Thumbs.db 70KB
共 462 条
- 1
- 2
- 3
- 4
- 5
资源评论
GeekyGuru
- 粉丝: 1616
- 资源: 1099
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现串口发送接收数据 可配置端口,波特率等 发送可选择ASCII方式或HEX方式
- matlab基于BP神经网络手写字母识别(单一).zip代码9
- 基于matlab实现编写的串口调试工具,数据接收部分采用中断方式,保证了实时的数据显示
- 基于matlab实现39节点电力系统合闸角调控过程中的机组和负荷的灵敏度计算.rar
- HBase数据库性能调优
- 原生微信小程序源码 - -首字母排序选择
- 基于QT+C++开发的保卫萝卜塔防游戏+源码(毕业设计&课程设计&项目开发)
- newapp.apk
- 项目申报管理系统论文Java项目
- 8数码、α-β搜索的博弈树算法编写一字棋游戏、Fisher线性分类器、感知器算法、SVM 分类器、卷积神经网络 CNN 框架
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功