sqlite 32位和64位数据库语句识别的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlite 32位和64位数据库语句识别的区别相关的知识,希望对你有一定的参考价值。

  项目中用到了sqlite数据库,在32位Win7系统下运行良好,但是放到64为系统上执行到调用sqlite那段代码时程序报错了。
  通过分析发现sqlite对应不同的操作系统有不同的版本,也就是说在64为操作系统上要运行64位的sqlite。
  那程序要兼容32位和64位系统怎么办呢?
  首先想到的办法是判断当前的操作系统,如果是32位就加载32位的sqlite否则加载64位的sqlite。
  但是这个办法过于麻烦,有没有简单一点的方法呢?

  在IDE中,如:VS2008中将项目的目标平台改为x86即可,这时程序即可兼容64位操作系统了。
参考技术A SQLite官方最新的ado.net provider是同时支持x86和x64方式的(nuget上的System.Data.SQLite或者System.Data.SQLite.Core),这里面的System.Data.SQLite.dll是Any CPU的,所以你的ABC.DLL也不需要分两种了,一样使用Any CPU方式就能同时支持两种环境了。
如果使用上面的nuget包,它会自动在编译的时候copy依赖的两种SQLite.Interop.dll到bin目录。
运行时System.Data.SQLite.dll默认会根据环境自动选择合适的SQLite.Interop.dll加载。

Android--SQLite应用

下载地址:http://www.sqlite.org/download.html

教程地址:http://www.runoob.com/sqlite/sqlite-tutorial.html

1、在Windows安装SQLite,进行测试。

参考博客:Windows 上如何安装Sqlite

将sqlite3.def、sqlite3.dll与sqlite3.exe复制到D:\\sqlite

在CMD命令行中创建数据库,如图方法:

技术分享

参考博客:SQLite3创建数据库的方法

 

SQLite语句测试,如下图:

技术分享

 

SQLite分页查询方法

参考博客:Android SQLite分页查询的三种方法

order by 与 limit同用注意事项

参考博客:

同时使用order by和limit有时候返回错误的结果集的奇怪问题
http://bbs.chinaunix.net/thread-1276235-1-1.html
(出处: http://bbs.chinaunix.net/)

 

2、Android 使用API

参考博客: Android中SQLite应用详解

注:必须添加SD卡创建与删除文件权限

    <!-- 在SDCard中创建与删除文件权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

    <!-- 向SD卡写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

 

初始化数据库表代码:

    /**
     * 初始化数据库表
     */
    private void InitTable(){
        db = openOrCreateDatabase("db.db", Context.MODE_PRIVATE, null);
        Cursor cursor = db.rawQuery(SqlStatement.getInitStr(),null);
        boolean result = false;
        if(cursor.moveToNext()){
            int count = cursor.getInt(0);
            if(count>0){
                result = true;
            }
        }
        cursor.close();
        if(!result){//如果错误,创建表
            db.execSQL(SqlStatement.getCreateStr());
        }
    }

 java字符串格式化

参考博客: JAVA字符串格式化-String.format()的使用

 String.xml中的字符串不能含有 

SQLite查询数据方法,如下:

        String limit = String.valueOf(this.mPageSize);
        String sql =SqlStatement.getSearchStr(goods,limit,offset);
        Cursor cursor = db.rawQuery(sql,null);
        this.mDataList = new ArrayList<DataItem>();//初始化列表
        while(cursor.moveToNext()){
            int id = cursor.getInt(cursor.getColumnIndex("ID"));
            String itemName = cursor.getString(cursor.getColumnIndex("Goods"));
            String price = cursor.getString(cursor.getColumnIndex("Price"));
            DataItem item = new DataItem(id,itemName, price);
            this.mDataList.add(item);
        }
        cursor.close();

 



以上是关于sqlite 32位和64位数据库语句识别的区别的主要内容,如果未能解决你的问题,请参考以下文章

32位和64位系统区别及int字节数

C#如何使用SQLite数据库兼容32位,64位系统

32位和64位有啥区别 32位和64位区别都有哪些

32位和64位系统的区别

navicat for mysql 64位和32位区别,win7 64位下用32位和64位有区别吗??

电脑32位和64位有啥区别 电脑32位和64位的区别