<?php
class Db
{
protected static $_instance = null; // 定义标识符(通过$_instance值得改变情况,来判定Model类是否被实例化)
protected $dbName = '';
protected $dsn = '';
protected $pdo = ''; protected $prefix='wy_';
protected $_table;
protected $isShowSql=false;
protected $tablesName=null;
protected $al=[];//计算数组维度的临时数组
protected $where=[];//where数组
protected $sqlWhereParten;//wheresql片段
protected $whereOr=[];//whereOr数组
protected $sqlWhereOrParten;//whereOrsql片段
protected $selectField='*';//查询字段
protected $limit='';
protected $order='asc';
protected $group;
protected $having; /**
* 析构方法
* final方法不能被继承
* 由于instance静态方法的原因__construct()只执行一次
* 第一次得到的对象后,在后面的访问直接返回该对象
* @param string $dbHost 服务器地址
* @param string $dbUser 数据库用户名
* @param string $dbPasswd 数据库密码
* @param string $dbName 操作的数据库名
* @param string $dbCharset 数据库字符集
*/
private final function __construct($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset){ try {
$this->dbName=$dbName;
$this->dsn = 'mysql:host='.$dbHost.';dbname='.$dbName;
$this->pdo = new PDO($this->dsn, $dbUser, $dbPasswd);
$this->pdo->query("set names utf8"); //数据库utf8
$this->pdo->exec('SET character_set_connection='.$dbCharset.', character_set_results='.$dbCharset.', character_set_client=binary');
} catch (PDOException $e) {
$this->outputError($e->getMessage());
} } /**
* 防止克隆
*
*/
private function __clone() {} /**
* 申明静态方法,由类名直接调用此方法,来实例化Model类
* 在静态方法中,绝不可以使用$this($this是对象产生之后才会有的)
* @param string $dbHost 服务器地址
* @param string $dbUser 数据库用户名
* @param string $dbPasswd 数据库密码
* @param string $dbName 操作的数据库名
* @param string $dbCharset 数据库字符集
* @return object 返回当前Db对象
*/
public static function instance($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset)
{
// 实例化Model类
if (self::$_instance == null) {
// self:代表自身(self=Model)
self::$_instance = new self($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset);
} return self::$_instance;
} /**
* destruct 关闭数据库连接
*/
public function destruct()
{
$this->dbh = null;
} /**
* 查询
* @param [type] $sql [description]
* @return [type] [description]
*/
public function query($sql,$queryMode='All')
{
$queryMode=strtolower($queryMode);
$recordset = $this->pdo->query($sql);
$this->getPDOError();
if ($recordset) {
$recordset->setFetchMode(PDO::FETCH_ASSOC);
if ($queryMode == 'all') {
$result = $recordset->fetchAll();
} elseif ($queryMode == 'row') {
$result = $recordset->fetch();
}
} else {
$result = null;
}
return $result;
}
/**
* 增改
* @param [type] $sql [description]
* @return [type] [description]
*/
public function exec($sql)
{
$resRow=$this->pdo->exec($sql);
return $resRow;
} /**
* 执行预处理sql
*
* $sql="update good SET goods_store=goods_store-:num WHERE id=:id";
* $pdo->executeSql($sql,['num'=>1,'id'=>1]);
* @param [type] $sql [description]
* @param [type] $map [description]
* @return [type] [description]
*/
public function executeSql($sql,$map=[])
{
$stmt=$this->pdo->prepare($sql);
/*
$stmt->bindvalue(':num',1000);
$stmt->bindvalue(':id',2);
or
$stmt->bindParam(':num', $num,PDO::PARAM_INT);
$stmt->bindParam(':id', $id,PDO::PARAM_INT); $res2=$stmt->execute();//成功返回行数 $res2=$stmt->execute();
*/
$res=$stmt->execute($map);//成功返回行数
$this->getPDOError();
return $res;
} public function insert($map=[])
{
if(empty($table=$this->_table)){
throw new Exception("Param Error: 缺少表名,执行插入操作前请调用table('tablename')获取");
} $dataPartten='';
foreach ($map as $key => $value) {
$dataPartten.=$key.'=:'.$key.',';
} $dataPartten=rtrim($dataPartten,','); $sql="INSERT INTO ".$this->prefix.$table.' SET '.$dataPartten;
if($this->isShowSql){
$this->isShowSql=false;
return $sql;
}
//INSERT INTO users (name, age) VALUES('姚明',25);
//INSERT INTO uses SET name = '姚明', age = 25;
$stmt=$this->pdo->prepare($sql);
$res=$stmt->execute($map);//成功返回行数
$this->getPDOError();
return $res;
} public function update($data=[])
{
/*
* $sql="update good SET goods_store=goods_store-:num WHERE id=:id";
* $pdo->executeSql($sql,['num'=>1,'id'=>1]);
*/
if($this->arrLevel($data)>1){
$this->outputError('数组格式不正确');
}
$sqlData='';
foreach ($data as $field => $value) {
$sqlData.=$field.'='.':'.$field.',';
}
$sqlData=rtrim($sqlData,','); //$sql="update o2o_user SET mobile='15632613871',update_time={$time} WHERE id=11"; $sql="UPDATE ".$this->prefix.$this->_table.' SET '.$sqlData; if(!empty($this->where)){ $sql.=' WHERE '.$this->sqlWhereParten;
} if(!empty($this->whereOr)){
$sql.=' OR '.$this->sqlWhereOrParten;
} if($this->isShowSql){
$this->isShowSql=false;
return $sql;
}
$stmt=$this->pdo->prepare($sql);
$map=array_merge($this->where,$this->whereOr,$data); $res=$stmt->execute($map);//成功返回行数
$this->getPDOError(); return $res; } public function find($id='')
{ if(empty($this->_table)){
$this->outputError('表名为空请用table方法获取');
}
if(!empty($this->sqlWhereOrParten)){
$whereor=" OR ".$this->sqlWhereOrParten;
}else{
$whereor='';
}
$sql="select ".$this->selectField." FROM ".$this->prefix.$this->_table." WHERE ".$this->sqlWhereParten." ".$whereor." ".$this->group." ".$this->having." ".$this->order." ".$this->limit; if($this->isShowSql){
$this->isShowSql=false;
return $sql;
}
$stmt=$this->pdo->prepare($sql);
$map=array_merge($this->where,$this->whereOr); $stmt->execute($map);//成功返回true
$this->getPDOError();
//查询多条数据
$result=$stmt->fetch(PDO::FETCH_ASSOC);//关联数组 return $result; } public function select($id='')
{
if(empty($this->_table)){
$this->outputError('表名为空请用table方法获取');
} if(!empty($this->sqlWhereOrParten)){
$whereor=" OR ".$this->sqlWhereOrParten;
}else{
$whereor='';
} $sql="select ".$this->selectField." FROM ".$this->prefix.$this->_table." WHERE ".$this->sqlWhereParten." ".$whereor." ".$this->group." ".$this->having." ".$this->order." ".$this->limit;
if($this->isShowSql){
$this->isShowSql=false;
return $sql;
}
$stmt=$this->pdo->prepare($sql);
$map=array_merge($this->where,$this->whereOr); $stmt->execute($map);//成功返回true
$this->getPDOError();
//查询多条数据
$result=$stmt->fetchAll(PDO::FETCH_ASSOC);//关联数组 return $result;
} public function delete()
{
//$sql = "delete from stu where id=?";
if(empty($this->_table)){
$this->outputError('表名为空请用table方法获取');
} $sql="DELETE FROM ".$this->prefix.$this->_table;
if(!empty($this->where)){ $sql.=' WHERE '.$this->sqlWhereParten;
} if(!empty($this->whereOr)&&!empty($this->where)){
$sql.=' OR '.$this->sqlWhereOrParten;
} if($this->isShowSql){
$this->isShowSql=false;
return $sql;
} $stmt = $this->pdo->prepare($sql);//准备sql模板
$map=array_merge($this->where,$this->whereOr);
$stmt->execute($map);//执行预处理语句
$this->getPDOError();
$affect_row = $stmt->rowCount(); return $affect_row; } public function setInc($field,$num=1)
{ $field=strval($field);
$num=intval($num);
if(empty($this->_table)){
$this->outputError('表名为空请用table方法获取');
} $sql="UPDATE ".$this->prefix.$this->_table." SET ".$field."=".$field."+:num "; if(!empty($this->where)){ $sql.=' WHERE '.$this->sqlWhereParten;
} if(!empty($this->whereOr)&&!empty($this->where)){
$sql.=' OR '.$this->sqlWhereOrParten;
} if($this->isShowSql){
$this->isShowSql=false;
return $sql;
} $stmt = $this->pdo->prepare($sql);//准备sql模板
$map=array_merge($this->where,$this->whereOr);
$map['num']=$num; $stmt->execute($map);//执行预处理语句
$this->getPDOError();
$affect_row = $stmt->rowCount();
return $affect_row;
} /**
* 递减
* @param [type] $field [description]
* @param [type] $num [description]
*/
public function setDec($field,$num)
{
$field=strval($field);
$num=intval($num);
if(empty($this->_table)){
$this->outputError('表名为空请用table方法获取');
} $sql="UPDATE ".$this->prefix.$this->_table." SET ".$field."=".$field."-:num "; if(!empty($this->where)){ $sql.=' WHERE '.$this->sqlWhereParten;
} if(!empty($this->whereOr)&&!empty($this->where)){
$sql.=' OR '.$this->sqlWhereOrParten;
} if($this->isShowSql){
$this->isShowSql=false;
return $sql;
} $stmt = $this->pdo->prepare($sql);//准备sql模板
$map=array_merge($this->where,$this->whereOr);
$map['num']=$num; $stmt->execute($map);//执行预处理语句
$this->getPDOError();
$affect_row = $stmt->rowCount();
return $affect_row;
} public function field($field='*')
{
$this->selectField=trim($field);
return $this;
} public function limit($a,$b=''){
//limit 10 等于 limit 0 10 查前10条
//limit 10 1000 查询10条以后的 1000条数据 即 11-10010 $a=abs(intval($a));
if(!empty($b)){
$b=abs(intval($b));
} $sql= 'limit '.$a.','.$b;
$sql=rtrim($sql,',');
$this->limit=$sql;
return $this;
} /*
order('id,name[asc]');
*/
public function order($order='asc')
{ //默认 orderby id asc
//order by name,id desc $order=trim(strval($order));
$order=strtr($order,' ',',');//将' '替换成, $arr=array_filter(explode(',',$order)); $temp='';
foreach ($arr as $key => $field) {
$pos=stripos($field,'[');
if($pos!==false){
if($pos===0){
unset($arr[$key]);
}else{
$arrValue=substr($field,0,$pos);
$arr[$key]=$arrValue;
} $ade=trim(substr($field,$pos),'[]');
//当ade为默认的asc不取值去掉它
if($ade=='desc'){
$temp=$ade;
}
}
}
$order=implode($arr,','); if(!empty($order)){
$sql="ORDER BY ".$order.' '.strtoupper($temp);
$sql=trim($sql);
}else{
$sql='';
} $this->order=$sql;
return $this;
} public function group($field='')
{
return $this;
} public function having(){
return $this;
} /**
* where (id=1 and name=1 ) or (id=2 and )
* @param [type] $where [description]
* @return [type] [description]
*/
public function where($where)
{
/*
where id in(1,3,5)
where id>5 and id<10
where id between 40 and 50; */ if($this->arrLevel($where)>2){
$this->outputError('数组格式不正确');
}
$sql='';
$wh=[];
foreach ($where as $field => $values){ if(is_array($values)){
if($values['0']=='range'){
$arr=explode(',', $values[1],2);
$newarr=[]; $sql.=$field.' >:wh_'.$field.'Min AND '.$field.' <:wh_'.$field.'Max AND ';
$wh[$field.'Min']=min($arr);
$wh[$field.'Max']=max($arr);
}else{
$sql.=$field.' '.$values[0].':wh_'.$field.' AND ';
$wh['wh_'.$field]=$values[1];
} }elseif (is_string($values)||is_int($values)) {
$sql.=$field.'='.':wh_'.$field.' AND ';
$wh['wh_'.$field]=$values;
}else{
$this->outputError('数组格式不正确');
}
} $sql='('.substr($sql,0,-5).')'; $this->sqlWhereParten=null;
$this->sqlWhereParten=$sql;
$this->where=[];
$this->where=$wh; return $this;
} /**
* where (id=1 and name=1 ) or (id=2 and )
* @param [type] $where [description]
* @return [type] [description]
*/
public function whereOr($whereOr)
{ if($this->arrLevel($whereOr)>2){
$this->outputError('数组格式不正确');
}
$sql='';
$wh=[];
foreach ($whereOr as $field => $values){ if(is_array($values)){ if($values['0']=='range'){
$arr=explode(',', $values[1],2);
$newarr=[]; $sql.=$field.' >:whor_'.$field.'Min AND '.$field.' <:whor_'.$field.'Max AND ';
$wh['whor_'.$field.'Min']=min($arr);
$wh['whor_'.$field.'Max']=max($arr);
}else{
$sql.=$field.' '.$values[0].':whor_'.$field.' AND ';
$wh['whor_'.$field]=$values[1];
} }elseif (is_string($values)||is_int($values)) {
$sql.=$field.'='.':whor_'.$field.' AND ';
$wh['whor_'.$field]=$values;
}else{
$this->outputError('数组格式不正确');
}
} $sql='('.substr($sql,0,-5).')';
$this->sqlWhereOrParten=null;
$this->sqlWhereOrParten=trim($sql);
$this->whereOr=[];
$this->whereOr=$wh; return $this;
} public function showSql($flag=false)
{
$this->isShowSql=$flag;
return $this;
} public function table($tablename='')
{
$this->tableExists($tablename);
if(!empty($tablename)){
$this->_table=$tablename;
}
return $this;
} /**
* 预处理
* @param string $sql [description]
* @return [type] [description]
*/
public function prepare($sql=''){
return $this->pdo->prepare($sql);
} /**
* 执行预处理语句
* @param [type] $presql [description]
* @return [type] [description]
*/
public function execute($presql){
return $this->pdo->execute($presql);
} /**
* checkFields 检查指定字段是否在指定数据表中存在
*
* @param String $table
* @param array $arrayField
*/
private function checkFields($table, $arrayFields)
{
//没必要加上$this->tableExists($table); getField有啦
$fields = $this->getFields($table);
foreach ($arrayFields as $key => $value) {
if (!in_array($key, $fields)) {
$this->outputError("Unknown column `$key` in field list.");
}
}
} /**
* getFields 获取指定数据表中的全部字段名
*
* @param String $table 表名
* @return array
*/
private function getFields($table)
{
$this->tableExists($table);
$fields = array();
$sql= "SHOW COLUMNS FROM ".$this->prefix.$table;
$recordset = $this->pdo->query($sql);
$this->getPDOError();
$recordset->setFetchMode(PDO::FETCH_ASSOC);
$result = $recordset->fetchAll();
foreach ($result as $rows) {
$fields[] = $rows['Field'];
}
return $fields;
} /**
* 获取当前连接库的所有表名
* @param string $dbname [description]
* @return [type] [description]
*/
public function getTableNames($dbname='')
{
if($this->tablesName!==null&&is_array($this->tablesName)){
return $this->tablesName;
}
$dbname=$this->dbName;
$sql="select table_name from information_schema.tables where table_schema='$dbname'";
$data=$this->query($sql);
$this->getPDOError();
$prefix=$this->prefix;
$prefixLength=strlen($prefix); $tables=[];
foreach ($data as $key => $val) {
if(!empty($prefix)){
$tables[]=substr($val['table_name'],$prefixLength);
}else{
$tables[]=$val['table_name'];
}
}
$this->tablesName=$tables; return $tables;
} /**
* 检测当前连接数据库是否存在该表名
* @param string $tablename 查询的表名
* @return boolean or Exception 返回true或者抛出异常
*/
public function tableExists($tablename)
{
if(in_array($tablename,$this->getTableNames())){
return true;
} $this->outputError("当前数据库没有此表[{$this->prefix}$tablename],请核对表名是否正确");
} /**
* 检查是否在一个事务内
*
* @return [type] [description]
*/
public function inTransaction()
{
if($this->pdo->inTransaction()){
return true;
}else{
return false;
}
} /**
* 获取表引擎
*
* @param String $tableName 表名
* @param String $dbName 库名
* @param Boolean $debug
* @return String
*/
public function getTableEngine($tableName,$dbName='')
{
if(empty($dbName)){
$dbName=$this->dbName;
}
$this->tableExists($tableName); $strSql = "SHOW TABLE STATUS FROM $dbName WHERE Name='".$this->prefix.$tableName."'";
$arrayTableInfo = $this->query($strSql,'all');
$this->getPDOError();
return $arrayTableInfo[0]['Engine'];
}
/**
* 获取mysql支持的引擎
* @return [type] [description]
*/
public function getEngines()
{
$sql="show Engines";
$resInfo=$this->query($sql);
$this->getPDOError();
return $resInfo; }
/**
* 获取建表默认引擎
* @return [type] [description]
*/
public function getDefaultEngines()
{
$sql="show variables like 'default_storage_engine'";
$resInfo=$this->query($sql);
$this->getPDOError();
return $resInfo[0]['Value'];
} /**
* 设置数据表的引擎
* @param [type] $table 表名
* @param string $value MyISAM/InnoDB/...
* @return [type] [description]
*/
public function setTableEngine($table,$value='InnoDB')
{
$this->tableExists($table);
$engines=$this->getEngines();
$newArr=[];
foreach ($engines as $key => $engineMsgArr) {
if($engineMsgArr['Support']==='YES'||$engineMsgArr['Support']==='DEFAULT'){
$newArr[]=strtolower($engineMsgArr['Engine']);
}
} if(!in_array(strtolower($value),$newArr)){
$this->outputError('mysql目前不支持该引擎');
} $sql="ALTER TABLE {$this->prefix}$table ENGINE = $value";
$res=$this->pdo->exec($sql);
$this->getPDOError();
return $res;//返回受影响行数有多少数据就返回多少数字
} /**
* 获取自动提交的状态 1开启自动提交 0关闭自动提交
* PDO::ATTR_AUTOCOMMIT 0
* @return [type] [description]
*/
public function getAttrAutoCommit()
{
return $this->pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);
}
/**
* 设置自动提交的状态 1开启自动提交 0关闭自动提交
* PDO::ATTR_AUTOCOMMIT 0
* @return [type] [description]
*/
public function setAttrAutoCommit($value=true)
{
$this->isBoolean();
return $this->pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,$value);
} /**
* 获取当前mysql支持事务的引擎
* @return [type] [description]
*/
public function getTransactionEngine()
{
$sql="SELECT ENGINE FROM INFORMATION_SCHEMA.ENGINES WHERE SUPPORT IN ('YES','DEFAULT') AND TRANSACTIONS='YES'";
$data=$this->query($sql);
$this->getPDOError();
return $data;
} /**
* 开启事务
* @param [type] $table [description]
* @return [type] [description]
*/
public function beginTransaction($table){
$this->tableExists($table);
$engine=$this->getTableEngine($table);
$engineLower=strtolower($engine);
switch ($engineLower) {
case 'innodb':
case 'bdb'://5.1一下版本才支持 Berkley的别名
case 'berkley'://5.1一下版本才支持
return $this->pdo->beginTransaction();
break;
case 'myisam'://8.0被废弃
case 'isam'://过时的存储引擎,现在由MyISAM取代
case 'mrg_myisam':
case 'merge'://MRG_MYISAM的别名
case 'mrg_isam'://过时的存储引擎,现在由MERGE取代
case 'csv':
case 'performance_schema':
case 'archive':
case 'memory':
case 'heap'://MEMORY正式地被确定为HEAP引擎
case 'blackhole':
case 'federated':
case 'ndb':
case 'example':
case 'ndbcluster'://NDB别名
$this->outputError("当前表引擎为$engine,目前不支持事务");
break;
default:
$this->outputError("当前表引擎为$engine,请核对是否支持事务");
break;
} }
public function commit(){
return $this->pdo->commit();
}
public function rollBack(){
return $this->pdo->rollBack();
} /**
* 设置错误级别
* 0 ERRMODE_SILENT 默认模式,不主动报错,需要主动以 $pdo->errorInfo()的形式获取错误信息
* 1 ERRMODE_WARNING 显示警告错误 引发 E_WARNING 错误,主动报错
* 2 ERRMODE_EXCEPTION 主动抛出 exceptions 异常,需要以try{}cath(){}输出错误信息
* 3 PDO::ATTR_ERRMODE
* @param integer $value 错误级别的值
* @return boolean 成功返回true,失败返回false
*/
public function setAttrErrMode($value=0)
{
if($value==1){
$res=$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
}elseif ($value==2) {
$res=$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}else{
$res=$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT);
}
return $res;
} /**
* 获取错误级别
* @return integer 返回错误级别
*/
public function getAttrErrMode()
{
return $this->getAttribute(PDO::ATTR_ERRMODE);
} /**
* 设置pdo属性值
* @param integer $name 属性名
* @param mixd $value true or Exception 返回布尔值或抛出异常
*/
public function setAttribute($name,$value)
{
$this->isInteger($name);
try {
$res=$this->pdo->setAttribute($name,$value);
return $res;
} catch (PDOException $e) {
$this->outputError($e->getMessage());
} } /**
* /
* @param $name [description]
* @return [type] [description]
*/
public function getAttribute($name)
{
$this->isInteger($name);
return $this->pdo->getAttribute($name);
} public function isInteger($name){
if(!is_int($name)){
throw new Exception("Param Error: 第一个参数不是期望的整形");
}
}
public function isBoolean ($name){
if(!is_bool($value)||$value!==1||$value!==0){
throw new Exception("Param Error: 不是期望的布尔参数");
}
} /**
* 是否开启长链接
* 什么情况下使用长连接?
* 不同的脚本的执行间距非常短,同时每个脚本都要操作数据库(Mysql:mysql_pconnect())
* @param [type] $value [description]
* @return boolean [description]
*/
public function isAttrPersistent($value=false)
{
$this->isBoolean();
return $this->pdo->setAttribute(PDO::ATTR_PERSISTENT,$value);
} /**
* 设置默认的数据提取模式
* PDO::FETCH_ASSOC 2
* @param integer $value [description]
*/
public function setAttrDefaultFetchMode($value=PDO::FETCH_BOTH)
{
$this->isInteger();
/*
setFetchMode($value)
*/
return $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,$value);
} /**
* 设置数据的提取模式
* @param integer $value [description]
*/
public function setFetchMode($value=2)
{
$this->pdo->setFetchMode($value);
} /**
* 输出错误信息
*
* @param String $strErrMsg
*/
private function outputError($strErrMsg)
{ echo '<pre>';
throw new Exception('MySQL Error: '.$strErrMsg);
} /**
* getPDOError 捕获PDO错误信息
*/
private function getPDOError()
{
if ($this->pdo->errorCode() != '00000') {
$arrayError = $this->pdo->errorInfo();
$this->outputError($arrayError[2]);
}
} public function dump($value='')
{
echo '<pre>';
var_dump($value);
} public function aL($data,&$al,$level=0)
{
if(is_array( $data )){
$level++;
$al[] = $level;
foreach($data as $v){
$this->aL($v,$al,$level);
}
}
}
public function arrLevel($where)
{
$this->al=[];//去掉缓存
$this->aL($where,$this->al,$level=0);
return max($this->al);
} }

