2007年7月26日,Database.DBFactory

好累啊,好像感冒了,一点感觉都没有!~

先用着吧,也不去追究乱不乱了,说到底还是项目进度要紧,时间就是金钱,时间就是生命呀

 

DBFactory调用了ADM文件(类似于hibenate的hbm,不过我这里用的是JSon格式,方便调用,而且也不需要再做xml解析,省时省力,真的是居家旅行,杀人灭口,必备利器)

这里调了一个外部文件操作类,里面写了一些简单的文件操作功能,主要为读写追加文件,够用了就行,以后需要再往里加,唉!时间啊!

/*
    ********************************************************************************************
        文  件: /Function/Database.asp
        作  者: hnyashiro
        时  间: 2007年7月26日
        备注:
            这里的DBFactory自我感觉在功能和上有前面的Statement有点混淆了!
        好像把本就是SQL操作的内容硬生生的给分成了两部分,感觉有点不爽!先不管
        了,把DBFactory完成后之再看看,是不是能够合并吧
    ********************************************************************************************
*/
    Database.DBFactory 
=  Class.create();
    Database.DBFactory.construct
= function () {            
        
this.DBean = null;
        
this.dbTable = "";
        
this.dbContext = null;
        
this.Initialize=function(){
            
this.dbTable = arguments[0|| this.dbTable;
        }
                
        
        
this.useTable=function(strTb){
        
/*
            ========================================================================================
                useTable:
                1.根据传入的表名称参数strTb,设置DBFactory的当前操作表名
                2.从指定目录中读取对应表名的数据表配置文件,并对配置信息进行布署
                3.配置信息中的表字段有三个主要属性type[表字段类型],size[表字段大小],mainkey[是否主键]
                4.可扩展配置信息
            ========================================================================================
        
*/

            
this.dbTable = strTb;
            
try{
                
var strContext = FileManager.getFile(Server.MapPath(Database.Configuration.ADM_PATH+this.dbTable+"."+Database.Configuration.ADM_EXT),"UTF-8");
                eval(
"var s="+strContext);
                
this.dbStruct = s;
            }
catch(e){
                
throw new Error("(Databse.DBFcatory)Instance.useTable错误--表配置文件读入错误"+e.description)
            }

        }

        
        
this.getTypeValue=function(strName,strValue){
        
/*
            =======================================================================
                getTypeValue:
                1.主要是为了把数据库字段对应的内容转换成相应的数据类型
                2.只加入了简单的转换,并没有进行数据合法性验证,数据验证类在以后将会书写,
                然后再头过头来为此方法增加数据验证功能
            =======================================================================
        
*/

            
if(this.dbStruct==null){
                
throw new Error("(Databse.DBFcatory)Instance.getTypeValue错误--没有找到数据表的配置信息");
            }

            
var tp = this.dbStruct[strName].TYPE.toLowerCase();
            
var val=null;
            
try{
                
switch(tp){
                    
case "int":
                        val 
= parseInt(strValue);
                        
break;
                    
case "varchar":
                        val 
= new String(strValue);
                        
break;
                    
case "text":
                        val 
= new String(strValue);
                        
break;
                    
case "float":
                        val 
= parseFloat(strValue);
                        
break;
                    
case "datetime":
                        val 
= new Date(strValue);
                        
break;
                    
case "date":
                        val 
= new Date(strValue);
                        
break;
                    
case "bit":
                        val 
= new Boolean(strValue);
                        
break;
                }

                
return val;
            }
catch(e){
                
throw new Error("(Databse.DBFcatory)Instance.getTypeValue错误--字段对应数据类型不正确");
            }

        }

        
        
this.__InsertSQLBuild=function(dbBean){
        
/*
            =======================================================================
                在这里对数据模型对象的参数进行校验,以生成适合SQL使用的格式
                最终返回一个完整的insert语句
                在这里目前只对text类型的字段做escape编码!其他暂未考虑
            =======================================================================
        
*/

            
try{
                
if(this.DBean==null){
                    
throw new Error("(Databse.DBFcatory)Instance.InsertSQLBuild错误--表对象不能为空");
                }

                
if(this.DBean.constructor!=Object){
                    
throw new Error("(Databse.DBFcatory)Instance.InsertSQLBuild错误--表对象类型必须为Object");
                }

                
if(this.dbTable==null){
                    
throw new Error("(Databse.DBFcatory)Instance.InsertSQLBuild错误--表名称不能为空");
                }

                
var fdlist = [];
                
var vllist = [];
                
var tmpVal = "";
                
for(obj in this.DBean){
                    
if(this.DBean[obj]==null || this.DBean[obj]=="" || this.DBean[obj]==undefined){
                        
continue;
                    }

                    
if(this.dbStruct[obj].MAINKEY==0){
                        fdlist.push(
"["+obj+"]");
                        tpVal 
= this.dbStruct[obj].TYPE.toLowerCase();
                        
switch(tpVal){
                            
case 'int':
                                vllist.push(parseInt(
this.DBean[obj]));
                                
break;
                            
case 'float':
                                vllist.push(parseFloat(
this.DBean[obj]));
                                
break;
                            
case 'varchar':
                                vllist.push(
"'"+this.DBean[obj]+"'");
                                
break;
                            
case 'text':
                                vllist.push(
"'"+escape(this.DBean[obj])+"'");
                                
break;
                            
case 'datetime':
                                vllist.push(
"'"+this.DBean[obj]+"'");
                                
break;
                            
case 'date':
                                vllist.push(
"'"+this.DBean[obj]+"'");
                                
break;
                            
case 'bit':
                                vllist.push(
new Boolean(this.DBean[obj]));
                                
break;
                        }

                    }

                }

                SQLSTR 
= "insert into ["+this.dbTable+"]("+fdlist.join(",")+")Values("+vllist.join(",")+")";
                
return SQLSTR;
            }
catch(e){
                
throw new Error("(Databse.DBFcatory)Instance.InsertSQLBuild错误--"+e.description);
            }

            
return null;
        }

        
        
this.Insert=function(dbBean){
        
/*
            ==============================================================================
                Insert:
                1.执行单个对象的Insert操作
                2.若是对象列表,需要使用Loop来完成数据的批量添加
                3.这里还有个问题就是数据的编码问题,因为传进来的参数有没有经过escape编码不确定
                考虑是不是在已编码的数据之前加上escage的前缀,用来表示是经过编码处理的
            ==============================================================================
        
*/

            
this.DBean = dbBean || null;
            
try{
                
var sql = this.__InsertSQLBuild(dbBean);
                blFlag 
= new Database.Statement().Execute(SQLSTR);
                
return blFlag;
            }
catch(e){
                
throw new Error("(Databse.DBFcatory)Instance.Insert错误--"+e.description);
            }

        }



        
this.__UpdateSQLBuild=function(dbBean){
        
/*
            =======================================================================
                在这里对数据模型对象的参数进行校验,以生成适合SQL使用的格式
                最终返回一个完整的Update语句
                在这里目前只对text类型的字段做escape编码!其他暂未考虑
            =======================================================================
        
*/

            
try{
                
if(this.DBean==null){
                    
throw new Error("(Databse.DBFcatory)Instance.UpdateSQLBuild错误--表对象不能为空");
                }

                
if(this.DBean.constructor!=Object){
                    
throw new Error("(Databse.DBFcatory)Instance.UpdateSQLBuild错误--表对象类型必须为Object");
                }

                
if(this.dbTable==null){
                    
throw new Error("(Databse.DBFcatory)Instance.UpdateSQLBuild错误--表名称不能为空");
                }

                
var setArr = [];
                
var Where = "";
                
for(obj in this.DBean){
                    
if(this.DBean[obj]==null || this.DBean[obj]=="" || this.DBean[obj]==undefined){
                        
continue;
                    }

                    
if(this.dbStruct[obj].MAINKEY==0){
                        tpVal 
= this.dbStruct[obj].TYPE.toLowerCase();
                        
switch(tpVal){
                            
case 'int':
                                setArr.push(obj
+"="+parseInt(this.DBean[obj]));
                                
break;
                            
case 'float':
                                setArr.push(obj
+"="+parseFloat(this.DBean[obj]));
                                
break;
                            
case 'varchar':
                                setArr.push(obj
+"='"+this.DBean[obj]+"'");
                                
break;
                            
case 'text':
                                setArr.push(obj
+"='"+escape(this.DBean[obj])+"'");
                                
break;
                            
case 'datetime':
                                setArr.push(obj
+"='"+this.DBean[obj]+"'");
                                
break;
                            
case 'date':
                                setArr.push(obj
+"='"+this.DBean[obj]+"'");
                                
break;
                            
case 'bit':
                                setArr.push(obj
+"="+new Boolean(this.DBean[obj]));
                                
break;
                        }

                    }
else if(this.dbStruct[obj].MAINKEY==1){
                        Where 
= obj+"="+this.DBean[obj];
                    }

                }

                SQLSTR 
= "update ["+this.dbTable+"] set "+setArr.join(",")+" Where "+Where;
                
return SQLSTR;
            }
catch(e){
                
throw new Error("(Databse.DBFcatory)Instance.InsertSQLBuild错误--"+e.description);
            }

            
return null;
        }



        
this.Update=function(dbBean){
        
/*
            ==============================================================================
                Update:
                1.执行单个对象的Update操作
                2.若是对象列表,需要使用Loop来完成数据的批量Update
                3.这里还有个问题就是数据的编码问题,因为传进来的参数有没有经过escape编码不确定
                考虑是不是在已编码的数据之前加上escage的前缀,用来表示是经过编码处理的
                4.过滤关键字段只设值为主键,关于这个问题,想专门出一个SqlParse来处理filter(以后考虑啦,现在项目紧,有了用的功能再说,嘻嘻)
            ==============================================================================
        
*/

            
this.DBean = dbBean || null;
            
try{
                
var sql = this.__UpdateSQLBuild(dbBean);
                blFlag 
= new Database.Statement().Execute(sql);
                
return blFlag;
            }
catch(e){
                
throw new Error("(Databse.DBFcatory)Instance.Update错误--"+e.description);
            }

        }

        
        
this.__DeleteSQLBuild=function(dbBean){
            
try{
                
if(this.DBean==null){
                    
throw new Error("(Databse.DBFcatory)Instance.DeleteSQLBuild错误--表对象不能为空");
                }

                
if(this.DBean.constructor!=Object){
                    
throw new Error("(Databse.DBFcatory)Instance.DeleteSQLBuild错误--表对象类型必须为Object");
                }

                
if(this.dbTable==null){
                    
throw new Error("(Databse.DBFcatory)Instance.DeleteSQLBuild错误--表名称不能为空");
                }
                
                
                
var setArr = [];
                
for(obj in this.DBean){
                    
if(this.DBean[obj]==null || this.DBean[obj]=="" || this.DBean[obj]==undefined){
                        
continue;
                    }

                        tpVal 
= this.dbStruct[obj].TYPE.toLowerCase();
                        
switch(tpVal){
                            
case 'int':
                                setArr.push(obj
+"="+parseInt(this.DBean[obj]));
                                
break;
                            
case 'float':
                                setArr.push(obj
+"="+parseFloat(this.DBean[obj]));
                                
break;
                            
case 'varchar':
                                setArr.push(obj
+" Like '%"+this.DBean[obj]+"%'");
                                
break;
                            
case 'text':
                                setArr.push(obj
+" Like '%"+escape(this.DBean[obj])+"%'");
                                
break;
                            
case 'datetime':
                                setArr.push(obj
+"='"+this.DBean[obj]+"'");
                                
break;
                            
case 'date':
                                setArr.push(obj
+"='"+this.DBean[obj]+"'");
                                
break;
                            
case 'bit':
                                setArr.push(obj
+"="+new Boolean(this.DBean[obj]));
                                
break;
                        }

                }

                
return "delete from ["+this.dbTable+"] Where "+setArr.join(" OR ");
            }
catch(e){
                
throw new Error("(Databse.DBFcatory)Instance.DeleteSQLBuild错误--"+e.description);
            }

        }

        
this.Delete=function(dbBean){
        
/*
            ==============================================================================
                Delete:
                1.执行单个对象的Delete操作
                2.若是对象列表,需要使用Loop来完成数据的批量Delete
            ==============================================================================
        
*/

            
this.DBean = dbBean || null;
            
try{
                
var sql = this.__DeleteSQLBuild(dbBean);
                blFlag 
= new Database.Statement().Execute(sql);
                
return blFlag;
            }
catch(e){
                
throw new Error("(Databse.DBFcatory)Instance.Delete错误--"+e.description);
            }

        }

        
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值