SQLite是Android自带的一款轻量级的关系型数据库,它的运算速度非常快,且占用很少的资源,因而很适合在移动设备上使用。对于不熟悉连接外部数据库和添加删除数据的Android开发入门者来说,SQLite比一般的数据库要简单得多,不用设置用户名和密码就可以使用。
1. 安装
在使用之前需要前往AndroidSDK\platform-tools目录下找到sqlite3.exe文件,双击可进入Dos界面。
将上述platform-tools所在目录添加到环境变量配置中Path下,即可完成完成配置。
验证成功安装的方法:win+R输入cmd记入Dos界面,输入SQLite3,若出现以下界面就表示已成功安装。
2. 创建数据库
要使用SQLite,就必须谈到SQLiteOpenHelper这个类了,它是一个抽象类,我们需要创建一个自己的主类去继承它。SQLiteOpenHelper中有两个抽象方法,分别是OnCreate()和onUpgrade(),我们需要在自己的类下重写这两个方法。
同时SQLiteOpenHelper还有两个重要的实例方法:getReadableDatabase()和getWriteableDatabase()。这两个方法均可创建或打开一个现有数据库,并返回一个可对数据库进行读写操作的对象。区别在于:当数据库不可写入的时候(如磁盘空间已满),getReadableDatabase()方法返回的对象将只以只读方式打开数据库,而getWriteableDatabase()方法将出现异常。
接下来可以进行实践了,我们创建一个名为Land.db的数据库,然后在这个数据库中新建一张Land表,表中有一些自定义的列。定义列时按照SQL语句进行。对于数据类型,integer表示整型,real表示浮点型,text表示文本类型,blob表示二进制类型。
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_LAND = "create table Land ("
//primary key设置为主键,autoincrement关键字表示该列是自增长的
+ "area_id text primary key autoincrement,"
+ "flag text,"
+ "plot integer,"
+ "land_position_id text,"
+ "land_position_acreage real)";
private Context mContext;
public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super( context, name, factory, version );
mContext = context;
}
public void onCreate(SQLiteDatabase db){
//调用SQLiteDatabase的execSQL()方法执行建表语句
db.execSQL(CREATE_LAND);
//弹出一个Toast提示创建成功
Toast.makeText(mContext, "Create succeeded.", Toast.LENGTH_SHORT).show();
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
}
对应布局文件,可以自己设计一个Button,这里不多做赘述。最后修改MainAcivity(不一定是主活动,只要是与布局对应的Java均可,这里以MainActivity为例)中的代码:
public class MainActivity extends AppCompatActivity {
private DatabaseHelper dbHelper;
protected void onCreate(Bundle savedInstanceState){
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
//指定数据库名为"Land.db",版本号为1
dbHelper = new DatabaseHelper( this, "Land.db" ,null,1 );
//指定对应于布局文件夹中的Button create_database
Button createDatabase = (Button) findViewById( R.id.create_database );
//设计点击事件,点击create_database Button后弹出Toast显示创建成功
createDatabase.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
dbHelper.getWritableDatabase();
}
} );
}
}
2. 添加数据
SQLiteDatabase中提供了一个insert()方法专门用于添加数据。它接受3个参数,第一个是表名,即我们想要添加数据的表。第二个是在未指定添加数据的情况下给某些可为空的列自动赋值null,我们一般传入null即可。第三个是一个ContentValues对象,它提供了一系列的put()方法重载,用于向ContentValues中添加数据,我们只需要将表中的每个列名以及相应的待添加数据传入即可。
接下来进行实践。在layout中的activity_main.xml添加一个id为add_data,名为Add data的Button。
接着修改MainAcivity中的代码:
public class MainActivity extends AppCompatActivity {
private DatabaseHelper dbHelper;
protected void onCreate(Bundle savedInstanceState){
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
dbHelper = new DatabaseHelper( this, "Land.db" ,null,2);
Button createDatabase = (Button) findViewById( R.id.create_database );
Button addData = (Button) findViewById( R.id.add_data );
createDatabase.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
dbHelper.getWritableDatabase();
}
} );
addData.setOnClickListener( new View.OnClickListener(){
@Override
public void onClick(View v){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
//添加第一条数据
values.put("area_id","A");
values.put("flag","A1");
values.put("plot",001);
values.put("land_position_id","A1001");
values.put("land_position_acreage",0.5);
db.insert( "Land",null,values ); //插入第一条数据
values.clear();
//添加第二条数据
values.put("area_id","A");
values.put("flag","A1");
values.put("plot",002);
values.put("land_position_id","A1002");
values.put("land_position_acreage",0.4);
db.insert( "Land",null,values ); //插入第二条数据
}
} );
}
}
在添加数据按钮的点击事件里,我们先获取了SQLiteDatabase对象,然后使用ContentValues来对要添加的数据进行组装。