Android中sqlite的基本增删查改用法
sqlite是Android中内置的轻型数据库,可以使用sql命令,是一种完善的,轻型的数据库。
在Android中,每个应用程序都可以有自己的数据库实例,默认情况下是只能被自己访问的。
数据库存放在Android设备的/data/data/
(1)创建数据库;
(2)打开数据库;
(3)创建数据库表;
(4)创建数据集的插入接口;
(5)创建数据集的查询接口;
(6)关闭数据库。close()。
下面说说使用方法。
首先创建一个MyDatebasehelper类,继承SQLiteOpenHelper.如下:
package mountain_hua.learn_sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.widget.Toast;/** * Created by dhs on 2018/6/4. */public class MyDatabaseHelper extends SQLiteOpenHelper { //用户表,包含name和pwd两个字段,name为主键 public static final String CREATE_usersDB = "create table usersDB(" + "name text primary key," + "pwd text)"; private Context mContext; //构造方法: // 第一个参数Context上下文, // 第二个参数数据库名, // 第三个参数cursor允许我们在查询数据的时候返回一个自定义的光标位置,一般传入的都是null, // 第四个参数表示目前库的版本号(用于对库进行升级) public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory , int version){ super(context,name ,factory,version); mContext = context; } @Override public void onCreate(SQLiteDatabase db) { //调用SQLiteDatabase中的execSQL()执行建表语句。 db.execSQL(CREATE_usersDB); //创建成功 Toast.makeText(mContext, "创建成功", Toast.LENGTH_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //更新表 db.execSQL("drop table if exists usersDB"); onCreate(db); }}
接下来开始测试:
添加数据put:
MainActivity:
package mountain_hua.learn_sqlite; 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.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; public class MainActivity extends AppCompatActivity { private MyDatabaseHelper dbHelper; //数据库 private Button add; //添加按钮 private String name,pwd;//名字和密码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); add=(Button)findViewById(R.id.button); lv=(ListView)findViewById(R.id.listview); //添加按钮: add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //给数据库添加信息 name=((EditText)findViewById(R.id.editText)).getText().toString(); pwd=((EditText)findViewById(R.id.editText2)).getText().toString(); addinfo(); } }); //数据库添加函数: public void addinfo(){ //第二个参数是数据库名 dbHelper = new MyDatabaseHelper(MainActivity.this,"usersDataBase",,1); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("pwd", pwd); //insert()方法中第一个参数是表名,第二个参数是表示给表中未指定数据的自动赋值为NULL。第三个参数是一个ContentValues对象 db.insert("usersDB",,values); }}
在activity_main中添加两个EditText和一个Button;然后添加数据
点击添加按钮后,Toast出了创建成功,说明执行了数据库的Oncreat方法,数据库创建成功:
@Override public void onCreate(SQLiteDatabase db) { //调用SQLiteDatabase中的execSQL()执行建表语句。 db.execSQL(CREATE_usersDB); //创建成功 Toast.makeText(mContext, "创建成功", Toast.LENGTH_SHORT).show(); }
以后再点击按钮不会出现创建成功的Toast,因为数据库已经存在。
查询数据query
我们先继续添加一个查询按钮和一个listview,把要查询的数据显示在listview里面:
先配置listview适配器,显示两行文字。第一行为name,第二行为pwd.
查询函数:
dbHelper = new MyDatabaseHelper(MainActivity.this, "数据库名", null, 1); SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.query("表名", null, null, null, null, null, null); if (cursor != null && cursor.getCount() > 0) { while(cursor.moveToNext()) cursor.getString(此处为列号)//列序号从0开始,0,1,2,3.... } cursor.close(); db.close();
或者用sql语句:
dbHelper = new MyDatabaseHelper(MainActivity.this,"数据库名",null,1); SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.rawQuery("select * from 表名", null); while (cursor.moveToNext()) { String name= cursor.getString(列序号号);//列序号从0开始,0,1,2,3.... } cursor.close(); db.close();
现在的MainActivity变为:
package mountain_hua.learn_sqlite;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.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;import java.util.ArrayList;import java.util.HashMap;public class MainActivity extends AppCompatActivity { private MyDatabaseHelper dbHelper; //数据库 private Button add,query; //添加按钮和查询按钮 private String name,pwd;//名字和密码 private ListView lv; private String getName,getPwd;//从数据库得到的名字和密码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); add=(Button)findViewById(R.id.button); query=(Button)findViewById(R.id.button2); lv=(ListView)findViewById(R.id.listview); //添加按钮: add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //给数据库添加信息 name=((EditText)findViewById(R.id.editText)).getText().toString(); pwd=((EditText)findViewById(R.id.editText2)).getText().toString(); addinfo(); } }); //查询按钮: query.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //给数据库添加信息 queryinfo(); } }); } //数据库添加函数: public void addinfo(){ //第二个参数是数据库名 dbHelper = new MyDatabaseHelper(MainActivity.this,"usersDataBase",null,1); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("pwd", pwd); //insert()方法中第一个参数是表名,第二个参数是表示给表中未指定数据的自动赋值为NULL。第三个参数是一个ContentValues对象 db.insert("usersDB",null,values); } //数据库查询函数: public void queryinfo(){ final ArrayList> listItem = new ArrayList >();/*在数组中存放数据*/ //第二个参数是数据库名 dbHelper = new MyDatabaseHelper(MainActivity.this,"usersDataBase",null,1); SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.rawQuery("select * from usersDB", null); //查询语句也可以这样写 //Cursor cursor = db.query("usersDB", null, null, null, null, null, null); if (cursor != null && cursor.getCount() > 0) { while(cursor.moveToNext()) { getName = cursor.getString(0); getPwd = cursor.getString(1); HashMap map = new HashMap(); map.put("name", getName); map.put("pwd", getPwd); listItem.add(map); //new String 数据来源, new int 数据到哪去 SimpleAdapter mSimpleAdapter = new SimpleAdapter(MainActivity.this,listItem,R.layout.simple_adapter_item, new String[] {"name","pwd"}, new int[] {R.id.ItemText1,R.id.ItemText2}); lv.setAdapter(mSimpleAdapter);//为ListView绑定适配器 } } cursor.close(); db.close(); } }
我又添加了几条数据,查询结果:
删除delete:
继续添加一个删除按钮,监听事件是删除第一个输入框EditText对应的数据库元素:
删除函数:
name=((EditText)findViewById(R.id.editText)).getText().toString(); dbHelper = new MyDatabaseHelper(MainActivity.this,"usersDataBase",null,1); SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete("usersDB","name=?",new String[] {name}); db.close();
删除之后我们再次点查询,如图:
修改update:
同上,先添加个更新按钮:监听事件是对输入框对应的数据库数据的更新
更新函数:
//更新数据库 name=((EditText)findViewById(R.id.editText)).getText().toString(); pwd=((EditText)findViewById(R.id.editText2)).getText().toString(); dbHelper = new MyDatabaseHelper(MainActivity.this,"usersDataBase",null,1); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("pwd", pwd); db.update("usersDB", values, "name=?", new String[]{name}); db.close();
当我们更新之后再点查询,如图所示:
最终代码:
MainActivity:
package mountain_hua.learn_sqlite;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.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;import java.util.ArrayList;import java.util.HashMap;public class MainActivity extends AppCompatActivity { private MyDatabaseHelper dbHelper; //数据库 private Button add,query,delete,update; //添加按钮和查询按钮和删除按钮和更新按钮 private String name,pwd;//名字和密码 private ListView lv; private String getName,getPwd;//从数据库得到的名字和密码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); add=(Button)findViewById(R.id.button); query=(Button)findViewById(R.id.button2); delete=(Button)findViewById(R.id.button3); update=(Button)findViewById(R.id.button4); lv=(ListView)findViewById(R.id.listview); //添加按钮: add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //给数据库添加信息 name=((EditText)findViewById(R.id.editText)).getText().toString(); pwd=((EditText)findViewById(R.id.editText2)).getText().toString(); addinfo(); } }); //查询按钮: query.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //给数据库添加信息 queryinfo(); //new String 数据来源, new int 数据到哪去 } }); //删除按钮: delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //删除数据库 name=((EditText)findViewById(R.id.editText)).getText().toString(); dbHelper = new MyDatabaseHelper(MainActivity.this,"usersDataBase",null,1); SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete("usersDB","name=?",new String[] {name}); db.close(); } }); //更新按钮: update.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //更新数据库 name=((EditText)findViewById(R.id.editText)).getText().toString(); pwd=((EditText)findViewById(R.id.editText2)).getText().toString(); dbHelper = new MyDatabaseHelper(MainActivity.this,"usersDataBase",null,1); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("pwd", pwd); db.update("usersDB", values, "name=?", new String[]{name}); db.close(); } }); } //数据库添加函数: public void addinfo(){ //第二个参数是数据库名 dbHelper = new MyDatabaseHelper(MainActivity.this,"usersDataBase",null,1); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("pwd", pwd); //insert()方法中第一个参数是表名,第二个参数是表示给表中未指定数据的自动赋值为NULL。第三个参数是一个ContentValues对象 db.insert("usersDB",null,values); } //数据库查询函数: public void queryinfo(){ final ArrayList> listItem = new ArrayList >();/*在数组中存放数据*/ //第二个参数是数据库名 dbHelper = new MyDatabaseHelper(MainActivity.this,"usersDataBase",null,1); SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.rawQuery("select * from usersDB", null); //查询语句也可以这样写 //Cursor cursor = db.query("usersDB", null, null, null, null, null, null); if (cursor != null && cursor.getCount() > 0) { while(cursor.moveToNext()) { getName = cursor.getString(0); getPwd = cursor.getString(1); HashMap map = new HashMap(); map.put("name", getName); map.put("pwd", getPwd); listItem.add(map); //new String 数据来源, new int 数据到哪去 SimpleAdapter mSimpleAdapter = new SimpleAdapter(MainActivity.this,listItem,R.layout.simple_adapter_item, new String[] {"name","pwd"}, new int[] {R.id.ItemText1,R.id.ItemText2}); lv.setAdapter(mSimpleAdapter);//为ListView绑定适配器 } } cursor.close(); db.close(); }}
布局文件:
activity_main:
<?xml version="1.0" encoding="utf-8"?>
listview适配器simple_adapter_item:
<?xml version="1.0" encoding="utf-8"?>
附demo,解压后用Android studio可以直接打开:
sqlite使用例子
Android 操作SQLite基本用法
另推荐一篇sqlite的专栏:
sqlite专栏
更多相关文章
- Android(安卓)Alert Dialog解决点击按钮对话框不关闭的问题
- 【Android(安卓)开发工具】模拟器中的战斗机Genymotion
- Android之SQlite数据库
- Android(安卓)Nine Patch图片及按钮背景
- Android开发实践:用PopupWindow实现自定义Dailog
- Android使用selector自定义按钮
- android 数据存储
- RelativeLayout的基本对齐方式
- Android实现高定制化日历控件