sqlite
是嵌入式SQL数据库引擎SQLite(SQLite Embeddable SQL Database
Engine)的一个扩展。SQLite是一个实现嵌入式SQL数据库引擎小型C语言库(C
library),实现了独立的,可嵌入的,零配置的SQL数据库引擎。特性包括:事务操作是原子,一致,孤立,并且持久的,即使在系统崩溃和电源故障之
后。 零配置——不需要安装和管理。 实现了绝大多数SQL92标准。
我在多年前就关注sqlite的发展,非常看好sqlite的前景,因为在移动,嵌入式的应用里面,sqlite具有非常好的特性来满足需求.
早在symbian 9.0 之前,openc 出来后,我就研究sqlite到symbian的移植.后来symbian9.3 nokia就已经集成了sqlite.
至今j2me还不支持sqlite,可以说是个遗憾.
现在我们来看看android sqlitedatabase 包里面的关键api
-
static
SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)
-
打开数据库
-
-
Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
-
执行查询SQL
-
-
void
execSQL(String sql)
-
执行非查询sql
sdk 1.0 关于cursor和sqlite的相关api对于前面的版本改变很多.
我觉得关键是没了query(String sql)
这个简单的方法了.很不爽.
不过如果你对新的query方法了解深入点,发现其实也就一样.
我们来看2个例子
-
-
String col[] = {
"type"
,
"name"
};
-
Cursor c =db.query(
"sqlite_master"
, col,
"name='colaconfig'"
,
null
,
null
,
null
,
null
);
-
int
n=c.getCount();
-
-
-
String col2[] = {
"fee"
,
"desc"
};
-
Cursor c2 =db.query(
"acctitem a,bills b"
, col,
"a.id=b.id"
,
null
,
null
,
null
,
null
);
-
int
n2=c2.getCount();
-
Log.v(
"cola"
,
"c2.getCount="
+n2+
""
);
-
-
c2.moveToFirst();
-
int
k = 0;
-
while
(!c2.isAfterLast()){
-
String ss = c2.getString(0) +
", "
+ c2.getString(1);
-
c2.moveToNext();
-
-
Log.v(
"cola"
,
"ss="
+ss+
""
);
-
}
现在来看看我们如何在这个理财工具里面应用它.
我们需要在程序的第一次启动时,创建数据库,然后把基本的表创建好,并且初始化好账目表.
对于上一篇中的initapp方法 ,我们需要改造成
-
public
void
initApp(){
-
BilldbHelper billdb=
new
BilldbHelper(
this
);
-
billdb.FirstStart();
-
billdb.close();
-
-
}
下面我们给出BilldbHelper.java 代码
-
package com.cola.ui;
-
-
import android.content.Context;
-
import android.database.Cursor;
-
import android.database.sqlite.SQLiteDatabase;
-
import android.util.Log;
-
-
-
-
-
-
public
class
BilldbHelper {
-
-
private
static
final String TAG =
"Cola_BilldbHelper"
;
-
-
private
static
final String DATABASE_NAME =
"cola.db"
;
-
-
SQLiteDatabase db;
-
Context context;
-
-
BilldbHelper(Context _context) {
-
context=_context;
-
db=context.openOrCreateDatabase(DATABASE_NAME, 0,
null
);
-
Log.v(TAG,
"db path="
+db.getPath());
-
}
-
-
public
void
CreateTable_acctitem() {
-
try
{
-
db.execSQL(
"CREATE TABLE acctitem ("
-
+
"ID INTEGER PRIMARY KEY,"
-
+
"PID integer,"
-
+
"NAME TEXT,"
-
+
"TYPE INTEGER"
-
+
");"
);
-
Log.v(
"cola"
,
"Create Table acctitem ok"
);
-
}
catch
(Exception e){
-
Log.v(
"cola"
,
"Create Table acctitem err,table exists."
);
-
}
-
}
-
-
public
void
CreateTable_bills() {
-
try
{
-
db.execSQL(
"CREATE TABLE bills ("
-
+
"ID INTEGER PRIMARY KEY,"
-
+
"fee integer,"
-
+
"userid integer,"
-
+
"sdate TEXT,"
-
+
"stime TEXT,"
-
+
"desc TEXT"
-
+
");"
);
-
Log.v(
"cola"
,
"Create Table acctitem ok"
);
-
}
catch
(Exception e){
-
Log.v(
"cola"
,
"Create Table acctitem err,table exists."
);
-
}
-
}
-
-
public
void
CreateTable_colaconfig() {
-
try
{
-
db.execSQL(
"CREATE TABLE colaconfig ("
-
+
"ID INTEGER PRIMARY KEY,"
-
+
"NAME TEXT"
-
+
");"
);
-
Log.v(
"cola"
,
"Create Table colaconfig ok"
);
-
}
catch
(Exception e){
-
Log.v(
"cola"
,
"Create Table acctitem err,table exists."
);
-
}
-
}
-
-
public
void
InitAcctitem() {
-
-
db.execSQL(
"insert into acctitem values (100,0,'收入',0)"
);
-
db.execSQL(
"insert into acctitem values (100100,100,'工资',0)"
);
-
db.execSQL(
"insert into acctitem values (200,0,'支出',1)"
);
-
db.execSQL(
"insert into acctitem values (200100,200,'生活用品',1)"
);
-
db.execSQL(
"insert into acctitem values (200101,200,'水电煤气费',1)"
);
-
db.execSQL(
"insert into acctitem values (200103,200,'汽油费',1)"
);
-
Log.v(
"cola"
,
"insert into ok"
);
-
-
}
-
-
-
public
void
QueryTable_acctitem(){
-
-
}
-
-
public
void
FirstStart(){
-
-
try
{
-
String col[] = {
"type"
,
"name"
};
-
Cursor c =db.query(
"sqlite_master"
, col,
"name='colaconfig'"
,
null
,
null
,
null
,
null
);
-
int
n=c.getCount();
-
if
(c.getCount()==0){
-
CreateTable_acctitem();
-
CreateTable_colaconfig();
-
CreateTable_bills();
-
InitAcctitem();
-
-
}
-
-
Log.v(
"cola"
,
"c.getCount="
+n+
""
);
-
-
-
-
}
catch
(Exception e){
-
Log.v(
"cola"
,
"e="
+e.getMessage());
-
}
-
-
}
-
-
public
void
close(){
-
db.close();
-
}
-
-
-
-
}
-
分享到:
相关推荐
在Android开发中,SQLite是一个非常重要的组件,它作为一个轻量级的...对于个人理财工具这样的应用,初始化数据可能包括预设的账户类型、预算类别或者示例账单,确保用户在初次使用时即可开始记录和管理财务状况。
总之,实现Android个人理财工具的账单页面涉及数据库设计、界面布局和数据适配器的使用。通过精心设计和代码实现,用户可以方便地添加和管理他们的财务记录,从而提高个人财务管理的效率。在后续的部分,开发者可能...
在安卓程序开发中,启动时的初始化是一个至关重要的环节,它涉及到应用的生命周期管理、资源加载、数据预处理等多个方面。下面将详细讲解这个过程。 首先,安卓应用程序的启动流程通常从`AndroidManifest.xml`文件...
App Startup 是 AndroidX 提供的一个轻量级框架,用于在应用程序启动时优雅地管理组件的初始化工作。这个框架的主要目的是简化初始化代码,提高性能,并确保初始化顺序的一致性。以下是对 App Startup 框架的详细...
在这个“Android应用小实例--炫酷计时器”中,我们将深入探讨如何在Android应用中创建并定制一个功能丰富的计时器。 计时器组件在Android SDK中是`android.widget.Chronometer`类,它类似于一个倒计时定时器,但...
初始化完成后,可以调用`recognize()`方法对图像进行识别。 3. 图像预处理: 在识别前,通常需要对图像进行预处理,包括灰度化、二值化、噪声去除等,以提高识别准确率。这些步骤可以通过OpenCV等图像处理库实现,...
ORA-01033错误的全称是“ORA-01033: ORACLE 正在初始化或关闭”,它表明Oracle实例可能没有正确启动或关闭,导致后续的操作无法正常进行。 #### 错误原因分析 ORA-01033错误出现的原因可能有多种,包括但不限于...
然而,当用户在app完全关闭的状态下点击推送通知时,可能会遇到应用没有正确初始化的问题,导致通知的处理出现问题。这个问题涉及到Android的生命周期管理、服务、广播接收器以及通知的点击处理等多个方面。 首先,...
存储和检索本地数据时,SQLite是常用的选择。实例源码会教授如何创建数据库,执行SQL查询,以及如何使用ContentProvider进行数据共享。 9. **网络编程**: 使用HttpURLConnection、OkHttp或者Volley进行网络请求...
3. **初始化Realm**:在应用程序启动时,需要初始化Realm配置,并设置数据存储位置。 RealmAssetHelper就是为了解决这个初始化过程中的一个特定问题。 4. **使用Realm**:通过Realm实例进行数据读写操作。可以创建、...
轻量的 Android SQLite 数据库工具集合, 适合用SQLite做一些数据存储的项目. 根据Java实体自动生成数据库表. 不需要书写任何SQL语句即可实现对数据库的 创表 增 删 查 改 分页 操作. 所有的操作方法都是静态的...
Android串口开发(android-serialport-api开发)工程实例。SerialPortUtil里面有我常用的转换工具(16进制字符串转二进制字符串并补位、二进制字符串转16进制字符串并补位)
1. onCreate(): 当Service首次创建时调用,用于初始化工作。 2. onStartCommand(): 当通过startService()方法启动Service时调用,返回一个int值表示Service的启动策略。 3. onBind(): 当其他组件(如Activity)通过...
4. 配置AVD(Android Virtual Device):通过AVD Manager创建模拟器实例,选择设备配置、系统镜像和硬件选项,以便在Windows上运行Android应用。 三、使用Android SDK进行开发 1. 创建项目:使用Android Studio,...
在`SplashActivity`的`onCreate()`方法中,启动后台任务,例如初始化数据、检查更新等。同时,设置一个合理的延时时间,确保用户能看到启动界面,但又不会过长导致等待感。 ```java new Handler().postDelayed(new...
Android蓝牙初始化涉及多个层次的处理,从驱动层、框架层到应用层都有相应的组件和接口参与整个流程。在深入解析Android蓝牙初始化代码之前,先来了解一下蓝牙的整体架构。 蓝牙整体架构包括蓝牙系统apk、JNI、...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
android 使用服务读取串口数据实例,读取的数据实时写到txt文本。串口读写的库的地址:https://code.google.com/p/android-serialport-api/。我的博客:http://blog.csdn.net/qq_16064871。
在Android开发中,判断应用是否第一次启动是一个常见的需求,这通常用于执行一些初始化操作,比如引导界面、数据初始化或者设置默认值。以下是如何实现这一功能的详细步骤和相关知识点: 一、SharedPreferences ...
《Android实例开发完全手册》是一本深度探讨Android应用开发的实战型书籍,旨在通过丰富的实例帮助读者掌握Android开发的核心技术和实践技巧。这本书涵盖了从基础到高级的各个方面,为开发者提供了全面的学习路径。 ...