Android基础(九):SQLite

10 篇文章 0 订阅

SQLite数据库采用了模块化设计,模块将复杂的查询过程分解为细小的工作进行处理SQLite数据库由8个独立的模块构成,这些独立模块又构成了三个主要的子系统

代码建库

自定义open()函数实现打开数据库,通过调用SQLiteOpenHelper类的getWritableDatabase()函数和getReadableDatabase()函数,来建立或打开数据库getWritableDatabase()函数用来建立或打开一个可读写的数据库实例如果调用getWritableDatabase()函数无法获得可读写的数据库实例(比如磁盘空间已满),这时可以调用getReadableDatabase()函数,建立或打开一个只读的数据库实例

SQLiteDatabase类的公有函数insert()、delete()、update()和query(),封装了执行添加、删除、更新和查询功能的SQL命令使用SQLiteDatabase类的公有函数就可以完成数据的添加、删除、更新和查询等操作

首先构造一个ContentValues实例,然后调用ContentValues实例的put()方法,将每个属性的值写入到ContentValues实例中,最后使用SQLiteDatabase实例的insert()函数,将ContentValues实例中的数据写入到指定的数据表中insert()函数的返回值是新数据插入的位置

删除数据只需要调用delete()函数,并指明表名称和删除条件即可

更新数据同样首先构造ContentValues实例,然后调用put()函数将属性值写入到ContentValues实例中,最后使用SQLiteDatabase的update()函数,并指定数据的更新条件

数据查询需要调用query()函数

查询参数

数据库查询结果的返回值并不是数据集合的完整拷贝,而是返回数据集的指针 Cursor

Cursor类支持在查询结果的数据集合中以多种方式移动,并能够获取数据集合的属性名称和序号

Demo:

People模型

package com.example.myapplication01;

public class People {
    private int id;
    private String Name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    @Override
    public String toString() {
        return "People{" +
                "id=" + id +
                ", Name='" + Name + '\'' +
                '}';
    }
}

DBAdapter:

package com.example.myapplication01;

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

import androidx.annotation.Nullable;

public class DBAdapter {
    private SQLiteDatabase sqLiteDatabase;
    //sql命令常量
    private static final String DBTable = "peopleInfo";
    private static final String KEYID = "id";
    private static final String KEYName = "name";
    //声明打开数据库对象和参数
    private DBOpenHelp dbOpenHelp;
    private Context context;
    private String dbName = "people.db";

    public DBAdapter(Context context){
        this.context = context;     //定义构造函数
    }

    private static class DBOpenHelp extends SQLiteOpenHelper{
        //创建表SQL语句
        private static  final  String DBCreate = "create table "+ DBTable +" ("+ KEYID +
                " integer primary key autoincrement, "+ KEYName + " text);";

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

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DBCreate);   //执行DBCreate sql语句
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }
    }

    public void open(){
        dbOpenHelp = new DBOpenHelp(context, dbName, null,1);  //传递DBOpenHelp参数
        try{
            sqLiteDatabase= dbOpenHelp.getWritableDatabase();   //打开数据库
        }catch (Exception e){
           sqLiteDatabase = dbOpenHelp.getReadableDatabase();   //异常就只读
        }
    }

    public void close(){    //最后需要关闭
        if (sqLiteDatabase != null){
            sqLiteDatabase.close();
            sqLiteDatabase = null;  //关闭后设置为null
        }
    }

    //插入数据
    public long insert(People people){ //传入People对象
        ContentValues values = new ContentValues();
        values.put(KEYName,people.getName());
        return sqLiteDatabase.insert(DBTable,null,values);     //返回插入操作
    }

    //删除操作
    public long delete(long id) {   //指定删除的id
        return sqLiteDatabase.delete(DBTable,KEYID +"="+id ,null);
    }

    //更新数据
    public long update(People people, long id){  //根据id更新数据
        ContentValues values = new ContentValues();
        values.put(KEYName, people.getName());
        return sqLiteDatabase.update(DBTable, values, KEYID+"="+id,null);
    }

    //查询操作
    public People[] query(){
        //查询结果返回给cursor集合,查询整张表
        Cursor cursor = sqLiteDatabase.query(DBTable,null,null,null,null,null,null,null);
        int count = cursor.getCount();        //获取记录条数
        if(count <=0 ){
            return null;    //没有数据
        }else{      //读取数据
            cursor.moveToFirst();       //指针移动到第一条记录
            People[] peoples = new People[count];    //存放对象
            for(int i = 0;i < count;i++){
                peoples[i] = new People();
                peoples[i].setId(cursor.getInt(0));  //获取id
                peoples[i].setName(cursor.getString(cursor.getColumnIndex(KEYName))); //获取姓名
                cursor.moveToNext();        //指针移动下一个记录
            }
            return peoples;
        }
    }
}

