sqlite是Android中内置的轻型数据库,可以使用sql命令,是一种完善的,轻型的数据库。
在Android中,每个应用程序都可以有自己的数据库实例,默认情况下是只能被自己访问的。
数据库存放在Android设备的/data/data/
(1)创建数据库;
(2)打开数据库;
(3)创建数据库表;
(4)创建数据集的插入接口;
(5)创建数据集的查询接口;
(6)关闭数据库
下面说说使用方法。
首先创建一个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();
}
}