Android技术——数据库(三):SQLite数据库应用实例

本文的实例是基于《Android系统回顾(八):网络通信(一)》中的项目添加而来的。

实现的效果是:在PostActivity里,当美女们加载完成之后,把她们的信息异步地写入数据库中。

/MeiNvLiuLanQi/src/com/example/meinvliulanqi/basic_service/IDBOperate.java文件:

package com.example.meinvliulanqi.basic_service;

import android.database.sqlite.SQLiteDatabase;

public interface IDBOperate

{

public boolean doOperate(SQLiteDatabase db);

public void onDBOpreaterFinished(Boolean result);

}

/MeiNvLiuLanQi/src/com/example/meinvliulanqi/basic_service/MeinvDbHelper.java文件:

package com.example.meinvliulanqi.basic_service;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

public class MeinvDbHelper extends SQLiteOpenHelper

{

// 数据库的基本参数

public static final String  DB_NAME             = "meinvDB.db";

// --------------------------------------------------------------

// 数据表的基本描述,表名和表中的列名

public static final String  DB_TABLE_MEINV_INFO = "tab_meinv_info";

public static final String  KEY_ID              = "id";

public static final String  KEY_HEAD_PATH       = "head_path";

public static final String  KEY_NAME            = "name";

public static final String  KEY_BIRTHDAY        = "birthday";

public static final String  KEY_ADDRESS         = "address";

public static final String  KEY_STATURE         = "stature";

public static final String  KEY_WEIGHT          = "weight";

public static final String  KEY_BUST            = "bust";

public static final String  KEY_WAISTLINE       = "waistline";

public static final String  KEY_HIP             = "hip";

// --------------------------------------------------------------

// 创建数据库的SQL语句

private static final String DATABASE_CREATE     = String.format(

"create table %s (%s integer primary key autoincrement, %s text not null, %s text not null, %s text not null, %s text not null, %s float not null, %s float not null, %s text not null, %s float not
null, %s float not null)",

DB_TABLE_MEINV_INFO,

KEY_ID,

KEY_HEAD_PATH,

KEY_NAME,

KEY_BIRTHDAY,

KEY_ADDRESS,

KEY_STATURE,

KEY_WEIGHT,

KEY_BUST,

KEY_WAISTLINE,

KEY_HIP);

// 定义构造函数

public MeinvDbHelper(Context context, int version)

{

// SQLiteOpenHelper(Context context, String name, CursorFactory factory,

// int version)

// 第一个参数:创建数据库的上下文,比如,如果传入的是com.example.meinvliulanqi.ui.MainActivity的实例,那数据库文件在用户手机中的实际存储位置将是:/data/data/com.example.meinvliulanqi.ui/databases

// 第二个参数:欲创建的数据库的名称,比如名称是meinvDB.db,那么在数据库成功创建完成之后/data/data/com.example.meinvliulanqi.ui/databases路径下就会有meinvDB.db、meinvDB.db-journal两个文件,一个是数据库文件,另一个是日志文件

// 第三、第四个参数:CursorFactory用于产生Cursor对象,version为创建数据库的版本

super(context, DB_NAME, null, version);

}

// 重写onCreate函数,当磁盘上不存在数据库时负责创建新数据库

@Override

public void onCreate(SQLiteDatabase arg0)

{

arg0.execSQL(DATABASE_CREATE);

}

// 重写onUpgrade函数,当存在数据库版本不一致时,升级磁盘上的数据库到当前版本,覆盖安装后可能会出现这种情况

@Override

public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2)

{

arg0.execSQL("DROP TABLE IF EXIST " + DB_TABLE_MEINV_INFO);

onCreate(arg0);

}

}

/MeiNvLiuLanQi/src/com/example/meinvliulanqi/basic_service/Task_operate_db.java文件:

package com.example.meinvliulanqi.basic_service;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.os.AsyncTask;

import android.util.Log;

public class Task_operate_db extends AsyncTask<Void, Integer, Boolean>

{

private Context    context;

private int        db_version;

private IDBOperate operate;

public Task_operate_db(Context _con, int _ver, IDBOperate _ope)

{

context = _con;

db_version = _ver;

operate = _ope;

}

@Override

protected Boolean doInBackground(Void... para)

{

MeinvDbHelper helper = new MeinvDbHelper(context, db_version);

SQLiteDatabase db = null;

try

{

db = helper.getWritableDatabase();

return operate.doOperate(db);

} catch (Exception e)

{

Log.e("thinking-------", e.getMessage());

return false;

}

}

@Override

protected void onProgressUpdate(Integer... values)

{

}

@Override

protected void onPostExecute(Boolean result)

{

this.operate.onDBOpreaterFinished(result);

}

}

