在SQlite中遍历一张表的同时更新这个表的内容碰到的一些问题
在一个连接中遍历一个表的时候同时使用sql语句更新这个表的值,碰到错误”database table locked”
首先尝试在遍历前使用 PRAGMA read_uncommitted = True;,
在遍历完成后在执行PRAGMA read_uncommitted = False;
这么处理后在遍历过程中可以对表做更新操作,不过引起另外一个问题,只能遍历一半的表记录,且当为记录行数为基数时会出现“not an error”错误,经测试估计是在遍历过程中使用执行更新sql语句时,同时向后移动了遍历的位置。
再次尝试使用两个链接来做遍历更新处理,其中一个链接做遍历,另外一个链接做更新。 在记录数少时一切正常,但是当记录数很多时候,在后面记录的更新时会出现“SQL logic error or missing database” 的错误。
最终对要遍历的表采用limit关键字分片读取出需要的数据,然后对这些数据做更新,完成后再读入下一组数据继续处理。
load a block data
while has block data
foreach record in block
do update
load next block data
Popularity: 27% [?]
Related
在Android NDK 中使用STLport(译)
Android NDK是Native C/C++开发,不过下载来看了一下缺少常见的STL库,使用起来诸多不便,于是网上google了一把,发现有人做了这样的事情,特别转过来
——————————–
原文: Android NDK - getting STLPort up and running
作者: Pete Cole
——————————-
如果你想在Android NDK使用STLPort, 你必须要做点处理,即便你是在windows上使用cygwin.
首先, 从http://umbel.mooo.com/ 获取一份修改版的 STLPort(by John Ripley (great job, John!)). 如果你是一个 cygwin 用户, 你首先要安装一个git包(译注:可以直接下载snapshot,这样就不要安装git了).
然后将文件拷贝到你的工作目录下. 在我的机器上, 我将文件拷贝到了c:\android-ndk-1.5_r1 目录下, 并将 两个hello-stl 文件夹移动到其他和NDK有关的目录下:
C:\android-ndk-1.5_r1\apps\hello-stl C:\android-ndk-1.5_r1\sources\samples\hello-stl
然后在Build STLPort前必须修改一些文件…
setup.sh
将最前面的一些行修改正如下样子:
-
#!/bin/bash
-
if uname | grep -qi linux; then
-
export NDK_HOST=linux-x86
-
elif uname | grep -qi CYGWIN; then
-
export NDK_HOST=windows
-
else
-
export NDK_HOST=darwin-x86
-
fi
将倒数第三行修改成如下样子:
-
ln -sf "$NDK_DIR/build/prebuilt/${NDK_HOST}/arm-eabi-4.2.1/bin/arm-eabi-$tool" arm-linux-$tool
stlport/build/lib/android.mak
将TOOLCHAIN_PREFIX这一行修改成
-
TOOLCHAIN_PREFIX := $(NDK_DIR)/build/prebuilt/$(NDK_HOST)/arm-eabi-4.2.1/bin/arm-eabi-
译注: 我下载来的Wrapper包已经是这个样子了,不用修改
sources/samples/hello-stl/Android.mk
将STLPORT_BASE这一行修改成如下样子:
-
STLPORT_BASE := /cygdrive/c/android-ndk-1.5_r1/stlport
译注:我没有修改这边,执行了一个export NDK_WRAPPERS_BASE=basepath的操作
将:
-
LOCAL_LDLIBS += -L$(STLPORT_BASE)/build/lib/obj/gcc/so \
-
-lstlport
修改成
-
LOCAL_STATIC_LIBRARIES := libstlport.5.1
Building STLPort
现在文件已经被合并了,你可以立即build STLPort了!
执行如下cygwin shell脚本… 它将build STLPort的静态链接库! 对此你只需要做一次.
-
export NDK_DIR=/cygdrive/c/android-ndk-1.5-r1
-
cd $NDK_DIR
-
./env.sh
-
./setup.sh
现在,像下面这样讲文件拷贝到你的工程中:
-
cp -p \
-
/cygdrive/c/android-ndk-1.5_r1\stlport\build\lib\obj\gcc\ar\libstlport.5.1.a \
-
/cygdrive/c/android-ndk-1.5_r1\out\apps\hello-stl\android-1.5-arm
Building your project’s shared library.
现在你可以返回cygwin的shell窗口,然后执行如下命令:
-
cd /cygdrive/c/android-ndk-1.5_r1
-
make APP=hello-stl
将编译你的共享库文件:
C:\android-ndk-1.5_r1\apps\hello-stl\project\libs\armeabi\libhello-stl.so
注: 这会将STLPort静态链接到你的库中.
Building the hello-stl project
在Eclipse中,使用New Project Wizard为每一个例子创建一新的Android project, 使用”Import from Existing Source” 选项从c:\android-ndk-1.5_r1\apps\hello-stl\project 导入源文件
现在你可以编译和运行你的项目了. 将显示从共享库中返回来的std::string字符串 …!
Popularity: 24% [?]
Related
SQLite出现database disk image is malformed(11)的处理
SQLite有一个很严重的缺点就是不提供Repair命令。
导致死亡提示database disk image is malformed
它的产生有很多种可能,比如,磁盘空间不足,还有就是写入数据过程中突然掉电等。
官方对产生原因的一些说明: http://www.sqlite.org/lockingv3.html#how_to_corrupt
sqlite my.sqlite3 sqlite>PRAGMA integrity_check;
获得提示
*** in database main *** Page 1518: btreeInitPage() returns error code 11 On tree page 1566 cell 2: Child page depth differs On tree page 1566 cell 3: Child page depth differs SQL error: database disk image is malformed
可以尝试通过简单的导出导入方式对损坏的库文件作回复。
首先导出数据
sqlite3 my.sqlite3 sqlite>.output tmp.sql sqlite>.dump sqlite>.quit
再倒入到一个新库中
sqlite3 mynew.sqlite3 sqlite>.read tmp.sql sqlite>.quit
这时新建的mynew.sqlite3一般可用。
Popularity: 25% [?]
Related
symbian手机平台上的putty
发现一个 Symbian 平台上的一个 ssh 客户端 putty for symbian。
在PC上用习惯了小巧的 putty, 在 sourceforge.net 上闲逛,发现也有一个 putty for symbian OS ,这样以后在Nokia 智能手机上也能用 putty 来远程连接服务器做管理了。
下载服务器上同时公布有源码下载,有兴趣的话可以下载研究一下。
Popularity: 28% [?]
Related
给Symbian添加子菜单方法
测试用Symbian程序的菜单越来越多,想通过子菜单方式将菜单的功能分组。
研究了一下,发现在资源文件中可以做到,要使用MENU_ITEM的cascade属性。
- 首先
修改原先的一个MENU_ITEM,设置其cascade值为一个新的MENU_PANE的id(红色字标出)
MENU_ITEM
{
command = ETest_S60CmdGroup1;
txt = qtn_hewb_cmdgroup1;
cascade = r_test_s60_group1_menu;
},
对子菜单的MENU_PANE设置,注意红色字和前面的对应关系
RESOURCE MENU_PANE r_test_s60_group1_menu{
items =
{
// added the new Options menu command here
MENU_ITEM
{
command = ETest_S60CmdGroupItem1;
txt = qtn_hewb_cmdgroupitem1;
}
};
}
设置好相关资源值,Rebuild工程,运行,在模拟器中可以看到刚刚设置的子菜单。
Popularity: 30% [?]
Related
WINCE不支持time函数?
WinCE上不支持time.h中的常用的time函数,网上找了一小段代码为其补上。
-
time_t time( time_t *inTT ) {
-
SYSTEMTIME sysTimeStruct;
-
FILETIME fTime;
-
ULARGE_INTEGER int64time;
-
time_t locTT = 0;
-
-
if ( inTT == NULL ) {
-
inTT = &locTT;
-
}
-
-
GetSystemTime( &sysTimeStruct );
-
if ( SystemTimeToFileTime( &sysTimeStruct, &fTime ) ) {
-
memcpy( &int64time, &fTime, sizeof( FILETIME ) );
-
/* Subtract the value for 1970-01-01 00:00 (UTC) */
-
int64time.QuadPart -= 0×19db1ded53e8000;
-
/* Convert to seconds. */
-
int64time.QuadPart /= 10000000;
-
*inTT = int64time.QuadPart;
-
}
-
-
return *inTT;
-
}
更好的解决方案可以使用LuaCe中的实现(在luace.c文件中,和时间有关的几个函数实现都有)
—–
不过想不明白,这么基础的函数M$为什么不提供在SDK中。开发人员就一定是要用Systemtime函数?
Popularity: 37% [?]
Random Posts
如何在VC调试器中显示Symbian字符串(译)
在VC中编写Symbian程序,在调试状态下很不方便看Symbian的字符串内容,网络上搜到这么一篇,感觉不错,译载一下。
原文标题: How to display Symbian strings and descriptors in Visual C++ debugger
原文地址:http://www.newlc.com/How-to-display-Symbian-strings-and.html
译文地址: http://www.sunnyu.com/?p=135
本文由 sunny译于 2008.11.08 由于英文水平有限,译文难免有很多不足之处,欢迎指正。
————–译文开始—————-
目前,在使用Visual Studio调试Symbian程序时,Symbian的字符串显示方式有点不好,不能直接显示他们的内容(你只能使用Memory窗口查看)。在这儿,我们介绍一个小的技巧,使你在调试时能够方便的显示Symbian中字符串的内容。
我们是得益于Microsoft Visual Studio的”Auto Expand”特性做到这点的。这个特性允许我们指定调试器显示用户数据的方式。可以通过手工编辑AutoExp.dat文件来实现(文件默认在 C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin 目录下 )。
使用你惯用的编辑器打开这个文件,然后 拷贝/粘贴 下面的内容到文件尾部。
;
; Symbian Strings & Descriptors
;
;=======================================================
TDes16=<,t> length=<iLength> max=<iMaxLength>
TDesC16=<,t> length=<iLength>
TPtr=length=<iLength> max=<iMaxLength> ptr=<iPtr+2,su>
TPtr16=length=<iLength> max=<iMaxLength> ptr=<iPtr+2,su>
TPtrC=length=<iLength> ptr=<iPtr,su>
TPtrC16=length=<iLength> ptr=<iPtr,su>
TBuf<*>=length=<iLength> max=<iMaxLength> buf=<iBuf,su>
TBufC<*>=length=<iLength> buffer=<iBuf,su>
HBufC16=length=<iLength> buffer=<iBuf,su>
TLitC<*>=length=<iTypeLength> buf=<iBuf,su>
TDes8=<,t> length=<iLength> max=<iMaxLength>
TDesC8=<,t> length=<iLength>
TPtr8=length=<iLength> max=<iMaxLength> ptr=<iPtr,s>
TPtrC8=length=<iLength> ptr=<iPtr,s>
TBuf8<*>=length=<iLength> max=<iMaxLength> buffer=<iBuf,s>
TBufC8<*>=length=<iLength> buffer=<iBuf,s>
HBufC8=length=<iLength> buffer=<iBuf,su>
TLitC8<*>=length=<iTypeLength> buffer=<iBuf,s>
TFileName= <iBuf,su>
TFullName= <iBuf,su>
重新运行IDE环境, 设置一两个断点, 开始调试方式运行程序, 你在断点可以看到….