自定义PDO封装类的更多相关文章

  1. [Android] Android RecycleView和ListView 自定义Adapter封装类

    在网上查看了很多对应 Android RecycleView和ListView 自定义Adapter封装类 的文章,主要存在几个问题: 一).网上代码一大抄,复制来复制去,大部分都运行不起来,或者 格 ...

  2. pdo封装类

    <?php //http://www.imavex.com/php-pdo-wrapper-class/ class db extends PDO { private $error; priva ...

  3. php pdo封装类

    class MYPDO { protected static $_instance = null; protected $dbname = ''; protected $dsn; protected ...

  4. C#_Excel数据读取与写入_自定义解析封装类_支持设置标题行位置&使用excel表达式收集数据&单元格映射&标题映射&模板文件的参数数据替换

    本篇博客园是被任务所逼,而已有的使用nopi技术的文档技术经验又不支持我需要的应对各种复杂需求的苛刻要求,只能自己造轮子封装了,由于需要应对很多总类型的数据采集需求,因此有了本篇博客的代码封装,下面一 ...

  5. C3p0/元数据/内省-Bean/自定义查询封装类/查询/分页

    c3p0连接池(C3p0连接池,只有当用户获取连接时,才会包装Connection.) 第一步:导入c3p0 第二步:在classpath目录下,创建一个c3p0-config.xml 第三步:创建工 ...

  6. SQLite高级:一库建多表,封装类

    package eoe.database; import android.content.Context; import android.database.sqlite.SQLiteDatabase; ...

  7. 学习到目前,自己封装的db类和pdo类

    DB封装类 <?php class DBDA { public $host = "localhost"; public $uid = "root"; pu ...

  8. swift开源项目精选

    Swift 开源项目精选-v1.0 2016-03-07 22:11 542人阅读 评论(0) 收藏 举报  分类: iOS(55)   Swift(4)    目录(?)[+]   转自 http: ...

  9. 【温故Delphi】之VCL消息机制小结

    TObject消息分派 procedure Dispatch(var Message); virtual; #负责分派消息到特定VCL组件的事件处理函数 procedure DefaultHandle ...

随机推荐

  1. Go代码重构:23倍的性能爆增

    几周前,我读了一篇名为“ Good Code vs Go Code中的错误代码 ”的文章,作者指导我们逐步完成实际业务用例的重构. 本文的重点是将“坏代码”转变为“良好代码”:更具惯用性,更易读,利用 ...

  2. 洛谷P3247 [HNOI2016]最小公倍数 [分块,并查集]

    洛谷 思路 显然,为了达到这个最小公倍数,只能走\(a,b\)不是很大的边. 即,当前询问的是\(A,B\),那么我们只能走\(a\leq A,b\leq B\)的边. 然而,为了达到这最小公倍数,又 ...

  3. c#在Excel指定单元格中插入图片

    方法一: /// 将图片插入到指定的单元格位置,并设置图片的宽度和高度./// 注意:图片必须是绝对物理路径/// </summary>/// <param name="R ...

  4. a href=#与 a href=javascript:void(0) 的区别(转)

    a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP <a href="javascript:void(0)" onCl ...

  5. 练就Java24章真经—你所不知道的工厂方法

    前言 最近一直在Java方向奋斗<终于,我还是下决心学Java后台了>,今天抽空开始学习Java的设计模式了.计划有时间就去学习,你这么有时间,还不来一起上车吗? 之所以要学习Java模式 ...

  6. Confluence 6 用户宏示例 - Color and Size

    这个示例定义了如何向你宏中传递参数.我们将会创建一个字体样式宏,在这个宏中有 2 个参数,允许用户在这 2 个参数中指定宏中包含的字体的颜色大小. Macro name stylish Visibil ...

  7. django模板 内建标签

    autoescape 控制当前自动转义的行为,有on和off两个选项 {% autoescape on %} {{ body }} {% endautoescape %} block 定义一个子模板可 ...

  8. LeetCode(105):从前序与中序遍历序列构造二叉树

    Medium! 题目描述: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inor ...

  9. 【mysql】编码问题

    原始数据是unicode,存入数据库.需要注意的几个地方: 1.建立数据库时,选择编码方式为utf8 -- UTF-8 Unicode 2.代码中建立数据库连接时,选择charset=utf8 3.存 ...

  10. 性能测试四十二:sql案例之联合索引最左前缀

    联合索引:一个索引同时作用于多个字段 联合索引的最左前缀: A.B.C3个字段--联合索引 这个时候,可以使用的查询条件有:A.A+B.A+C.A+B+C,唯独不能使用B+C,即最左侧那个字段必须匹配 ...