php快速插入大批量数据到Sqlite3
来源:互联网 发布:淘宝卖家被冻结 编辑:程序博客网 时间:2024/05/16 11:33
因为需要为一批不大不小的文件插入到数据库分析,为操作方便所以选择了php和Sqlite3。刚开始直接使用的SQLite3类插入数据,我的个天呀慢的要死,30秒只插入了300多条数据最后还提示php-cgi.exe超时了。后来查资料得知用事务提交的方式会比较快,经测试成功后写了一个php类贴出来,用MySQL数据库也可用类似的方式。
class MyDB extends PDO{protected $transactionCounter = 0;protected $lasterror = "";function __construct($index = 0){try{if($index == 1){parent::__construct('sqlite:'.dirname(__FILE__)."/data.db");}else{parent::__construct('sqlite:'.dirname(__FILE__)."/tools.db");}$this->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);}catch(PDOException $e){$this->lasterror = $e->getMessage();}}function query($sql){$result = array();try{$sth = $this->prepare($sql);if(!$sth){$this->lasterror = "Incorrect statement";return array();}$sth->execute();$result = $sth->fetchAll();}catch(PDOException $e){$this->lasterror = $e->getMessage();}catch(Exception $e){$this->lasterror = $e->getMessage();}return $result;}function exec($sql){$count = 0;try{$count = parent::exec($sql);}catch(PDOException $e){$count = 0;$this->rollback();$this->lasterror = $e->getMessage();}return $count;}function beginTransaction(){if(!$this->transactionCounter++){return parent::beginTransaction();}return $this->transactionCounter >= 0;}function commit(){if(!--$this->transactionCounter){return parent::commit();}return $this->transactionCounter >= 0;}function close(){}function rollback(){if($this->transactionCounter >= 0){$this->transactionCounter = 0;return parent::rollBack();}$this->transactionCounter = 0;return false;}function getLasterror(){return $this->lasterror;}}
使用示例:
$db = new MyDB(1);$db->beginTransaction();$fs = fopen('c:\\xxx.txt','r');$change = 0;while(!feof($fs)){$tmp = fgets($fs,1024 * 10);//......$sql = "insert into $newtable values(NULL,'xxx','yyyy')";if(!$db->exec($sql))echo $db->getLasterror()."<br>";else$change += 1;if($change % 1000 >= 999){$db->commit();$db->beginTransaction();}}$db->commit();fclose($fs);echo "add $change items<br>";
0 0
- php快速插入大批量数据到Sqlite3
- 大批量快速插入数据方法
- MySQL快速插入大批量数据存储过程
- 使用 SqlBulkCopy大批量插入数据到数据库
- jdbc批量插入实现大批量数据快速插入
- 向ACCESS大批量快速插入数据的方法
- 大批量数据的插入
- java大批量插入数据
- Oracle大批量插入数据
- MYSQL 大批量数据插入
- c#大批量数据插入
- 大批量数据插入
- Oracle大批量插入数据
- 大批量数据导出到Excel
- 大批量导入数据到mysql
- sqlite3 无法插入数据
- sqlite3插入数据异常
- 转载自大牛的博文-解决大批量插入数据到数据库中的问题
- CAS sso单点登录
- 断言机制
- [LeetCode OJ]Min Stack
- Android系统SVC命令教程
- Java的内存回收机制
- php快速插入大批量数据到Sqlite3
- ios-day11-01(UIWindow的常用方法。makeKeyWindow、makeKeyAndVisible、获取当前应用的主窗口和所有窗口)
- Android Fragment 真正的完全解析(上)
- iOS开发UI篇—UITableview控件简单介绍
- 日经社説 20150311 被災者自立へ細やかな復興支援を
- Java P5
- JQuery调用WCF
- AFNetWorking同时解析MsgPack和JSON等多种返回数据
- [Golang]网络游戏协议处理框架