package dao;
import dao.db.Builder;
import util.Info;
import util.StringUtil;
import java.sql.*;
import java.util.*;
/**
* 操作数据库链式执行
* 目前只实现了部分方法,之后会继续完善该代码,让其支持实体类的数据获取
* 使用方法:Query.make("表名称").where("字段名" , "条件符号","条件值").select()
*
*/
public class Query {
protected String mName = "";
protected HashMap mOption = null;
protected String pk = "id";
protected HashMap mData = null;
protected Builder builder = null;
public static HashMap tableFields = new HashMap();
public Query()
{
reset();
}
/**
* 构造Query
* @param name
*/
public Query(String name)
{
reset();
setName(name);
}
/**
* 重置并初始化数据
* @return
*/
protected Query reset()
{
mName = "";
mOption = null;
mOption = new HashMap();
mData = new HashMap();
builder = Builder.make(new CommDAO().getConn());
if(tableFields == null)
{
tableFields = new HashMap();
}
return this;
}
/**
* 设置一个字段自增
* @param field
* @param step
* @return
*/
public Query inc(String field , int step)
{
if(step<1)step = 1;
ArrayList list = new ArrayList();
list.add("inc");
list.add(step);
mData.put(field , list);
return this;
}
/**
* 设置一个字段自减
* @param field
* @param step
* @return
*/
public Query dec(String field , int step)
{
if(step<1)step = 1;
ArrayList list = new ArrayList();
list.add("dec");
list.add(step);
mData.put(field , list);
return this;
}
/**
* 马上更新数据字段自增1
* @param field
* @return
*/
public boolean setInc(String field)
{
return setInc(field ,1);
}
/**
* 马上更新数据字段自增step
* @param field
* @param step
* @return
*/
public boolean setInc(String field , String step)
{
return inc(field , Integer.valueOf(step).intValue()).update();
}
/**
* 马上更新数据字段自增step
* @param field
* @param step
* @return
*/
public boolean setInc(String field , int step)
{
return inc(field , step).update();
}
/**
* 马上更新数据字段自减1
* @param field
* @return
*/
public boolean setDec(String field )
{
return setDec(field , 1);
}
/**
* 马上更新数据字段自减step
* @param field
* @param step
* @return
*/
public boolean setDec(String field , String step)
{
return dec(field , Integer.valueOf(step).intValue()).update();
}
/**
* 马上更新数据字段自减step
* @param field
* @param step
* @return
*/
public boolean setDec(String field , int step)
{
return dec(field , step).update();
}
/**
* 设置某字段为某个值,并更新
* @param field
* @param step
* @return
*/
public boolean setField(String field , Object step)
{
mData.put(field , step);
return update();
}
/**
* 获取当前写入的data
* @return
*/
public HashMap getData()
{
return mData;
}
/**
* 更新当前数据
* @return
*/
public boolean update()
{
return update(null);
}
/**
* 更新当前数据加写入的data
* @param updateData
* @return
*/
public boolean update( HashMap updateData )
{
if(updateData != null){
mData.putAll(updateData);
}
String sql = builder.buildUpdate(this);
executeInsert(sql);
return true;
}
/**
* 向query 写入data
* @param data
* @return
*/
public Query data(Map data)
{
mData.putAll(data);
return this;
}
/**
* 向当前query 写入data
* @param name
* @param value
* @return
*/
public Query data(String name , String value)
{
mData.put(name , value);
return this;
}
/**
* 向当前query 写入data
* @param name
* @param value
* @return
*/
public Query data(String name , int value)
{
mData.put(name , value);
return this;
}
/**
* 向当前query 写入data
* @param name
* @param value
* @return
*/
public Query data(String name , long value)
{
mData.put(name , value);
return this;
}
/**
* 向当前query 写入data
* @param name
* @param value
* @return
*/
public Query data(String name , float value)
{
mData.put(name , value);
return this;
}
/**
* 向当前query 写入data
* @param name
* @param value
* @return
*/
public Query data(String name , double value)
{
mData.put(name , value);
return this;
}
/**
* 向当前query 写入data
* @param name
* @param value
* @return
*/
public Query data(String name , boolean value)
{
mData.put(name , value ? 1 : 0);
return this;
}
/**
* 插入数据
* @param insertData
* @return
*/
public int insert(HashMap insertData ){ return insert(insertData , false); }
/**
* 插入数据
* @param insertData
* @param replace
* @return
*/
public int insert(HashMap insertData , boolean replace)
{
if(insertData != null){
mData.putAll(insertData);
}
String sql = builder.buildInsert(this , replace);
return executeInsert(sql);
}
/**
* 获取当前自增字段名称
* @return
*/
public String getPk() {
return pk;
}
/**
* 设置自增字段名
* @param pk
*/
public void setPk(String pk) {
this.pk = pk;
}
/**
* 尚未实现该代码,获取表的数据
*/
protected void finalize()
{
//Statement st = conn.createStatement();
//System.out.print(sql);
//ResultSet rs
//super.finalize();
free();
}
/**
* 释放资源
*/
public void free()
{
// 释放rs
for(int i=0;i<resultSetList.size();i++){
Object os = resultSetList.get(i);
try{
if(os instanceof Statement){
Statement st = ((Statement) os);
st.close();
}else if(os instanceof ResultSet){
((ResultSet) os).close();
}
}catch (SQLException e){
}
}
resultSetList.clear();
}
/**
* 设置表名称
* @param name
* @return
*/
public Query setName(String name)
{
mName = name;
return this;
}
/**
* 获取表名称
* @return
*/
public String getName()
{
return mName;
}
/**
* 设置属性
* @param name
* @param value
* @return
*/
public Query setAttribute(String name , Object value)
{
getOptionHashMap("data").put(name , value);
return this;
}
/**
* 获取属性
* @param name
* @return
*/
public Obj
评论0