作者:建哥2502897913 | 来源:互联网 | 2024-10-30 11:53
本文深入解析了ownCloud源代码中的数据库操作,重点介绍了增删改查方法的具体实现。通过分析`E:\wamp\www\owncloud\lib\private\files\cache\cache.php`文件,详细阐述了如何在ownCloud系统中执行数据的插入、删除、更新和查询操作。这些方法不仅涵盖了基本的数据操作,还涉及了缓存管理等高级功能,为开发者提供了全面的技术参考。
数据库增删改查方法
把到目前位置整理的一起放在这里
以下都是在这个中进行的操作:E:\wamp\www\owncloud\lib\private\files\cache\cache.php
1、增加
put方法中的如下图位置插入数据
![](https://www.#.com/go/)
![](https://www.#.com/imgs/2/0/2/5/94/8f355f2a0b9acda0edc44d23c715a7b0.jpe)
就是以上的复制到本地并删除文件(红线部分)修改之后可用,但是会存储到files_trash表中,文件没有,files_cache也没有。已删除文件处也不会显示。
3、更改
(1)以更新文件名字为例
E:\wamp\www\owncloud\apps\files\lib\app.php中的rename方法
↓↓↓
E:\wamp\www\owncloud\lib\private\files\view.php这里的rename方法来重命名文件
↓↓↓
E:\wamp\www\owncloud\apps\files_trashbin\lib\storage.php中的rename调用
E:\wamp\www\owncloud\apps\files_external\lib\streamwrapper.php的rename方法重命名ftp的文件
↓↓↓
E:\wamp\www\owncloud\lib\private\files\cache\updater.php中的rename方法重命名数据库中数据
↓↓↓
E:\wamp\www\owncloud\lib\private\files\cache\cache.php中的move方法中的
![](https://www.#.com/go/)
![](https://www.#.com/imgs/7/1/5/4/18/64e03d091d046d56637e43c3453c059e.jpe)
这条sql执行更新命令,over!!!!!!!!!
![](https://www.#.com/imgs/5/7/8/9/58/290b19b2dd382959012d4627514b1fc6.jpe)
![](https://www.#.com/go/)
更新完还会change一大堆信息,fuck!
![](https://www.#.com/imgs/7/4/0/8/48/24b155c90f7b203bea3c65b5ff0bd080.jpe)
![](https://www.#.com/go/)
rename完了回到view的rename方法,从第二道红线继续运行
最后返回数据到
E:\wamp\www\owncloud\apps\files\lib\app.php中的rename方法
↓↓↓
这下真over了算是!!!!
(2)修改更新txt文件
E:\wamp\www\owncloud\apps\files_texteditor\ajax\savefile.php中的
![](https://www.#.com/go/)
![](https://www.#.com/imgs/6/7/1/9/75/8d6ed6a6a2169ed9b76f43fdef49ea00.jpe)
上面红线中的方法,修改内容。
4、查询
查询列表list.php为例
E:\wamp\www\owncloud\lib\private\files\cache\cache.php的getFolderContentsById($fileId)方法从数据库选取数据
以上,over
数据库连接处
E:\wamp\www\owncloud\lib\private\db.php的prepare方法
![](https://www.#.com/imgs/0/1/1/5/49/bf1cb1af679661af0aa37bd1b5ebdc3d.jpe)
E:\wamp\www\owncloud\lib\private\server.php中的getDatabaseConnection方法
![](https://www.#.com/imgs/4/2/0/7/28/400e1ce6cb73fad0e7feaa2149f1188e.jpe)
判断是否是写操作但是没卵用啊,和数据库分离又没关系
E:\wamp\www\owncloud\3rdparty\doctrine\dbal\lib\Doctrine\DBAL\Connection.php的prepare方法
↓↓↓
E:\wamp\www\owncloud\3rdparty\doctrine\dbal\lib\Doctrine\DBAL\Connection.php的connection方法
↓↓↓
还有个E:\wamp\www\owncloud\3rdparty\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOConnection.php类
另起,以下准备修改主从,只是一个想法,没实现:
![](https://www.#.com/go/)
![](https://www.#.com/imgs/8/6/5/3/14/3e1ab6d09c096f1e2360c0cdd8cd61c6.jpe)
以上可见,通过register方法将对象注册到server对象中
根据以上修改如下:
E:\wamp\www\owncloud\lib\private\db\connectionfactory.php中加入了一个
/**
* 设置从数据库服务器
* @param \OC\SystemConfig $config
* @return array
*/
public function createFConnectionParams($config) {
方法用来生成从服务器的链接
在server.php的注册方法中加入了如下方法:
$this->registerService('FDatabaseConnection', function (Server $c) {
$factory = new \OC\DB\ConnectionFactory();
$systemConfig = $c->getSystemConfig();
$type = $systemConfig->getValue('dbtype', 'sqlite');
if (!$factory->isValidType($type)) {
throw new \OC\DatabaseException('Invalid database type');
}
$connectionParams = $factory->createFConnectionParams($systemConfig);
$connection = $factory->getConnection($type, $connectionParams);
$connection->getConfiguration()->setSQLLogger($c->getQueryLogger());
return $connection;
});
注册了一个从服务器链接
继续加入了
/**
* 返回从服务器的链接session
* @return \OCP\IDBConnection
*/
function getFDatabaseConnection() {
return $this->query('FDatabaseConnection');
}
获取链接方法
以及注册Fdb方法