MainActivity:

package com.example.myapplication01;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

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

        final Button InsertBtn = findViewById(R.id.InsertBtn);
        final Button QueryBtn = findViewById(R.id.queryBtn);
        final EditText editText = findViewById(R.id.editText);
        final TextView resultView = findViewById(R.id.ResultView);

        final DBAdapter dbAdapter = new DBAdapter(this);
        dbAdapter.open();
        InsertBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //写入数据
                People people = new People();
                people.setName(editText.getText().toString());
                dbAdapter.insert(people);   //插入people
            }
        });

        QueryBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //查询数据
                People[] peoples = dbAdapter.query();
                //显示第一条记录的Name
                resultView.setText(peoples[0].getName());
            }
        });
    }
}

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Android 登录注册页面实现,使用 SQLite 数据库进行数据存储和验证。请注意,这只是一个基础的实现,您可以根据自己的需求进行修改和扩展。 1. 创建一个名为 “LoginActivity” 的 Activity,并在布局文件中添加两个 EditText 和两个 Button,用于输入和提交登录信息和注册新用户信息。 2. 创建一个名为 “DatabaseHelper” 的类,继承自 SQLiteOpenHelper 类。在该类中实现数据库的创建和升级方法,并提供一些辅助方法,如添加新用户、验证用户信息等。 ```java public class DatabaseHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "UserDatabase.db"; private static final String TABLE_NAME = "users"; private static final String COLUMN_ID = "id"; private static final String COLUMN_USERNAME = "username"; private static final String COLUMN_PASSWORD = "password"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_USERNAME + " TEXT," + COLUMN_PASSWORD + " TEXT" + ")"; db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } public boolean addUser(String username, String password) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COLUMN_USERNAME, username); values.put(COLUMN_PASSWORD, password); long result = db.insert(TABLE_NAME, null, values); return result != -1; } public boolean checkUser(String username, String password) { SQLiteDatabase db = this.getReadableDatabase(); String query = "SELECT * FROM " + TABLE_NAME + " WHERE " + COLUMN_USERNAME + " = ? AND " + COLUMN_PASSWORD + " = ?"; Cursor cursor = db.rawQuery(query, new String[]{username, password}); boolean result = cursor.getCount() > 0; cursor.close(); return result; } } ``` 3. 在 LoginActivity 类中,创建一个 DatabaseHelper 实例,并在登录和注册按钮的点击事件中调用相应的方法进行数据验证和添加。如果验证成功,可以打开另一个 Activity 或直接显示 “登录成功” 消息。 ```java public class LoginActivity extends AppCompatActivity { private EditText mUsernameEditText, mPasswordEditText; private Button mLoginButton, mRegisterButton; private DatabaseHelper mDatabaseHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mUsernameEditText = findViewById(R.id.username_edit_text); mPasswordEditText = findViewById(R.id.password_edit_text); mLoginButton = findViewById(R.id.login_button); mRegisterButton = findViewById(R.id.register_button); mDatabaseHelper = new DatabaseHelper(this); mLoginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String username = mUsernameEditText.getText().toString(); String password = mPasswordEditText.getText().toString(); if (mDatabaseHelper.checkUser(username, password)) { // login success } else { // login failed } } }); mRegisterButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String username = mUsernameEditText.getText().toString(); String password = mPasswordEditText.getText().toString(); if (mDatabaseHelper.addUser(username, password)) { // register success } else { // register failed } } }); } } ``` 这就是一个简单的 Android 登录注册页面实现,使用 SQLite 数据库进行数据存储和验证。需要注意的是,这只是一个基础的实现,您需要根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值