android中常用的数据库,安卓中轻量级数据库SQLite的使用

安卓上集成了一个轻量级的数据库,SQLite

使用数据库有两种办法,一个是利用SQLiteDatabase对象来操作,管理数据库。

常用的用于打开一个文件对应的数据库的方法有:

openDatabase

openOrCreateDatabase

获取数据库SQLiteDatabase对象后,就可以调用以下方法来操作数据库了

execSQL、insert、update、delete、query等

另外查询query方法会返回一个Cursor对象,并且提供了以下方法来移动查询结果的记录指针

move,moveToFirst、moveToLast,moveToNext,moveToPosition,moveToPrevious

(另外操作数据库可以选择使用SQL语句,也可以使用安卓所提供的简单方法insert、update、delete、query等)

使用SQLiteDatabase进行数据库操作的步骤如下

获取SQLiteDatabase对象,它代表了与数据库的链接。

调用SQLiteDatabase的方法来执行SQL语句,execSQL

操作SQL语句的执行结果

关闭SQLiteDatabase,回收资源

附上一个示例代码(利用的是SQL语句):

package com.example.hellonotes;

import android.app.Activity;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteException;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.CursorAdapter;

import android.widget.EditText;

import android.widget.ListView;

import android.widget.SimpleCursorAdapter;

public class example extends Activity{

//创建SQLiteDatabase对象

SQLiteDatabase db;

Button bn;

ListView listView;

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//使用openDatabase等方法创建或者打开数据库,必须使用绝对路径,第二个参数是factory

db=SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()

+"/my.db3", null);

listView=(ListView)findViewById(R.id.show);

bn=(Button)findViewById(R.id.ok);

//使用匿名类作为参数

bn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

//获取用户输入

String

title=((EditText)findViewById(R.id.title)).getText().toString();

String

content=((EditText)findViewById(R.id.content)).getText().toString();

try {

//另写个方法实现插入数据库的功能

insertData(db,title,content);

//使用SQL语句实现查询该表内的所有信息

Cursor cursor=db.rawQuery("select * from news_inf",

null);

//另写的方法实现数据库的内容在listView中显示

inflateList(cursor);

} catch (SQLiteException se) {

//执行DDL创建数据表

db.execSQL("create table news_inf(_id integer"

+" primary key autoincrement,"

+" news_title varchar(50),"

+" news_content varchar(255))");

//指向insert语句插入数据

insertData(db,title,content);

//执行查询

Cursor cursor=db.rawQuery("select * from news_inf",

null);

inflateList(cursor);

}

}

});

}

private void insertData(SQLiteDatabase db,String title,String

content){

//执行插入语句

db.execSQL("insert into news_inf values(null,?,?)",new

String[]{title,content});

}

private void inflateList(Cursor cursor)

{

//填充adapter

SimpleCursorAdapter adapter=new

SimpleCursorAdapter(MainActivity.this, R.layout.line,

cursor,

new String[]{"news_title","news_content"},

new int[]{R.id.my_title,R.id.my_content},

CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

//显示数据

listView.setAdapter(adapter);

}

public void onDestroy(){

super.onDestroy();

if(db!=null&&db.isOpen())

db.close();

}

}

第二种方法就是继承SQLiteOpenHelper类开发其子类,并且通过该子类的getReadableDatabase和getWritableDatabase方法打开数据库,利用close方法关闭数据库连接。

另外提供了onCreate方法用于第一次创建数据库时候回调该方法

onUpgrade方法当数据库版本更新的时候回调该方法。

扩展子类的代码如下:

package com.example.hellonotes;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import

android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;

//完成记事本必须考虑数据库

public class NotesDB extends SQLiteOpenHelper{

//表名,加上3列

public static final String TABLE_NAME="notes";

public static final String CONTENT="content";

public static final String ID="_id";

//保存图片

public static final String PATH="path";

//视频

public static final String VIDEO="video";

//保存文本的时间

public static final String TIME="time";

public NotesDB(Context context) {

//库名,版本号1

super(context,"notes", null, 1);

// TODO Auto-generated constructor stub

}

//创建数据库

@Override

public void onCreate(SQLiteDatabase db) {

//创建表加上表名,然后第一列是ID列,并且是主键自增,Integer类型

//内容和时间为TEXT类型,并且不能为空

//每个列名和后面定义的属性直接要以空格隔开

db.execSQL("CREATE TABLE"+TABLE_NAME+"("

+ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"

+CONTENT+" TEXT NOT NULL,"

+PATH+" TEXT NOT NULL,"+VIDEO+" TEXT NOT NULL,"

+TIME+" TEXT NOT NULL");

}

//更新

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int

newVersion) {

// TODO Auto-generated method stub

}

}

当然对于扩展的子类来说,它的作用就是允许应用程序通过该工具类获取SQLiteDatabase的对象,起到管理数据库的初始化的作用,接下来的程序就可以通过SQLiteDatabase的对象对数据库进行操作了。所以利用SQLiteOpenHelper这种方法来说,最终还是要利用SQLiteDatabase的。

因此一条获取数据库对象的语句就是这么写的:

private SQLiteDatabase

dbWriter=notesDB.getWritableDatabase()

getWritableDatabase方法返回的就是一个SQLiteDatabase对象。

以下是在主活动中对数据库的操作代码:

package com.example.hellonotes;

import java.text.SimpleDateFormat;

import java.util.Date;

import android.app.Activity;

import android.content.ContentValues;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

public class MainActivity extends Activity {

//创建数据库并且添加内容,首先创建数据库对象

private NotesDB notesDB;

//添加可添加的权限

private SQLiteDatabase dbWriter;

@Override

protected void

onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

notesDB=new NotesDB(this);

//获取当前可添加的权限,写入的权限,获取数据库对象

dbWriter=notesDB.getWritableDatabase();

addDB();

}

//添加具体内容的方法

public void

addDB(){

//这里contentValues就是作为数据的打包,然后存入数据库分别的列,它的键值对和数据库的列和数据相对应

ContentValues cv=new

ContentValues();

cv.put(NotesDB.CONTENT,

"hello");

//添加时间列,获取设备的时间,单独的方法

cv.put(NotesDB.TIME,

getTime());

//调取dbwriter的插入方法,插入到数据库

dbWriter.insert(NotesDB.TABLE_NAME, null, cv);

}

public String

getTime(){

SimpleDateFormat

format=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

Date curDate=new

Date();

String

str=format.format(curDate);

return str;

}

//退出时必须关闭数据库

public void onDestroy(){

super.onDestroy();

if(db!=null&&db.isOpen())

db.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值