概述
安卓上集成了一个轻量级的数据库,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();
}
}
最后
以上就是魔幻大象为你收集整理的android中常用的数据库,安卓中轻量级数据库SQLite的使用的全部内容,希望文章能够帮你解决android中常用的数据库,安卓中轻量级数据库SQLite的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复