sql server数据库移植到安卓sqlite使用

由于项目需求,要将原来的sql server数据库移植到安卓本地,于是尝试了一些办法将数据库进行导入导出。

1、导出为sql文件
sql server数据库移植到安卓sqlite使用_第1张图片

sql server数据库移植到安卓sqlite使用_第2张图片
sql server数据库移植到安卓sqlite使用_第3张图片
sql server数据库移植到安卓sqlite使用_第4张图片
sql server数据库移植到安卓sqlite使用_第5张图片

简单看了看导出的sql文件,前面是:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
意思是:
SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET
QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。
SQL-92 标准要求在对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE。当 SET ANSI_NULLS 为 ON 时
,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使
column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍会返回零行。
主要是对sql语句的规定。接下来都是create table 和 insert into 语句,这样就能在导入时携带数据。

2、导入sqlite数据库
方法一:使用Navicat for SQLite新建数据库,并执行sql文件
sql server数据库移植到安卓sqlite使用_第6张图片

方法二:使用SqlConverter直接进行数据库转换
下载解压后
sql server数据库移植到安卓sqlite使用_第7张图片

sql server数据库移植到安卓sqlite使用_第8张图片

3、在安卓中使用db文件
可以将db文件放在assets或者raw文件夹下,这样生成apk时不会被压缩。默认存放数据库的位置是/data/date/包名/databases/,所以还要讲db文件复制到该目录下。方法是使用文件流进行读写。
在assets目录下则使用:
InputStream is = context.getAssets().open(DB_NAME);
在raw目录下,则使用:
InputStream is = context.getResources().openRawResource(R.raw.database);

         // 检查 SQLite 数据库文件是否存在
        if (!(new File(DB_PATH + DB_NAME)).exists()) {
            // 如文件不存在,再检查一下 database 目录是否存在
            File f = new File(DB_PATH);
            // 如 database 目录不存在,新建该目录
            if (!f.exists()) {
                System.out.println("目录不存在");
                f.mkdir();
            }

            try {
                InputStream is = context.getResources().openRawResource(R.raw.bchsys); // 欲导入的数据库
                // 输出流,在指定路径下生成db文件
                OutputStream os = new FileOutputStream(DB_PATH + DB_NAME);

                // 文件写入
                byte[] buffer = new byte[1024];
                int length;
                while ((length = is.read(buffer)) > 0) {
                    os.write(buffer, 0, length);
                }

                // 关闭文件流
                os.flush();
                os.close();
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

4、访问数据库
继承SQLiteOpenHelper类,利用构造方法打开数据库。
查询例子:

 try {
            SQLiteDatabase  db = helper.getReadableDatabase();
            Cursor cursor = db.rawQuery("select * from pics where", null);
            if (null != cursor) {
                while (cursor.moveToNext()) {
                    int id = cursor.getInt(cursor.getColumnIndex("id"));
                    String result = cursor.getString(cursor.getColumnIndex("pic"));

                }
            }
            cursor.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != db) {
                db.close();
            }
        }

如果数据库中存了图片地址,而查询是需要读取图片,则将图片资源放在assets目录下,通过路径得到bitmap

        InputStream is = null;
        try {
            is = getAssets().open(imgstr);
        } catch (IOException e) {
            e.printStackTrace();
        }
        Bitmap bitmap = BitmapFactory.decodeStream(is);
        imageView.setImageBitmap(bitmap);

你可能感兴趣的:(android)