工厂模式实现数据库的操作

数据库操作封装

namespace Database;
class db_mysqli{
    private $link;//数据库连接
    private $query;

    function err($error){//错误调用函数
        die('对不起,您的操作有误。错误情况如下:'.$error);
    }
    function connect($config) {//数据库连接,需要数据库配置参数,$config以关联数组形式配置
        extract($config);
        $link=new mysqli($dbhost,$dbuser,$dbpswd,$dbname);
        $link->set_charset($dbcharset);
        if($link){
            //          echo "success<br/>";
            $this->link=$link;
        }else{

            $this->err($link->connect_error);
        }
    }
    function query($sql){//执行sql语句
        $query=$this->link->query($sql);
        if($query){
            //          echo "success1<br/>";
            $this->query=$query;
            return $query;
        }else{
            $this->err($sql.'<br/>'.$this->link->error);
        }
    }
    function findAll($query){//返回所有执行sql语句后产生的结果
        $this->query=$query;
        while (($row=$this->query->fetch_assoc())){
            $list[]=$row;
        }
        return isset($list)?$list:'';
    }

    function findOne($query){//返回一条结果
        $this->query=$query;
        $oneRes=$this->query->fetch_assoc();
        return $oneRes;
    }

    function findResult($query,$row,$field){
        $this->query=$query;
        $this->query->data_seek($row);
        $data=$this->query->fetch_array(MYSQLI_BOTH);
        return $data[$field];
    }

    function insert($table,$arr){//执行插入操作,可以插入多条数据
        foreach ($arr as $key=>$value){
            $value=$this->link->real_escape_string($value);
            $keyArr[]="`".$key."`";
            $valueArr[]="'".$value."'";
        }
        $keys=implode(",", $keyArr);
        $values=implode(",", $valueArr);
        $sql=<<<EOF
        insert into $table($keys) values($values)
EOF;
        $this->query($sql);
        return $this->link->insert_id;
    }
    function update($table,$arr,$where){
        foreach ($arr as $key=>$value){
            $value=$this->link->real_escape_string($value);
            $key_valueArr[]="`".$key."`='".$value."'";
        }
        $key_value=implode(",", $key_valueArr);
        $sql=<<<EOF
        update $table set $key_value where $where
EOF;
        $this->query($sql);
    }

    function del($table,$where){//删除操作
        $sql=<<<EOF
        delete from $table where $where
EOF;
        $this->query($sql);
    }
}

工厂模式封装

namespace Database;
class DB {

    public static $db;
    public static $link;
    public static function init($dbtype, $config) {
        self::$db = new $dbtype();
        self::$link=self::$db->connect($config);


    }

    public static function query($sql){
        return self::$db->query($sql);
    }

    public static function findAll($sql){
        $query = self::$db->query($sql);
        return self::$db->findAll($query);
    }

    public static function findOne($sql){
        $query = self::$db->query($sql);
        return self::$db->findOne($query);
    }

    public static function findResult($sql, $row = 0, $filed = 0){
        $query = self::$db->query($sql);
        return self::$db->findResult($query, $row, $filed);
    }

    public static function insert($table,$arr){
        return self::$db->insert($table,$arr);
    }

    public static function update($table, $arr, $where){
        return self::$db->update($table, $arr, $where);
    }

    public static function del($table,$where){
        return self::$db->del($table,$where);
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java工厂模式可以在程序中根据不同的数据库类型实现不同的数据库连接。在实现过程中,可以使用工厂类来创建数据库连接对象,并根据需求返回对应的数据库连接。 工厂模式的核心是定义一个工厂类,该类负责创建和返回具体的数据库连接对象。可以使用一个抽象的数据库连接接口来定义连接对象的共同操作,然后创建不同的子类实现该接口,每个子类分别对应一个具体的数据库连接类。 首先,定义一个抽象的数据库连接接口,该接口包含数据库连接的方法,如连接数据库、执行SQL语句等。然后,创建不同的子类实现该接口,每个子类分别对应一个具体的数据库连接类,如MySQL连接类和Oracle连接类。 接着,创建一个工厂类,该工厂类根据不同的数据库类型返回对应的数据库连接对象。工厂类可以提供一个静态方法,根据传入的数据库类型参数创建对应的数据库连接对象。当需要连接数据库时,只需调用工厂类的静态方法,传入需要连接的数据库类型,工厂类便会返回对应的数据库连接对象。 使用者可以通过调用工厂类的静态方法获取数据库连接对象,而无需直接调用具体的数据库连接类。这样,可以实现代码的解耦和灵活性,只需修改工厂类中的判断逻辑,而无需修改其他类的代码即可实现不同数据库的连接。 总之,通过使用Java工厂模式,可以实现根据不同数据库类型的需要创建对应的数据库连接对象,提高程序的灵活性和扩展性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值