Sqlite China  
首页 | 各种语言的sqlite编程 |sqlite研究 | sqlite应用实例与杂谈 | sqlite相关下载 | SQlite论坛
当前位置 : 主页>各种语言的sqlite编程>列表
Sqlite数据库转Mysql程序
来源:工友 作者:工友 时间:2007-12-21
          忙了好久从傍晚开始想把第一个项目的sqlite转为mysql,毕竟mysql比较正式点,sqlite也许只能作为玩具,sqlite好多的查询语句 都是不标准的,再跟它纠缠下去对自己发展很不利。不过也要感谢它为我学sql有个很好的开始。算来今天是第一次正经的用mysql做点事情。数据库转换的 第一件事就是建立跟sqlite对应的表,没有采用什么技巧,直接套用建立sqlite数据库用的sql脚本,亮点就是自动删除已存在的的同名表。接下来 的工作就是遍历sqlite中表的结构,采用foreach语句来完成,开始发现读出的数据一直不对,尝试用zend studio的debug功能来查看sqlite_fetch_array返回的数组结构,结果失败了,debug不识别sqlite函数。搞了半天才知 道用print_s()函数输出数组结构,发现返回的数值很古怪,每个结果有两个脚标,一个是数字的,一个是表字段名,如下所示:

Array ( [0] => Array ( [0] => 1 [id] => 1 [1] => Admin [name] => Admin [2] => c4ca4238a0b923820dcc509a6f75849b [passwd] => c4ca4238a0b923820dcc509a6f75849b [3] => 0 [class] => 0 [4] => 2005-11-01 10:44:36 [regtime] => 2005-11-01 10:44:36 ) [1] => Array ( [0] => 2 [id] => 2 [1] => 管理员 [name] => 管理员 [2] => c4ca4238a0b923820dcc509a6f75849b [passwd] => c4ca4238a0b923820dcc509a6f75849b [3] => 1 [class] => 1 [4] => 2005-11-05 11:01:51 [regtime] => 2005-11-05 11:01:51 ) )

          想了好久才想出一个取单值办法,并想个办法构造插入sql语句,还好mysql手册中有例程,原本想把表的字段提取出来在用insert into table (字段列表) values(字段对应的值)这种比较啥的方式插入的,经查手册发现,可以直接用insert into table values(字段列表),由于每个表有个主键是auto_increment的,不运行插入具体的值,可用null来插进去。整个代码如下,尝试了 php5的错误处理方法,跟java是一样的。还有就是从php5.1.2开始php.ini中short_tags 是off的,这样形如<?=$var?>的标签就不能用,搞得discuz4都装不上。打开后才能装!!
 
转换程序代码:

<?php
include("class/mysql.php");
try{
        
$link=new DB_MySQL();
        
$link->connect();
        
$link->selectdb();
        
$db=sqlite_open("mssql.php");
        
$tables=array("admin","class","config","linkcon","loginlog","content");        
        foreach (
$tables as $value){
                
transfer($value);
        }

        
$link->close();        
}
catch(Exception $e){
        print 
$e->getMessage();
        exit();
}
//数据转移函数,输入值为表名,可自动清空目标表    
function transfer($table)
{
        global 
$link,$db;
        
$query="select id from $table";
        
$link->query($query);
        if(
$link->affected_rows()!=0){
                
$query="truncate $table";
                
$link->query($query);
        }
     
$query="select * from $table";
    
$array=sqlite_array_query($db,$query);
    
$query="insert into $table values (null";
    
$flag=0;
           foreach(
$array as $row){
                   
$i=1;
                   
$j=0;
                   if(
$flag==1)
                           
$query.=",(null";
                   foreach(
$row as $col){
                        if(
$j%2!=&& $j>2){
                                
$query.=',''.$row[$i++].''';
                        }                        
                        
$j++;
                }   
                
$query=$query.")";
                
$flag=1;
          }
   
$link->query($query);
}
?>
(阅读次数:
上一篇:开源嵌入式数据库Bericeley DB和SQLite 下一篇:嵌入式数据库sqlite在Motorola Coldfire + uclinux下的移植
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
§最新评论
热点文章
·简单的在Java中使用SQLite
·C/C++中调用SQLITE3的基本
·PHP+SQLITE制作简单的视频
·DISQLite3 简介 SQLite de
·VB.NET 中使用 SQLite3 的
·SQLiteJDBC 100%纯JAVA的s
·如何在Windows下编译SQLit
·关于SQLite的一些简单介绍
·在VC6.0中使用C++访问sqli
·C/C++中调用SQLITE3的基本
·SQLite 与 PHP 结合开发(
·在VC6.0中使用C++访问sqli
·使用SQLite进行网站搜索
·SQLite ADO.NET 驱动(C#
·在.NET C#中使用sqlite
·python模块之sqlite数据库
·PHP中的SQlite数据库应用
·如何在PHP5中通过PDO连接S
·PHP中如何使用sqlite_crea
·SQLite 、 PHP混合扩展编
相关文章
·让你的PHP4也用上Sqlite3
·VB.NET 中使用 SQLite3 的
·C/C++中调用SQLITE3的基本
·python模块之sqlite数据库
·在.NET C#中使用sqlite
·用Ruby进行SQLite的开发指
·PHP5中的 sqlite_create_f
·SQLite ADO.NET 驱动(C#
·使用SQLite进行网站搜索
·如何在Windows下编译SQLit

版权Power by DedeCms   后台登陆
Copyright @ 2007