开发自己的框架——(二)数据库工具类的封装

为了让框架的内容与数据分离,我们把常用的类封装到一个工具类中,当用到这些方法时,就调用这个封装好的类,能够使代码的复用性得到很大的提高。
首先,封装数据库相关操作,为了使封装规范化,我们创建一个接口让数据库实现接口中的方法,数据库使用PDO扩展访问数据。
数据库接口类 
I_DAO.interface.php
<?php
interface I_DAO
{
        //查询所有数据的功能
        public function getAll($sql='');
//    //查询一条数据
        public function getRow($sql='');
//    //查询一个字段的值
        public function getOne($sql='');
//    //执行增删改的功能
        public function exec($sql='');
//    (查询的时候,返回的结果数)
        public function resultRows();
//    //查询执行插入操作返回的主键的值
        public function lastInsertId();
//    //
        public function query($sql='');
//    //转义引号、并包裹的
        public function escapeData($data='');
}

数据库工具类中,对象只能通过静态方法创建一个实例(单例模式),不能通过克隆和继承创建对象,数据库的连接信息通过数组传递到方法中,工具类中有查询所有数据方法、查询一条数据方法、获得一个字段值的方法、实现增删改方法、
返回结果数量的方法等。
数据库操作工具类

DAOPDO.class.php

<?php

class DAOPDO implements I_DAO
{    
    private $host;
    private $dbname;
    private $user;
    private $pass;
    private $port;
    private $charset;
    
    //该属性保存pdo对象
    private $pdo;
    
    //查询语句返回的结果集数量
    private $resultRows;
    
    //私有属性保存该该实例
    private static $instance;
    //私有的构造方法
    private function __construct($option=array())
    {
        //初始化服务器的配置
        $this -> initOptions($option);
        //初始化PDO对象
        $this -> initPDO();
    }
    //私有的克隆方法
    private function __clone()
    {
        
    }
    //公共的静态方法实例化单例对象
    public static function getSingleton($options=array())
    {
        if(!self::$instance instanceof self){
            //实例化
            self::$instance = new self($options);
        }
        return self::$instance;
    }
    //初始化服务器的配置
    private function initOptions($option)
    {
        $this -> host = isset($option['host'])?$option['host']:'';
        $this -> dbname = isset($option['dbname'])?$option['dbname']:'';
        $this -> user = isset($option['user'])?$option['user']:'';
        $this -> pass = isset($option['pass'])?$option['pass']:'';
        $this -> port = isset($option['port'])?$option['port']:'';
        $this -> charset = isset($option['charset'])?$option['charset']:'';
    }
    //初始化PDO对象
    private function initPDO()
    {
        $dsn = 
        "mysql:host=$this->host;dbname=$this->dbname;port=$this->port;charset=$this->charset";
        $this -> pdo = new PDO($dsn,$this->user,$this->pass);
    }
    //封装pdostatement对象
    public function query($sql="")
    {    
        //返回pdo_statement对象
        return $this->pdo -> query($sql);
    }
    //查询所有数据
    public function getAll($sql='')
    {
        $pdo_statement = $this->query($sql);
        $this->resultRows = $pdo_statement -> rowCount();
        if($pdo_statement==false){
            //输出SQL语句的错误信息
            $error_info = $this->pdo-> errorInfo();
            $err_str = "SQL语句错误,具体信息如下:<br>".$error_info[2];
            echo $err_str;
            return false;
        }
        $result = $pdo_statement -> fetchAll(PDO::FETCH_ASSOC);
        return $result;
    }
    //查询一条记录
    public function getRow($sql='')
    {
        $pdo_statement = $this->query($sql);
        if($pdo_statement==false){
            //输出SQL语句的错误信息
            $error_info = $this->pdo-> errorInfo();
            $err_str = "SQL语句错误,具体信息如下:<br>".$error_info[2];
            echo $err_str;
            return false;
        }
        $result = $pdo_statement -> fetch(PDO::FETCH_ASSOC);
        return $result;
    }
    //获得一个字段的值
    public function getOne($sql='')
    {
        $pdo_statement = $this->query($sql);
        if($pdo_statement==false){
            //输出SQL语句的错误信息
            $error_info = $this->pdo-> errorInfo();
            $err_str = "SQL语句错误,具体信息如下:<br>".$error_info[2];
            echo $err_str;
            return false;
        }
        //返回查询的字段的值,我们在执行sql语句之前就应该明确查询的是哪个字段,这样fetchColumn就已经知道查询的字段值
        $result = $pdo_statement -> fetchColumn();
        return $result;
    }
    //实现非查询的方法
    public function exec($sql='')
    {
        $result = $this->pdo -> exec($sql);
        //===为了区分 受影响的记录数是0的情况
        if($result===false){
            $error_info = $this->pdo-> errorInfo();
            $err_str = "SQL语句错误,具体信息如下:<br>".$error_info[2];
            echo $err_str;
            return false;
        }
        return $result;
    }
    //查询语句返回的结果数量
    public function resultRows()
    {
        return $this->resultRows;
    }
    //返回上次执行插入语句返回的主键值
    public function lastInsertId()
    {
        return $this->pdo->lastInsertId();
    }
    //数据转义并引号包裹
    public function escapeData($data='')
    {
        return $this->pdo->quote($data);
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt是一种广泛应用的C++跨平台开发框架,它为开发人员提供了丰富的工具和类库来简化软件开发过程。Qt还提供了对数据库的支持,允许开发者使用数据库进行数据的存储和管理。为了进一步简化开发过程,我们可以封装一个数据库工具类数据库工具类的主要目的是封装数据库的操作,使其易于使用、可重用,并提供错误处理和异常处理机制。以下是一个可能的Qt数据库工具类的实现示例。 首先,我们需要一个类来代表数据库连接。我们可以创建一个名为Database的类,其中包含连接数据库、断开数据库、执行查询等功能的成员函数。 其次,我们可以创建一个Table类,用于代表数据库中的表。Table类可以提供一些功能,如创建表、插入数据、更新数据、删除数据等。 我们还可以为每个表创建对应的模型类,用于与Qt的模型视图框架进行交互。模型类可以继承自Qt的QAbstractTableModel类,并实现一些必要的函数,如rowCount、columnCount、data等。这样,我们可以方便地将表中的数据展示在Qt的ListView或TableView等控件上。 在封装数据库工具类时,我们还可以考虑使用单例模式,确保整个应用程序中只有一个数据库实例存在。这样做可以避免重复创建数据库连接和占用过多资源。 总的来说,Qt数据库工具类封装可以大大简化数据库操作的编写过程,提高代码的可读性和可维护性。通过对数据库连接的封装,我们可以更方便地进行数据库操作,同时减少错误和异常处理的工作量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码农薛尧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值