怎么样 ?
——
以前都不知道M$的VS有这个特性,又学了一招。vs2005对应的文件在 C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger 目录下
Popularity: 34% [?]
Related
Symbian 的 sprintf 函数对 “%f” 浮点数格式化不正常?
在测试工程使用了 sprintf 函数,结果发现 %f 行为不正常。
多数时候输出的时候,字符串里面都有不止一个小数点(或者是逗号,我视力不好看不清 :-s)。和想要的只有一个小数点的期望相差太远。
Nokia的论坛上找了一下,好像没有这个问题。有人通过 LC_ALL 来设置,不过我试了没有效果。
只好自己做了一下包装,将浮点数分为整数和小数两个部分处理,然后再拼接起来。
-
std::string floattostr( double d )
-
{
-
char buf[30];
-
#ifdef OS_SYMBIAN
-
// 整数部分
-
int i = d;
-
sprintf (buf, "%d",i);
-
// 小数部分
-
double f = d - i;
-
char buf1[30];
-
sprintf(buf1, "%.6f",f);
-
// 做拼接
-
strcat(buf, &(buf1[1]));
-
#else
-
sprintf(buf, "%f", d);
-
#endif
-
return buf;
-
}
Popularity: 36% [?]
Related
OfferKeyEventL不能响应按键操作?
写了测试代码测试按键控制。
重载了OfferKeyEventL函数
-
TKeyResponse CMyTest_S60AppView::OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType){
-
// We only want the key press, not the key up/down event
-
if ( aType == EEventKey )
-
{
-
// Check if the 2 key was pressed
-
if ( aKeyEvent.iCode == '1' )
-
{
-
iKeyPressCount ++;
-
return EKeyWasConsumed;
-
}
-
return EKeyWasNotConsumed;
-
}
编译运行,可是怎么按都没有响应,在Debug 中下断点,也不停下来。
后来到Nokia论坛看了一下,发现使用 AddToStackL(iAppView); 添加到列表中才能处理按键响应。
-
void CMyTest_S60AppUi::ConstructL()
-
{
-
// Initialise app UI with standard value.
-
BaseConstructL();
-
-
// Create view object
-
iAppView = CMyTest_S60AppView::NewL( ClientRect() );
-
-
AddToStackL(iAppView);
-
-
PrivacyStatementL();
-
iAppView->BeginSession();
-
}
Popularity: 38% [?]
Related
使用Bitmap Collection tool未能生成mbg文件?
在vs.net中使用carbide.vs的Bitmap Collection tool为测试程序添加了一个小图片,结果在输入日志中提示有mbm文件生成,可是在源码目录下找不到对应的 mbg 文件。是Bitmap Collection tool没有生成mbg文件吗?
看到输出日志中提示mbm文件是生成到sdk目录下的,想mbg是不是也会在sdk目录下呢?于是在sdk目录下搜索.mbg文件,发现在epoc32\include目录下还真的有。打开查看,发现其中定义了枚举量,和自己的文件名有对应关系。
因为epoc32\include已经在工程中包含,所以按照命名的规则放心大胆的在工程中 #include 进来。然后代码中使用图片资源定义常量。
Popularity: 27% [?]
