package cn.itcast.commons;
import java.io.IOException;
import java.io.InputStream;
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.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class DBHelper {
static{
try {
Class.forName(ReaderPro.getReaderPro().getProperty("driverClassName"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接的方法
* @return
*/
private Connection getConnection(){
Connection cn = null;
try {
cn = DriverManager.getConnection(ReaderPro.getReaderPro().getProperty("url"),ReaderPro.getReaderPro());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cn;
}
/**
* 给预编译语句中的占位符赋值
* @param pstmt 要赋值的预编译语句块
* @param params 对应的占位符?的值
*/
private void setParams(PreparedStatement pstmt,Object ... params){
//给预编译执行语句中的占位符赋值
if(params!=null && params.length>0){ //说明要执行的sql语句中有占位符?
for(int i=0,len=params.length;i<len;i++){
try {
pstmt.setObject(i+1,params[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
/**
* 给预编译语句中的占位符赋值
* @param pstmt 要赋值的预编译语句块
* @param params 对应的占位符?的值
*/
private void setParams(PreparedStatement pstmt,List<Object> params){
//给预编译执行语句中的占位符赋值
if(params!=null && params.size()>0){ //说明要执行的sql语句中有占位符?
for(int i=0,len=params.size();i<len;i++){
try {
pstmt.setObject(i+1,params.get(i));
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
/**
* 给预编译语句中的占位符赋值
* @param pstmt 要赋值的预编译语句块
* @param params 对应的占位符?的值
*/
private void setParams(PreparedStatement pstmt,String ... params){
//给预编译执行语句中的占位符赋值
if(params!=null && params.length>0){ //说明要执行的sql语句中有占位符?
for(int i=0,len=params.length;i<len;i++){
try {
pstmt.setString(i+1,params[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
/**
* 关闭资源的方法
* @param rs 要关闭的结果集
* @param pstmt 要关闭的预编译语句
* @param con 要关闭的连接
*/
private void closeAll(ResultSet rs,PreparedStatement pstmt,Connection con){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 执行更新操作
* @param sql 要执行更新的sql语句(insert、delete、update)
* @param params 要执行的更新语句中占位符?的值,给定的顺序必须跟?的顺序一致
* @return 更新语句执行后,所影响的数据的行数
*/
public int update(String sql,String ... params){
Connection con=null;
PreparedStatement pstmt=null;
int result=0;
try {
con=this.getConnection(); //获取连接
//创建预编译执行语句
pstmt=con.prepareStatement(sql);
this.setParams(pstmt, params);
//执行预编译语句,获取结果
result=pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally{
this.closeAll(null, pstmt, con);
}
return result;
}
/**
* 查询数据
* @param sql 要执行的查询语句
* @param params 查询语句中占位符?对应值
* @return 返回满足条件的所有数据
*/
public List<Map<String,Object>> finds(String sql,Object ... params){
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
int pp = 0;
try {
con=this.getConnection(); //获取连接
pstmt=con.prepareStatement(sql); //创建预编译执行语句
this.setParams(pstmt, params); //给预编译执行语句中的占位符赋值
rs=pstmt.executeQuery(); //执行预编译语句获取结果集
rs = pstmt.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData(); //获取结果集中列的信息
int colCount=rsmd.getColumnCount(); //获取结果集中列的数量
String[] colNames=new String[colCount];
for(int i=0;i<colCount;i++){ //通过列的索引循环获取每个列的列名
colNames[i]=rsmd.getColumnName(i+1).toLowerCase();
}
Map<String,Object> map=null; //每一个map中存放一行数据
//通过列名循环获取每个列的值
Blob blob;
Object obj=null;
String typeName=null;
byte[] bt=null;
InputStream is=null;
while(rs.next()){ //每循环一次就是一行数据
pp++;
map=new HashMap<String,Object>();
for(String colName:colNames){ //循环着一行中的每个列,通过每个列的列名获取这个列的值
obj=rs.getObject(colName);
if(obj!=null){
typeName=obj.getClass().getSimpleName();
if("BLOB".equals(typeName)){
try {
blob=(Blob)obj;
bt=new byte[ (int) blob.length() ];
is=blob.getBinaryStream();
is.read(bt);
} catch (IOException e) {
e.printStackTrace();
} finally{
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
map.put(colName,bt); //以列名为键,以对应列的值为值
}else{
map.put(colName,obj); //以列名为键,以对应列的值为值
}
}else{
map.put(colName,obj); //以列名为键,以对应列的值为值
}
}
list.add(map);
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
this.closeAll(rs, pstmt, con);
}
return list;
}
public List<String> getAllColnumsName(ResultSet rs) throws Exception{
List<String> list = new ArrayList<String>();
ResultSetMetaData rsmd = rs.getMetaData(); //获取结果集中列的信息
int colCount=rsmd.getColumnCount(); //获取结果集中列的数量
for(int i=0;i<colCount;i++){ //通过列的索引循环获取每个列的列名
String x = rsmd.getColumnName(i+1).toLowerCase();
list.add(x);
}
return list;
}
/**
* 获取多行值
* @param sql
* @param params
* @param c
* @return
*/
public <T> List<T> findAll(String sql,List<Object> params,Class c){
List<T> list = new ArrayList<T>();
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
con = this.getConnection();
pstmt = con.prepareStatement(sql);
//设置参数
this.setParams(pstmt, params);
//执行
rs = pstmt.executeQuery();
//获取所有的列名
List<String> columnNames = this.getAllColnumsName(rs);
//获取class的所有的方法
Method[] methods = c.getDeclaredMethods();
T t;//实例化对象
String methodName = null;//方法名
String columnName = null;//列名
String typeName = null;//参数类型名
Object val = null;//列对应的值
while(rs.next()){
t = (T)c.newInstance();//实例化一个对象
//获取所有的列
for(int i = 0;i<columnNames.size();i++){
co
没有合适的资源?快使用搜索试试~ 我知道了~
BBS论坛系统,类似于csdn的博客
共725个文件
js:285个
png:129个
css:97个
需积分: 50 22 下载量 179 浏览量
2019-03-06
19:55:21
上传
评论 4
收藏 26.26MB RAR 举报
温馨提示
1、总体功能:用户注册、登录、发帖、跟帖,实现文本编辑、主题帖展示(含跟帖)、主题板块分类统计、展示(主页)、板块帖子分页查询、用户加入电话、邮箱、身份证字段,注册时对相关字段实现校验功能(包括同名校验、合法性校验)、利用邮箱进行密码重置、为Cookie实现加密解密算法实现快捷登录、用户自定义头像上传、更改头像、查询用户自己发过的主题、根据主题跟帖数量对前十名排行展示、用户可以删除修改自己的帖子管理员可以任意删帖功能、使用redis实现记录点赞(支持)和踩贴(反对)的功能、敏感词过滤,要求对敏感词,使用*号显示。 2、用户功能:发帖、跟帖、找回密码、文本编辑、头像上传、更改头像、查看帖子、删除和修改自己的帖子、进行点赞和踩贴。 3、数据需求::用户必须先注册再登录进入系统,用户的信息主要包括用户名,用户密码,用户邮箱,用户电话,用户头像,用户注册时间,用户性别,用户证件号、用户id实现自动增长。 4、数据库设计:种类表、跟帖表、主题表、用户表。 5、项目调试:使用Junit测试项目的可运行性。
资源推荐
资源详情
资源评论
收起资源包目录
BBS论坛系统,类似于csdn的博客 (725个子文件)
DBHelper.class 14KB
DBHelperExtend.class 11KB
ReplyServlet.class 9KB
UserxServlet.class 9KB
VerifyCodeUtils.class 8KB
ReplyDao.class 7KB
CookieUtil.class 6KB
RePwdServlet.class 5KB
UserDao.class 4KB
ReplyBiz.class 4KB
TopicDAO.class 3KB
ZanServlet.class 3KB
UserBean.class 3KB
BoardDao.class 3KB
ZanBiz.class 2KB
BasicServlet.class 2KB
ReplyBean.class 2KB
TopicBean.class 2KB
VcodeSelvlet.class 2KB
PageDao.class 2KB
BoardServlet.class 2KB
Test.class 2KB
UserBiz.class 2KB
ImagexUtil.class 1KB
ServletUtil.class 1KB
ReaderPro.class 1KB
EncodingFilter.class 1KB
TopicBiz.class 1KB
BoardBean.class 1003B
LoginFilter.class 955B
BizException.class 936B
PageBean.class 926B
UserImageBean.class 732B
BoardBiz.class 586B
BasicDao.class 524B
ManageUtil.class 411B
PageBiz.class 274B
.classpath 2KB
org.eclipse.wst.common.component 551B
org.eclipse.wst.jsdt.ui.superType.container 49B
easyui.css 73KB
easyui.css 73KB
editor_ie8.css 48KB
editor_iequirks.css 47KB
editor_ie.css 47KB
editor_gecko.css 46KB
editor.css 46KB
dialog_ie8.css 15KB
dialog_iequirks.css 14KB
dialog_ie.css 14KB
dialog.css 13KB
tabs.css 10KB
tabs.css 10KB
color.css 6KB
style.css 6KB
datagrid.css 6KB
datagrid.css 6KB
panel.css 6KB
panel.css 6KB
linkbutton.css 4KB
linkbutton.css 4KB
window.css 4KB
window.css 4KB
calendar.css 4KB
calendar.css 4KB
tree.css 4KB
tree.css 4KB
layout.css 3KB
layout.css 3KB
textbox.css 3KB
textbox.css 3KB
spinner.css 3KB
spinner.css 3KB
contents.css 3KB
style.css 3KB
icon.css 2KB
reg.css 2KB
menu.css 2KB
menu.css 2KB
register.css 2KB
accordion.css 2KB
accordion.css 2KB
tooltip.css 2KB
tooltip.css 2KB
menubutton.css 2KB
menubutton.css 2KB
datalist.css 2KB
datalist.css 2KB
slider.css 2KB
slider.css 2KB
switchbutton.css 2KB
switchbutton.css 2KB
pagination.css 2KB
pagination.css 2KB
templates.css 2KB
copyformatting.css 1KB
sidemenu.css 1KB
sidemenu.css 1KB
searchbox.css 1KB
searchbox.css 1KB
共 725 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
echo_wjcwjc
- 粉丝: 36
- 资源: 26
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功