SQLite是Android自带的轻量级数据库,接口封装的很好,不会SQL的也能很好的使用。
接下来讲一下怎么创建数据库、通过adb查看数据表和数据、增删查改。
一、创建数据库
Android封装了SQLiteOpenHelper给我们操作数据库,我们要继承它,然后实现自己的操作。
public class MyDatabaseHelper extends SQLiteOpenHelper { public String CREATE_BOOK = "CREATE TABLE BOOK (" + "name char(20) NOT NULL," + "price char(10) NOT NULL" + ")"; //构造函数 public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } //如果传入的数据库不存在的话,才会调用该函数 @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); } //输入版本号比当前版本号高的时候,才会调用该函数 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
当然在控制台自己创建也可以(这个可以忽略)
在MainActivity创建数据库
public class MainActivity extends AppCompatActivity { Button create; MyDatabaseHelper helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //打开数据库 第一个参数是上下文 第二个是数据库的名字,如果没有则会创建,第三个一般为null,第四个版本号 helper = new MyDatabaseHelper(this,"Book.db",null,1); create = (Button)findViewById(R.id.create); create.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取一个可写的数据库实例,如果没有该数据库,会调用MyDatabaseHelper里面的Create方法 helper.getWritableDatabase(); } }); } }
二、通过adb查看数据库
adb在sdk文件夹下的platform-tools中,我们需要把路径配置到环境变量的path变量中。
然后在cmd输入adb,就能进入手机或者模拟器的控制台了。
进入data/data,再输入ls命令,可以看到自己的项目:
进入自己的项目,能看到自己的数据库文件夹
进入文件夹,能看到我们创建的数据库表:
然后输入sqlite3 Book.db,打开数据库,再输入.table,就能看到我们创建的表了
可以证明我们第一步创建数据库成功了。
三、插入数据
只需要获得一个数据库实例,然后通过ContentValues组装数据,然后再插入即可。
MainActivity代码,新增了insert按钮,点击添加数据:
insert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取一个可写的数据库实例 SQLiteDatabase db = helper.getWritableDatabase(); //用于组装插入的数据 ContentValues values = new ContentValues(); values.put("name","计算机组成原理"); values.put("price","100"); //插入,第一个参数为表名,第二个一般为null,第三个是我们的数据 db.insert("BOOK",null,values); //清空 values.clear(); //插入第二条数据 values.put("name","数据库原理"); values.put("price","50"); db.insert("BOOK",null,values); } });
在adb通过sql语句查看结果:
四:更新数据
原理和插入差不多:
update.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取一个可写的数据库实例 SQLiteDatabase db = helper.getWritableDatabase(); //用于组装更新的数据 ContentValues values = new ContentValues(); values.put("price","888"); //第一个参数是表名,第二个参数是数据,第三个是约束条件,对应SQL的where子句,第四个参数是占位符'?'的具体实现 相当于name = “计算机组成原理” db.update("BOOK",values,"name = ?",new String[]{"计算机组成原理"}); } });
通过adb可见,第一本书的价格已经更新到888元了
五:查询数据
query.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取一个可写的数据库实例 SQLiteDatabase db = helper.getWritableDatabase(); //调用查找方法 第一个参数为表名 第二个为列名 第三个为约束条件where 第四个为约束条件占位符的具体值 //第五个为排序的列 第六个对应having 第七个对应orderby //以下默认查询所有列,结果的集合返回到游标 Cursor cursor = db.query("BOOK",null,null,null,null,null,null,null); String temp = ""; //遍历 while(cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("name")); String price = cursor.getString(cursor.getColumnIndex("price")); temp+= name+" "+price+" "; } //关闭游标 cursor.close(); result.setText(temp); } });
运行效果:
六:删除数据
delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取一个可写的数据库实例 SQLiteDatabase db = helper.getWritableDatabase(); //表名 约束条件 db.delete("BOOK","price = ?",new String[]{"888"}); } });
先点击删除,再点击查询:
完整的MainActivity代码:
public class MainActivity extends AppCompatActivity { Button create; Button insert; Button update; Button query; Button delete; TextView result; MyDatabaseHelper helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //打开数据库 第一个参数是上下文 第二个是数据库的名字,如果没有则会创建,第三个一般为null,第四个版本号 helper = new MyDatabaseHelper(this,"Book.db",null,1); result = (TextView)findViewById(R.id.result); create = (Button)findViewById(R.id.create); insert = (Button)findViewById(R.id.insert); update = (Button)findViewById(R.id.update); query = (Button)findViewById(R.id.query); delete = (Button)findViewById(R.id.delete); create.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取一个可写的数据库实例,如果没有该数据库,会调用MyDatabaseHelper里面的Create方法 helper.getWritableDatabase(); } }); insert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取一个可写的数据库实例 SQLiteDatabase db = helper.getWritableDatabase(); //用于组装插入的数据 ContentValues values = new ContentValues(); values.put("name","计算机组成原理"); values.put("price","100"); //插入,第一个参数为表名,第二个一般为null,第三个是我们的数据 db.insert("BOOK",null,values); //清空 values.clear(); //插入第二条数据 values.put("name","数据库原理"); values.put("price","50"); db.insert("BOOK",null,values); } }); update.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取一个可写的数据库实例 SQLiteDatabase db = helper.getWritableDatabase(); //用于组装更新的数据 ContentValues values = new ContentValues(); values.put("price","888"); //第一个参数是表名,第二个参数是数据,第三个是约束条件,对应SQL的where子句,第四个参数是占位符'?'的具体实现 相当于name = “计算机组成原理” db.update("BOOK",values,"name = ?",new String[]{"计算机组成原理"}); } }); query.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取一个可写的数据库实例 SQLiteDatabase db = helper.getWritableDatabase(); //调用查找方法 第一个参数为表名 第二个为列名 第三个为约束条件where 第四个为约束条件占位符的具体值 //第五个为排序的列 第六个对应having 第七个对应orderby //以下默认查询所有列,结果的集合返回到游标 Cursor cursor = db.query("BOOK",null,null,null,null,null,null,null); String temp = ""; //遍历 while(cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("name")); String price = cursor.getString(cursor.getColumnIndex("price")); temp+= name+" "+price+" "; } //关闭游标 cursor.close(); result.setText(temp); } }); delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取一个可写的数据库实例 SQLiteDatabase db = helper.getWritableDatabase(); //表名 约束条件 db.delete("BOOK","price = ?",new String[]{"888"}); } }); } }
布局代码:
<?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.administrator.databasetest.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="查询结果" android:id="@+id/result" android:textSize="30dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginBottom="122dp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/create" android:text="创建" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/insert" android:text="添加" android:layout_below="@+id/create" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="更新" android:id="@+id/update" android:layout_below="@+id/insert" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/query" android:text="查找" android:layout_below="@+id/update" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除" android:id="@+id/delete" android:layout_below="@+id/query" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout>
SQLite基本都用法就那么多,想深入了解的可以看看官方的API,谢谢各位阅读。