通过SQLiteDatabase操作数据库实例:
上一节说了,操作数据库有两种形式:SQLiteDatabase、SQLiteOpenHelper;这一节就先通过SQLiteDatabase来采用CURD方法来操作数据库;
在实例中我们添加了六个按钮,分别是创建数表,插入数据,删除数据,修改数据,查询数据,删除表。
开干:
创建数据库:
db=SQLiteDatabase.openOrCreateDatabase("/data/data/com.lingdududu.db/databases/userdb.db",null);
特别注意:
在第一次创建数据库的时候是没有database目录的,因此直接执行上面的代码会有异常;
在执行这行代码之前应该判断一下是否有该目录:
File file= this.getDatabasePath("ceshi.db").getParentFile();
if(file.exists() == false){
file.mkdirs();
String path = file.getPath()+"/ceshi2.db";
}
创建数据表:
private void createTable(SQLiteDatabase db){
//创建表SQL语句
String sql="create table user(_id integer primary key autoincrement,username text,userpassword text)";
//执行SQL语句
db.execSQL(sql);
Log.i("data", "creatTable success");
}
点一下创建数据表的按钮:
可以看到数据表已经创建成功!
插入数据:
private void insert(SQLiteDatabase db){
//实例化常量值
ContentValues mcv = new ContentValues();
//添加用户名
mcv.put("username","xiaoming");
//添加密码
mcv.put("userpassword","123456");
//调用insert()方法插入数据
db.insert("user",null,mcv);
Log.i("data", "insert success");
}
每点一次插入数据,如果成功都会打印信息一次:
删除数据:
private void delete(SQLiteDatabase db) {
//删除条件
String where_cause = "_id=?";
//删除条件参数
String[] args = {String.valueOf(2)};
//执行删除
db.delete("stu_table",where_cause,args);
Log.i("data", "delete success");
}
现在点一下删除按钮,看看打印的结果
可以看到提示删除成功,再点一下查询按钮,可以看到已经从id=2开始打印,说明id=1的数据已经被删除;
修改数据
private void update(SQLiteDatabase db) {
//实例化内容值 ContentValues values = new ContentValues();
//在values中添加内容
values.put("userpassword","888666");
//修改条件
String where_cause = "_id=?";
//修改添加参数
String[] args={String.valuesOf(1)};
//修改
db.update("usertable",values,where_cause,args);
Log.i("data", "update success");
}
现在点一下更新按钮,再看打印数据:
可以看到提示更新成功,然后再点一下查询数据,可以看到id=1的那条数据的密码已经被改为888666了;
查询数据:
private void query(SQLiteDatabase db) {
//查询获得游标,此处只为简单说明问题,不设置复杂的查询条件
Cursor cursor = db.query("info", null, null, null, null, null, null);
//遍历游标
if(cursor.moveToFirst()){
do{
//获得ID
int id = cursor.getInt(0);
//获得用户名
String username = cursor.getString(1);
//获得密码
String password = cursor.getString(2);
Log.i("data","用户名:"+username+"****"+"密码:"+password+"****id:"+id);
} while(cursor.moveToNext());
}
}
我按下10次添加数据:
可以看到正常的查询到了数据
删除表:
private void drop(SQLiteDatabase db){
//删除表的SQL语句
String sql ="DROP TABLE user";
//执行SQL
db.execSQL(sql);
Log.i("data", "drop success");
}
同样,点击删除表按钮,看看是否将表删除:
已经打印出drop success;说明表已经被删除;
整体代码:
MainActivity.java
package com.example.lk.sqliteshilione;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.io.File;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button buttonCreate;
Button buttonInsert;
Button buttonDelete;
Button buttonUpdate;
Button buttonQuery;
Button buttonDrop;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonCreate = (Button) findViewById(R.id.button);
buttonInsert = (Button) findViewById(R.id.button2);
buttonDelete = (Button) findViewById(R.id.button3);
buttonUpdate = (Button) findViewById(R.id.button4);
buttonQuery = (Button) findViewById(R.id.button5);
buttonDrop = (Button) findViewById(R.id.button6);
File file= this.getDatabasePath("ceshi.db").getParentFile();
if(file.exists() == false){
file.mkdirs();
String path = file.getPath()+"/ceshi2.db";
}
db=SQLiteDatabase.openOrCreateDatabase("/data/data/com.example.lk.sqliteshilione/databases/ceshi.db",null); ;
buttonCreate.setOnClickListener(this);
buttonInsert.setOnClickListener(this);
buttonDelete.setOnClickListener(this);
buttonUpdate.setOnClickListener(this);
buttonQuery.setOnClickListener(this);
buttonDrop.setOnClickListener(this);
}
private void createTable(SQLiteDatabase db){
//创建表SQL语句
String user_sql="create table if not exists info(_id integer primary key autoincrement,username text,userpassword text)";
//执行SQL语句
db.execSQL(user_sql);
Log.i("data", "creatTable success");
}
private void insert(SQLiteDatabase db){
//实例化常量值
ContentValues mcv = new ContentValues();
//添加用户名
mcv.put("username","xiaoming");
//添加密码
mcv.put("userpassword","123456");
//调用insert()方法插入数据
db.insert("info", null, mcv);
Log.i("data", "insert success");
}
private void delete(SQLiteDatabase db) {
//删除条件
String where_cause = "_id = ?";
//删除条件参数
String[] args = {String.valueOf(1)};
//执行删除
db.delete("info", where_cause, new String[]{"1"});
Log.i("data", "delete success");
}
private void update(SQLiteDatabase db) {
//实例化内容值
ContentValues values = new ContentValues();
//在values中添加内容
values.put("userpassword","888666");
//修改条件
String where_cause = "_id = ?";
//修改添加参数
String[] args= {"1"};
//修改
db.update("info",values,where_cause,args);
Log.i("data", "update success");
}
private void query(SQLiteDatabase db) {
//查询获得游标,此处只为简单说明问题,不设置复杂的查询条件
Cursor cursor = db.query("info", null, null, null, null, null, null);
//判断游标是否为空
if (cursor.moveToFirst()) {
//遍历游标
if(cursor.moveToFirst()){
do{
//获得ID
int id = cursor.getInt(0);
//获得用户名
String username = cursor.getString(1);
//获得密码
String password = cursor.getString(2);
Log.i("data","用户名:"+username+"****"+"密码:"+password+"****id:"+id);
} while(cursor.moveToNext());
}
}
}
private void drop(SQLiteDatabase db){
//删除表的SQL语句
String sql ="DROP TABLE info";
//执行SQL
db.execSQL(sql);
Log.i("data", "drop success");
}
@Override
public void onClick(View v) {
int id = v.getId();
switch(id){
case R.id.button:
createTable(db);
break;
case R.id.button2:
insert(db);
break;
case R.id.button3:
delete(db);
break;
case R.id.button4:
update(db);
break;
case R.id.button5:
query(db);
break;
case R.id.button6:
drop(db);
break;
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.lk.sqliteshilione.MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="初次使用sqlite并创建表"
android:id="@+id/button"
android:background="#97D1E0"
android:layout_alignParentEnd="true"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="插入数据"
android:id="@+id/button2"
android:background="#97D1E0"
android:layout_below="@+id/button"
android:layout_alignParentEnd="true"
android:layout_marginTop="49dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除数据"
android:id="@+id/button3"
android:background="#97D1E0"
android:layout_below="@+id/button2"
android:layout_alignParentStart="true"
android:layout_marginTop="35dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改数据"
android:id="@+id/button4"
android:background="#97D1E0"
android:layout_below="@+id/button3"
android:layout_alignParentStart="true"
android:layout_marginTop="39dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询数据"
android:id="@+id/button5"
android:background="#97D1E0"
android:layout_above="@+id/button6"
android:layout_centerHorizontal="true"
android:layout_marginBottom="27dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除表"
android:id="@+id/button6"
android:background="#97D1E0"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"/>
</RelativeLayout>