Android:使用SQLite数据库

        Android内置的轻量级数据库SQLite,是Android五种数据存储方式中的一种。Android提供了类SQLiteDatabase,里面封装了一些数据库的API,可以用于对数据库进行增、删、改、查。Android还提供了类SQLiteOpenHelper,是SQLiteDatabase的辅助类,主要用于创建数据库,并对数据库的版本进行管理。该类是一个抽象类,使用时一般定义一个类继承SQLiteOpenHelper,并实现两个回调方法OnCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase,int oldVersion,int newVersion)来创建和更新数据库。

一、在项目中编写代码创建数据库、数据表

        Android Studio中新建项目:

新建包:utils,在utils下面新建class文件:DBAdapter,用于完成数据库及表的建立、更新、删除操作,以及对数据的增删改查

package com.example.zwl.myapp.utils;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class DBAdapter {
    private static final String DB_NAME = "order.db";               //数据库库名
    public static final String User_TABLE = "user";                 //用户数据表
    private static final int DB_VESSION = 1;                       //数据库版本
    public static final String NAME = "username";                   //用户数据表字段名
    public static final String PASSWORD = "password";             //用户数据表字段名
    public static final String CARTID = "cartId";                   //用户数据表字段名
    private SQLiteDatabase db;
    private final Context context;
    private DBOpenHelper dbOpenHelper;

    public DBAdapter(Context context) {
        this.context = context;
    }
    //关闭数据库
    public void close(){
        if (db!=null){
            db.close();
            db = null;
        }
    }
    //创建及打开数据库
    public void open()throws SQLException{
        dbOpenHelper = new DBOpenHelper(context,DB_NAME,null,DB_VESSION);
        try {
        //调用getWritableDatabase()或getReadableDatabase()时才会执行onCreate()
            db = dbOpenHelper.getWritableDatabase();
        }catch (SQLException ex){
            db = dbOpenHelper.getReadableDatabase();
        }
    }
    //删除数据库
    public void delete() throws SQLException{
        context.deleteDatabase(DB_NAME);
    }
    //创建数据表
    public void create_table(String createTableSql) throws SQLException{
        db.execSQL(createTableSql);
    }
    //删除数据表
    public void drop_table(String tableName) throws SQLException{
        db.execSQL("DROP TABLE IF EXISTS "+tableName);
    }
}

创建DBOpenHelper类继承SQLiteOpenHelper:

package com.example.zwl.myapp.utils;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBOpenHelper extends SQLiteOpenHelper {

    public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    private static final String User_CREATE = "create table "+ DBAdapter.User_TABLE + " (" + DBAdapter.NAME + " VARCHAR PRIMARY KEY,"+ DBAdapter.PASSWORD + " text not null," + DBAdapter.CARTID + " text not null);";

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(User_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+DBAdapter.User_TABLE);
        onCreate(db);

    }
}

在MainActivity中调用:

package com.example.zwl.myapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.zwl.myapp.utils.DBAdapter;

public class MainActivity extends AppCompatActivity {

     private DBAdapter dbAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbAdapter.open();
        dbAdapter.close();
    }
}

二、查看建好的数据表

        创建好的数据库文件会存放在\data\data\<包名>\databases中,cmd中输入adb shell:

查看user表的结构:

三、控制台操作数据库

在控制台向user表插入数据,在AS中打印出,首先先插入数据并在cmd中查看:

AS中创建包:bean用于存放orm关系映射类,包下新建类User:

package com.example.zwl.myapp.bean;

public class User {
    public String username;
    public String password;
    public String cartId;
}

在DBAdapter.java代码增加两个方法用于查询数据:

//查询user表中一条数据
    public User queryOneData(String username) throws SQLException{
        Cursor results = db.query(User_TABLE,new String[]{NAME,PASSWORD,CARTID},NAME + " = " + '"' + username + '"' ,null,null,null,null);
        return ConertToUser(results);
    }
    //将查询结果转换为User类型
    private User ConertToUser(Cursor cursor) {
//        获得游标集的记录数
        int resultCounts = cursor.getCount();
        //如果游标集的记录数为0或者游标不在第一行记录,则返回null
        if(resultCounts==0||!cursor.moveToFirst()){
            return null;
        }
//        创建User实体类
        User theUser = new User();
        //这里一开始游标指向结果集第一行,而这里的功能时查询一条数据,故直接获取通过属性序号获得对应值
        // cursor.getColumnIndex(属性名):返回指定属性名称的序号
        theUser.username = cursor.getString(cursor.getColumnIndex(NAME));
        theUser.password = cursor.getString(cursor.getColumnIndex(PASSWORD));
        theUser.cartId = cursor.getString(cursor.getColumnIndex(CARTID));
        return  theUser;
    }

修改MainActivity如下: 

package com.example.zwl.myapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.zwl.myapp.utils.DBAdapter;
import com.example.zwl.myapp.bean.User;

public class MainActivity extends AppCompatActivity {

     private DBAdapter dbAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbAdapter.open();
        User mUser = dbAdapter.queryOneData("admin");
        dbAdapter.close();
        Log.i("user表中的数据:",mUser.username+","+mUser.password+","+mUser.cartId);
    }
}

在AS中打印: 

四、Android Studio中编写代码操作数据库

不想在控制台插入数据的,可以选择AS中编写代码进行插入操作。在DBAdapter.java代码增加插入数据库方法:

    public long insert(User user){
        //ContentValues对象,即键值对的字段名称,键名为表中的字段,键值为要增加的记录数据值,通过该对象的put()将数据存放到ContentValues对象中
        ContentValues newValues = new ContentValues();
        newValues.put(NAME,user.username);
        newValues.put(PASSWORD,user.password);
        newValues.put(CARTID,user.cartId);
        //返回值:返回插入记录所在行的行号,如果插入失败则返回-1
        return db.insert(User_TABLE,null,newValues);
    }

 在MainActivity中使用如下:

package com.example.zwl.myapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.zwl.myapp.utils.DBAdapter;
import com.example.zwl.myapp.bean.User;

public class MainActivity extends AppCompatActivity {

     private DBAdapter dbAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbAdapter.open();
        User theUser = new User();
        theUser.username = "test";
        theUser.password = "456";
        theUser.cartId = "181115002";
        dbAdapter.insert(theUser);
        User mUser = dbAdapter.queryOneData("test");
        dbAdapter.close();
        Log.i("user表中的数据:",mUser.username+","+mUser.password+","+mUser.cartId);

    }

运行结果如下: 

发布了45 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/baidu_41327283/article/details/83998173