Home
JavaEE
Java GUI
Framework
DHtml
Android
插画
教程下载

ATOM 2.0   RSS 2.0
Add to iGoogle Add to Live.com
  • 今天终于收到金山快盘的邀请码
  • 利用最短ie判断在不同浏览器上播放背景音乐
  • 对插画方面的一点感受与回忆
  • 网上看到的两个死里逃生的图片,记录一下
  • 今天开通了糖果社区,附几个激活码
  • 终于可以实现我的多个微博实时同步了
  • 备案和现场拍照就是对站长们的瞎折腾
  • 对Android在互联网应用开发上的纠结
  • 收藏夹中的书签都没了,决定写一个自已的书签管理器
  • 测试自已整理的本机的webapps客户端发送博文能否成功。
  • 今天开通了糖果社区,附几个激活码
  • 终于可以实现我的多个微博实时同步了
  • 备案和现场拍照就是对站长们的瞎折腾
  • 昨天借用飞姐的佳作做的一个浪漫爱情网页
  • 有几个腾讯微博的邀请码(实时更新)
  • BB的网站移到了GAE-JAVA上了
  • 一个基于GAE Python Web.py和JQuery的留言本程序
  • 类许愿墙的一个告白网站和一个电子书网站
  • Android中用Bitmap获取图片中某个区域的图象
  • 对暴力破解带密码的QQ相册的可行性分析
  • 对淘宝web旺旺版一些通讯接口的研究

SQLHelper,一个单态的,没事务冲突的类,基于SQLFilter的数据库常用操作功能

posted by David Chen at April 1, 2008, 1:28 AM    

下面这个类要用到sql filter那个类,请参考 SQLFilter 这篇文章, sql filter是用于拼写sql的,但不是
简单的拼写,是以对象方式,自动生成pdo statement的占位符和给 statement填充参数值.
以下的类是使用了单态模式, 只要系统的db操作都是用下面这个类的话,就不怕事务的不统一了, 需然这样
做会使事务与逻辑放在同一个地方,但是可以实现java中的openSessionInViewer同样的功能.
openSessionInViewer是在视图层就开启db链接,与mvc有冲突, 下面这个SQLHelper就解决了这个问题.
这个SQLHelper是基于小东的SQLHelper类的改写, 在它那个类的基础上改写后的功能.

require_once( dirname(__FILE__) . '/SQLFilter.php' );

/**
$helper = SQLHelper::getInstance();
$helper = SQLHelper::getInstance();
$helper = SQLHelper::getInstance();
如果这3句在一个http线程中顺序运行, helper指向的都是同一instance,
instance在一个http线程线路束后自动移离内存,变为null,所以可以实现
在一个http线程中实现单态模式
因为在一个http线程中,使用单态, __destruct只会执行一次, 所以可以在
__construct中开始事务,在__destruct中处理事务的提交和回滚
**/

class SQLHelper {

private static $instance = NULL;

const DB_SERVER = 'localhost';
const DB_DATABASE = 'myfilm';
const DB_USERNAME = 'root';
const DB_PASSWORD = '';

private $conn;

public static function getInstance() {
//var_export( self::$instance );
if( is_null( self::$instance ) )
self::$instance = new SQLHelper();
return self::$instance;
}

public function SQLHelper() {
try {
$this->conn = new PDO(
"mysql:host=" . self::DB_SERVER . ";dbname=" .
                    self::DB_DATABASE, self::DB_USERNAME, self::DB_PASSWORD,
array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8';" )
);
}
catch(PDOException $ex){
die( "Error: " .$ex->getMessage() . "<br>" );
}
$this->beginTransaction();
}

public function __destruct() {
$this->doTransaction();
$this->conn = NULL;
}

public function beginTransaction() {
return $this->conn->beginTransaction();
}

public function doTransaction() {
try {
$this->conn->commit();
}
catch (PDOException $ex) {
$this->conn->rollBack();
}
}

public function query( $sql, $filter_list = NULL, $limit_m = NULL,
                               $limit_n = NULL, $order = '' ) {
if( !is_null( $filter_list ) )
$sql = SQLFilter::get_holders( $filter_list, $sql );
if( !empty( $order ) )
$sql .= ' order by ' . $order;
if( is_int( $limit_m ) && is_int( $limit_n ) )
$sql .= ' LIMIT $limit_m, $limit_n';

$stmt = SQLFilter::fill_statement(
$this->conn->prepare( $sql ),
$filter_list
);
$stmt->execute();
$rs = $stmt->fetch(PDO::FETCH_BOTH);
return $rs;
}

public function update( $sql, $filter_list = NULL ) {
if( !is_null( $filter_list ) )
$sql = SQLFilter::get_holders( $filter_list, $sql );
$stmt = SQLFilter::fill_statement(
$this->conn->prepare( $sql ),
$filter_list
);
$stmt->execute();
return $stmt->rowCount();
}

public function query_var( $sql, $filter_list = NULL ) {
$rs = $this->query( $sql, $filter_list );
return $rs[0];
}

public function query_list( $sql, $filter_list = NULL, $number = NULL,
                                    $rowcount = NULL, $order = NULL ) {
$rs = NULL;
if( is_int( $number ) && is_int( $rowcount ) )
$rs = $this->query( $sql, $filter_list,
                             ($number-1) * $rowcount, $rowcount, $order );
$rs = $this->query( $sql, $filter_list, NULL, NULL, $order );
return $rs;
}

}

相关文章:
php中使用sqlcondition,把sql的拼写变成对象,基于pdo的占位符使用
Labels:   Php  
Trackback:   http://cwq.iou1314.com/pdo-sqlhelper_a300
微博最近更新
[2010-07-31 16:33]    今天下午又将昨天赢的哎齐出来了,郁闷,一进一出,要有入没出才行啊。
[2010-07-31 07:40]    昨晚又去啊泄度开台,呢次赢左差唔多3旧水,下周星期一请假,回郁南去转社保和入党资料。
本站内的任何文章,只代表个人意见或学习所用,如有版权声明,请尊重作者的劳动成果,在转载时请保留原始链接并注明出处。
Power by David's PhpCms, © 2007 - 2010 CWQ.IOU1314.COM All Rights Reserved.