adroid之Sqlite篇

sqlite是Android中内置的轻型数据库,可以使用sql命令,是一种完善的,轻型的数据库。

在Android中,每个应用程序都可以有自己的数据库实例,默认情况下是只能被自己访问的。

数据库存放在Android设备的/data/data//databases文件夹下。可以使用内容提供器在应用程序间共享数据库信息。使用sqlite数据库可分为以下步骤:

(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;然后添加数据
adroid之Sqlite篇_第1张图片
点击添加按钮后,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里面:
adroid之Sqlite篇_第2张图片
先配置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对应的数据库元素:
adroid之Sqlite篇_第3张图片
删除函数:

                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();

删除之后我们再次点查询,如图:
adroid之Sqlite篇_第4张图片
修改update:
同上,先添加个更新按钮:监听事件是对输入框对应的数据库数据的更新
adroid之Sqlite篇_第5张图片
更新函数:

//更新数据库
                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();

当我们更新之后再点查询,如图所示:
adroid之Sqlite篇_第6张图片
最终代码:
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();
    }
 
}

你可能感兴趣的:(Sqlite)