/MeiNvLiuLanQi/src/com/example/meinvliulanqi/ui/PostActivity.java文件:

package com.example.meinvliulanqi.ui;

import org.json.JSONArray;

import org.json.JSONException;

import com.example.meinvliulanqi.basic_service.IDBOperate;

import com.example.meinvliulanqi.basic_service.IGetdata;

import com.example.meinvliulanqi.basic_service.MeinvDbHelper;

import com.example.meinvliulanqi.basic_service.Task_getimgs;

import com.example.meinvliulanqi.basic_service.Task_operate_db;

import com.example.meinvliulanqi.basic_service.Task_postdata;

import android.app.Activity;

import android.content.ContentValues;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.graphics.Bitmap;

import android.os.Bundle;

import android.util.Log;

import android.widget.GridView;

public class PostActivity extends Activity implements IGetdata, IDBOperate

{

private MeinvBaseAdapter ada;

private GridView         gid_meinv;

private JSONArray        meinvs;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_post);

Task_postdata task = new Task_postdata(this);

task.execute(new String[] {

"http://192.168.10.111:8011/MeinvInfo.ashx",

"{\"method\":\"get_meinv\",\"check_num\":1001}" });

}

@Override

public void onGetInfoData(String info)

{

try

{

meinvs = new JSONArray(info);

initUIInfo();

} catch (JSONException e)

{

Log.e("thinking-------", e.getMessage());

}

}

private void initUIInfo()

{

gid_meinv = (GridView) findViewById(R.id.gid_meinv_post);

ada = new MeinvBaseAdapter(meinvs, new Bitmap[meinvs.length()], this);

gid_meinv.setAdapter(ada);

String[][] img_infos = new String[meinvs.length()][2];

for (int i = 0; i < img_infos.length; i++)

{

try

{

img_infos[i][0] = meinvs.getJSONObject(i)

.getString("photoPath");

} catch (JSONException e)

{

img_infos[i][0] = "";

Log.e("thinking-------", e.getMessage());

}

img_infos[i][1] = i + "";

}

Task_getimgs task = new Task_getimgs(this);

task.execute(img_infos);

Task_operate_db task_db = new Task_operate_db(this, 1, this);

task_db.execute();

}

@Override

public void onGetImgData(Bitmap[] img)

{

ada.setImgs(img);

}

@Override

public boolean doOperate(SQLiteDatabase db)

{

try

{

ContentValues newValues = new ContentValues();

for (int i = 0; i < meinvs.length(); i++)

{

newValues.put(MeinvDbHelper.KEY_NAME, meinvs.getJSONObject(i)

.getString("name"));

newValues.put(MeinvDbHelper.KEY_ADDRESS, meinvs

.getJSONObject(i).getString("address"));

newValues.put(MeinvDbHelper.KEY_HEAD_PATH,

"/sdcard/meinvliulanqi/" + i + ".jpg");

newValues.put(MeinvDbHelper.KEY_BUST, meinvs.getJSONObject(i)

.getString("bust"));

newValues.put(MeinvDbHelper.KEY_HIP, meinvs.getJSONObject(i)

.getDouble("hip"));

newValues.put(MeinvDbHelper.KEY_BIRTHDAY,

meinvs.getJSONObject(i).getString("birthday"));

newValues.put(MeinvDbHelper.KEY_STATURE, meinvs

.getJSONObject(i).getDouble("stature"));

newValues.put(MeinvDbHelper.KEY_WEIGHT, meinvs.getJSONObject(i)

.getDouble("weight"));

newValues.put(MeinvDbHelper.KEY_WAISTLINE, meinvs

.getJSONObject(i).getDouble("waistline"));

db.insert(MeinvDbHelper.DB_TABLE_MEINV_INFO, null, newValues);

}

return true;

} catch (Exception e)

{

Log.e("thinking-------", e.getMessage());

return false;

}

}

@Override

public void onDBOpreaterFinished(Boolean result)

{

// TODO Auto-generated method stub

}

}

实现的效果:

当页面加载完毕之后,adb在/data/data/com.example.meinvliulanqi.ui/databases路径下可以看到:

把这个meinvDB.db文件拷出来,用Sqlite3工具查看可以看到:

结果表明数据已经写入数据库了。

时间: 2024-10-12 10:37:51

Android技术——数据库(三):SQLite数据库应用实例的相关文章

Android总结三SQLite数据库

