SQLITE3.EXE批量执行点命令的方法

Posted Luo大哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLITE3.EXE批量执行点命令的方法相关的知识,希望对你有一定的参考价值。

这两天在使用Firedac进行sqlite数据库编程,遇到了一个问题,这个问题的本身是这样的:

有一个数据库文件,其它一切都正常,但在文件中存在一个有错的INDEX,导致无法使用FIREDAC打开,需要先删除该INDEX后,才能正常使用FIREDAC打开该数据库文件,然而如果删除该INDEX,则会对该文件进行修改,所以在删除该INDEX之前,还需先行备份该文件,这两项工作我都准备通过调用sqlite3.exe来完成。

该文件的文件名是:CCA3.DB

如果在sqlite3.exe中直接执行下面的点命令即可:

.OPEN CCA3.DB
.BACKUP CCA3.DBB
.OPEN CCA3.DBB
DROP INDEX IF EXISTS IDX1

但是因为我是在程序中通过调用shellexecute函数来实现的,不准备让程序使用者进行操作和等待,因此需要在调用函数shellexecute时批量完成这些操作,只能在sqlite3的参数上下功夫。

好吧,下面先来谈谈sqlite3.exe的参数吧,我在sqlite的官网上,只看到unix下面的操作,参数之间使用符号“|”来进行分割,依葫芦画瓢的做,结果出错了。

如果不使用“|”来进行分割呢?依然出错。

当我执行:sqlite3.exe CCA3.DB ".BACKUP CCA3.DBB",只是用一个语句时却没问题。

后来经过摸索我才发现,在windows系统下,sqlite3.exe的参数是不限制的,但是参数的分隔符是空格,所以只需要把每个命令用双引号或单引号囊括起来,并用空格分隔开即可,下面的命令就可以完成所有的操作。

sqlite3.exe CCA3.DB ".BACKUP CCA3.DBB" ".OPEN CCA3.DBB" "DROP INDEX IF EXISTS IDX1" 

当然,如果需要的操作再长点,似乎命令行的长度是有限制的,只有采用另外的方法了。

  tsl:=TStringList.Create;
  tsl.Add(\'.backup CCA3\\\\\'+ss1);
  tsl.Add(\'.open CCA3\\\\\'+ss1);
  tsl.Add(\'drop index if exists IX_alternate_destination_airport_id;\') ;
  tsl.SaveToFile(\'a1.txt\');

  ss1:=dlgOpen1.FileName+\' ".read a1.txt"\';
  h:=shellexecute(Self.Handle,\'open\',\'sqlite3.exe\',
                PChar(ss1),nil,SW_SHOWNORMAL);
  while GetStdHandle(h)=h do
  begin
    Application.ProcessMessages;
  end;

.read可以读取一个sqlite3.exe的“批处理”文档,适用于需要批量处理的命令很多的情况。

这段代码很简单,就懒得解释了。

最后一段循环的目的是用于等待执行shellexecute完毕后再继续,因为windows下shellexecute调用的程序和本程序是同时进行的,在sqlite3.exe执行完毕前,你可能会得到一个不完整的数据库文件。

 

处理svn不能执行cleanup命令的方法

svn执行update的时候报错:
技术分享图片

按照提示执行cleanup操作,但是又报错了,还是提示要执行cleanup,这下是进入死循环了。
技术分享图片

在网上找了一下处理svn执行不了cleanup的方法,都说清空svn的队列就可以了,步骤如下:
1.下载sqlite3.exe
2.找到对应项目的.svn文件,查看是否存在wc.db
3.将sqlite3.exe放到.svn的同级目录
4.启动cmd执行sqlite3 wc.db "select * from work_queue"
sqlite3 wc.db "delete from work_queue"

技术分享图片

以上是关于SQLITE3.EXE批量执行点命令的方法的主要内容,如果未能解决你的问题,请参考以下文章

处理svn不能执行cleanup命令的方法

如何使用单个脚本自动打开 sqlite3.exe shell 并运行命令?

python sqlite3的问题

sqlite3.exe 使用教程

如何使用 sqlite3.exe 从导出的 .sql 脚本创建数据库

SQLite第一课 sqlite3.exe使用教程