SQLite 使用方法详解 Android 数据存储
Posted 程序员Android
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLite 使用方法详解 Android 数据存储相关的知识,希望对你有一定的参考价值。
android 提供了对 SQLite 数据库的完全支持。应用中的任何类(不包括应用外部的类)均可按名称访问您所创建的任何数据库。如果想让自己创建的数据库供外部应用使用,请使用 ContentProvider对外提供接口。SQLite 轻量级数据库使用方法如下:
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
通过本章学习,你将掌握以下知识点
1. 继承SQLiteOpenHelper 创建数据库,数据表
2. 插入数据库数据
3. 删除数据库数据
4. 查询数据库数据
5. 修改数据库数据
6. 数据库使用Demo
1. 继承SQLiteOpenHelper 创建数据库,数据表
创建数据库表
语法
CREATE TABLE database_name.table_name(
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype,
column3 datatype,
.....
columnN datatype,
);
举例
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
3.继承SQLiteDBHelper的创建数据库、数据表
public SQLiteDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// SQLite 数据库中,字段一般不区分类型,但是主键除外,主键必须是整型
String sql = "CREATE TABLE " + TABLE_NAME + "(" + _ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" + "," + NAME
+ " CHAR(10)," + NICK_NAME + " CHAR(10))";
db.execSQL(sql);
}
4.删除数据库表
DROP TABLE IF EXITS TABLE_NAME;
2. 插入数据库数据
插入数据方法一
语法
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
举例
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );
插入数据方法二
语法
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
举例
INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );
Android 封装insert()插入数据方法三
1.语法
insert(String table, String nullColumnHack, ContentValues values)
2.举例
private SQLiteDatabase db;
db.insert(SQLiteDBHelper.TABLE_NAME, null, values);
3. 删除数据库数据
删除数据库数据方法一
1.语法
DELETE FROM table_name
WHERE [condition];
2.举例
DELETE FROM COMPANY WHERE ID = 7;
2.Android封装删除数据库数据方法二
1.语法
delete(String table, String whereClause, String[] whereArgs)
举例
private SQLiteDatabase db;
db.delete(SQLiteDBHelper.TABLE_NAME, "name=?",
new String[] { "Jack" });
4. 查询数据库数据
查询数据库方法一
1.语法
SELECT column1, column2, columnN FROM table_name;
查询表中所有数据的方法
SELECT * FROM table_name;
2.举例
//1.查询指定的列
SELECT ID, NAME, SALARY FROM COMPANY;
// 2.查询表中所有内容
SELECT * FROM COMPANY;
Android 封装查询数据库方法二
1.语法
query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy)
2.举例
private SQLiteDatabase db;
Cursor cursor = db.query(SQLiteDBHelper.TABLE_NAME, null, null, null,
null, null, null);
5. 修改数据库数据
修改数据库方法一
1.语法
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
2.举例
UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
Android update 封装修改数据库方法二
1.语法
update(String table, ContentValues values, String whereClause, String[] whereArgs)
2.举例
db.update(SQLiteDBHelper.TABLE_NAME, values, "nickname=?",
new String[] { "J" });
6. 数据库使用Demo
实现效果
数据库增删改查
创建数据库
public class SQLiteDBHelper extends SQLiteOpenHelper {
public static String DB_NAME = "person.db";
// version 必须大于1
public static int DB_VERSION = 1;
public static String TABLE_NAME = "person";
public static String _ID = "_id";
public static String NAME = "name";
public static String NICK_NAME = "nickname";
/**
* @param context
* @param name
* @param factory
* @param version
*/
public SQLiteDBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
public SQLiteDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// SQLite 数据库中,字段一般不区分类型,但是主键除外,主键必须是整型
String sql = "CREATE TABLE " + TABLE_NAME + "(" + _ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" + "," + NAME
+ " CHAR(10)," + NICK_NAME + " CHAR(10))";
db.execSQL(sql);
}
// 数据库升级的处理方法,
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion) {
// 删除老的数据表,创建新表
String dropsql = "DROP TABLE IF EXITS " +
TABLE_NAME;
db.execSQL(dropsql);
onCreate(db);
}
}
}
数据库 增、删、改、查方法
public class SQLiteMethods extends Activity {
private SQLiteDatabase db;
private ListView listView;
private SimpleCursorAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sqlite);
SQLiteDBHelper helper = new SQLiteDBHelper(this);
/****
* 需要调用以下两个方法之一,数据库和表才能真正创建出来
* 正常情况下,getReadableDatabase()和getWritableDatabase()得到结果是一样的
* 非正常情况下,比如明确要求以只读的方式打开数据库,或者磁盘满了,此时getReadableDatabase得到的是只读的数据库
* **/
db = helper.getWritableDatabase();
listView = (ListView) findViewById(R.id.lv);
adapter = new SimpleCursorAdapter(this, R.layout.listview_sqlite_tv,
null, new String[] { "name", "nickname" }, new int[] {
R.id.name, R.id.nickname },
SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
listView.setAdapter(adapter);
}
//
public void InsertSQL(View view) {
InstertDB();
QueryDB();
}
/**
* 插入数据处理方法
*/
private void InstertDB() {
ContentValues values = new ContentValues();
values.put("name", "Jack");
values.put("nickname", "J");
// 返回值:最近插入的那一行的行号
long result = db.insert(SQLiteDBHelper.TABLE_NAME, null, values);
if (result > 0) {
Toast.makeText(getApplicationContext(), "添加成功", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(getApplicationContext(), "添加失败", Toast.LENGTH_SHORT)
.show();
}
}
public void QuarySQL(View view) {
QueryDB();
}
/**
* 查询数据处理方法
*/
private void QueryDB() {
// Select * from person where name= ?
// db.rawQuery(s)
// cursor 游标--》 结果集合
// 当使用SimpleCusorAdapter 时候,cursor 这个记过里面 必须包含“_id”,这个字段
// Cursor cursor = db.query(SQLiteDBHelper.TABLE_NAME, null, "name=?",
// new String[] { "Jack" }, null, null, null);
Cursor cursor = db.query(SQLiteDBHelper.TABLE_NAME, null, null, null,
null, null, null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
String nickname = cursor.getString(cursor
.getColumnIndex("nickname"));
}
// 将一个新的cusor跟原有的custor 交换
adapter.swapCursor(cursor);
adapter.notifyDataSetChanged();
}
public void DeleteSQL(View view) {
DeleteDb();
QueryDB();
}
/**
* 删除数据
*/
private void DeleteDb() {
int result = db.delete(SQLiteDBHelper.TABLE_NAME, "name=?",
new String[] { "Jack" });
if (result > 0) {
Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(getApplicationContext(), "无Jack", Toast.LENGTH_SHORT)
.show();
}
}
public void ModifySQL(View view) {
UpdateDb();
QueryDB();
}
/**
* 修改数据
*/
private void UpdateDb() {
// update person set name="Kitty" where nickname="J"
ContentValues values = new ContentValues();
values.put("name", "Lucy");
int result = db.update(SQLiteDBHelper.TABLE_NAME, values, "nickname=?",
new String[] { "J" });
if (result > 0) {
QueryDB();
}
}
}
布局如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/insertdata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="InsertSQL"
android:text="增加数据" />
<Button
android:id="@+id/deletedata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="DeleteSQL"
android:text="删除数据" />
<Button
android:id="@+id/quarydata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="QuarySQL"
android:text="查询数据" />
<Button
android:id="@+id/modifydata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="ModifySQL"
android:text="修改数据" />
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
ListView item布局如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:id="@+id/name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="name" />
<TextView
android:id="@+id/nickname"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="nickname" />
</LinearLayout>
至此Android SQLite 数据库的使用方法已经基本结束。
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
点击阅读原文,获取更多福利
以上是关于SQLite 使用方法详解 Android 数据存储的主要内容,如果未能解决你的问题,请参考以下文章