一.SQLite数据库 1.SQLite数据库的特点 安卓手机自带, 小巧, 适合在手机中使用 不区分数据类型(主键除外) SQL语句和MySQL几乎相同 SQLite不使用JDBC连接, 使用的是Android自有的API 每个数据库对应一个文件 2.创建数据库 定义类继承SQLiteOpenHelper, 实现onCreate(), onUpgrade() 创建该类对象, 调用getWritableDatabse()或者getReadableDatabse() 情况1: 数据库文件不存在,

Android——使用SQLiteDatabase操作SQLite数据库

除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n).char(n).decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型. SQLite最大的特点是

Android开发之通过Android的API对sqlite数据库的操作以及数据库事务的练习

一.通过Android的API对sqlite数据库的操作 通过已有的ContentValues类,实例一个对象value来调用其中内部的方法来操作sqlite数据库 代码: package com.example.databasedemo; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sql

Android 查看和管理sqlite数据库

在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库位于/data/data/项目包/databases中. 使用DDMS导出sqlite数据库. 1.首先打开android项目的调试模式,然后找到显示DDMS: 选择DDMS 2.切换到DDMS,显示File Explorer窗口,找到/data/data/ 然后找到程序包的文件夹,打开databases,就能看到sqlite数据库文件了.选择将

Android学习笔记(42):SQLite数据库

(1)SQLite数据库 先简单介绍一下SQLite数据库: 2000年由D.Richard Hipp发布. 是一款轻型.开源嵌入式关系数据库,占用资源非常低.目前用于很多嵌入式产品中,在嵌入式设备中,SQLite可能只需要几百K的内存就够了. 与Mysql.PostgreSQL这两款开源世界著名的数据库管理系统相比,它的处理速度更快. 在Android平台下,除了可以在Android程序中操作SQLite数据库之外,还可以在命令行模式下进行各种数据库的操作,包括表的各种操作,对数据的增加.删除

通过adb shell操作android真机的SQLite数据库

要通过命令行直接操作android真机上的SQLite数据库,可以直接通过adb shell来完成,不过,前提是必须获得root权限. 另外,android系统其实就是linux的shell,这个应该大家都知道,不过一般情况下,在/system/xbin/目录下, 没有sqlite3命令,需要手动copy一个进去,通常情况下,需要两个文件 sqlite3.libncurses.so 解压后两个文件都有了,比如解压到:~/Downloads/sqlite3/ 然后就是通过下面的这些个命令,一步一步

Android技术8:SQLite数据升级

由于应用程序的升级,往往伴随着数据库的升级,数据库升级一般设计表的增加与删除,表添加删除字段,数据的备份等操作. 1.数据库升级 我们都通过继承SQLiteOpenHelper类,实现对数据库的操作和版本升级等.版本升级有关方法 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion); 当版本号大于当前数据库版本号,会调用onUpgrade方法. 2.演示数据库升级 对于表的增删相对比较简单,下面演示添加字段. 2.1原始数据库s

请问Typecho Mysql 数据库和Sqlite数据库我该如何选择。

纠结如我,又纠结了,请大家帮忙看一下我该如何选择.就一个没有文章的博客.一直用VPS太浪费,现在换成了虚拟主机.但是虚拟主机的MYSQL数据库限制连接数30个,我不懂这是个什么概念,但是我觉得30太少了. 于是我就想用sqlite这个数据库.他在本机上.他们就限制不到了. 但是群里问了几次都不推荐这个.所以我就纠结了. 请帮忙选择一下.最好能告诉我为什么 请问Typecho Mysql 数据库和Sqlite数据库我该如何选择. >> mysql 这个答案描述的挺清楚的:http://www.g

cocos2d-x 2.1 Win32+Android开发中的sqlite数据库加密技术探讨

注意:本博客转移自本人约一年前的ITPUB博客文章,为的是便于学员参考之用. 很显然,cocos2d-x编程中只了解基本的sqlite数据库操作技术只是一个开头,真正把此数据库数据应用于实际中不使用一定的加密及解密技术几乎是不行的. 这个问题尽早会来到我面前,这不?现在就来了.一开始,自然想使用最省工的了:但是,这样的好事并不多,极少极少...... 于是,我先搜罗了一些现成的文章拿来一阅. 1,Sqlite数据库加密解密 SRC: http://blog.sina.com.cn/s/blog_

Android数据存储之SQLite 数据库学习

Android提供了五种存取数据的方式 (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQLite数据库,存放各种数据,是一个轻量级的嵌入式数据库 (3) File文件,通过读取写入方式生成文件存放数据 (4) ContentProvider,主要用于让其他应用程序使用保存的数据 (5)通过网络获取数据和写入数据到网络存储空间 SQLite 数据库介绍 SQLite 是一款轻量级的关系型数据库,它的运算速度非常快,占