sqlite的insert or update实现

通常需要插入一个记录的时候我们需要先判断在表中是否已经存在,如果存在则直接更新这条记录。
一半情况下我们会做两步操作,先通过select语句查询符合条件的记录条数,如果大于或等于1则代表记录存在。如果记录存在则使用update语句进行更新操作。

今天发现sqllite里面多少个replace的命令,可以用来替换已存在的记录。

INSERT OR REPLACE INTO MESSAGEINFO(id,userId,contentId,contentType,title,content,createTime,nickname,headImg)VALUES(?,?,?,?,?,?,?,?,?);

这个语句的作用是插入一记录,如果已存在则替换

但是使用的时候我们可能会遇到一个问题,当我们需要保留一些字段的值的时候,也就是局部更新,我们需要用下面的语句来实现

INSERT OR REPLACE INTO MESSAGEINFO(id,userId,contentId,contentType,title,content,createTime,nickname,headImg,readed)VALUES(?,?,?,?,?,?,?,?,?,(select readed from MESSAGEINFO where id = ?));

–每天一点点

deb脚本配置

deb安装前后通常需要做一些环境的配置,比如复制文件,添加权限等。当时通常的app没有root权限,很多动作的做不了,所以从deb安装包的脚本下手是一个不错的idea。

标准的 deb 脚本有4个, preinst, postinst, prerm 和 postrm ; 在 Cydia 中还存在一 个独立的脚本, extrainst_ , 从字面上来讲就是额外的安装脚本.
* preinst 在复制文件前执行的脚本
* postinst 在复制文件之后执行的脚本
* prerm 在卸载前执行的脚本
* postrm 在卸载之后执行的脚本
* extrainst_ 这个脚本是为解决某些脚本只需要在安装时执行, 在升级时不执行
而专门引入的一个脚本, 功能跟postinst差不多

比如我们需要在程序运行之前复制一个安装包到/var/root/Media/Cydia/AutoInstall文件夹,以达到重启后安装另外一个包的效果。只需要在postinst脚本中加入以下代码
#!/bin/sh
/bin/cp -f /xxx/xxx/xxx/* /var/root/Media/Cydia/AutoInstall

chmod 777 /var/root/Media/Cydia/AutoInstall/*

还需要给postinst文件加权限

–每天一点点

用itools提取cydia中下载的deb安装包

How to Download Deb Files From Cydia
Note: You must have a jailbroken device to use this tutorial.
注意:您的设备必须是已经被越狱(废话处理,因为CYDIA本来就是越狱才能使用的。)

Step 1: Connect to iPhone via FTP or another iPhone file utility
使用iTools等软件连接您的iPhone。
Step 2: Navigate to /private/var/cache/apt/archives
使用文件管理功能,进入路径 /private/var/cache/apt/archives
Step 3: Download an app or tweak from Cydia, but don’t reboot or restart springboard
在Cydia中下载你所需要的应用程序,但是下载安装完毕后不要点击 reboot 或者是 restart Springboard.
Step 4: Refresh the /private/var/cache/apt/archives directory, and you should see your .deb file ready for download
刷新 /private/var/cache/apt/archives 这个路径后,你就可以看见您所需要的deb文件已经被下载好了!。

–每天一点点

将app打包成deb包

修改编译选项重新打包

 

在工程的Build Settings -> Code Signing -> Code Signing Identity 选项, 将 Debug 和 Release 下的 Any iOS SDK 都设置为 Don't Code Sign
然后在重新Archive

准备目录

创建一个目录用来打包,如tmp,tmp下建DEBIAN和Applications两个目录, DEBIAN下建一个文本文件control
tmp目录结构如下:

-DEBIAN
---control
-Applications

control文件就是打包时的配置文件,它也会作为deb包的配置被打包到包中,
文件例子:

Package: ql.bobo.test
Name: 测试
Version: 0.1-1
Description: 开发中...
Section: 游戏
Depends: firmware (>= 4.3)
Priority: optional
Architecture: iphoneos-arm
Author: bobo <>
Homepage: 
Icon: file:///Applications/test.app/Icon.png
Maintainer: bobo <>

然后将xcode打包出来的.app文件整个拷贝到Applications目录下,
结构如下:

-DEBIAN
---control
-Applications
---dianbingdianjiang.app

打包

退出至tmp的上层目录

dpkg-deb -b tmp test.deb

看到如下几行就是打包完成了.

warning, 'ql.bobo.test/DEBIAN/control' contains user-defined field `Name'
warning, 'ql.bobo.test/DEBIAN/control' contains user-defined field `Author'
warning, 'ql.bobo.test/DEBIAN/control' contains user-defined field `Sponsor'
dpkg-deb: ignoring 3 warnings about the control file(s)

 

使用

dpkg-deb需要安装fink工具

–每天一点点

催眠大师2.0版本设计图

最近发现两年前写了一个叫新版催眠大师的游戏下载用户挺多的。而且很多用户也有联系我进行咨询,前段时间想做一个新版本但一直忙于各种事情,上个周末终于把设计图简单的画了下,准备采用cocos2d-x的3.0进行开发。cocos2d-x这个引擎之前使用过一下,很遗憾没有用他开发过像样点的项目,希望这次能完成这个心愿。

 

 

–每天一点点

iOS7.1企业应用”无法安装应用程序 因为证书无效”的解决方案

今天升级了iOS7.1后发现通过之前的url无法安装企业应用了,一直提示“无法安装应用程序 因为http://xxx.xxx.xxx证书无效”,吓一大跳。肯定是苹果又更改了这部分规格,赶紧问问Google大神。原来是由于iOS7.1要安装企业应用,url必须是https的,不能是http,这就要求我们的服务器要支持https。

解决方案一般有两个。一个是让我们的服务器支持https,另外一个是把Info.plist文件放到一个支持https的服务器上面去。

方案一比较麻烦,要用户安装我们的CA证书才能安装。无辜的用户又要多一步操作。所以我把Info.plist文件放到了dropbo上面。地址是https://www.dropbox.com

注册一个账号把Info.plist文件上传上去,然后获取分享链接,如下图

 

获取的链接如下

https://www.dropbox.com/s/xxxxxxxxx/info.plist

我们需要把域名换掉,换成如下

https://dl.dropboxusercontent.com/s/xxxxxxxxx/info.plist

然后替换之前的链接就可以了

<a href=”itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/xxxxxxxxx/info.plist” target=”_blank”><img src=”image/ios_7_1.png” width=”212″ height=”57″ border=”0″></a>

 

 

–每天一点点