天天看點

Android中使用SQLite資料庫Android中使用SQLite資料庫1 SQLite和MySQL、Oracle等的差別2 SQLite在Android Studio中的用法

Android中使用SQLite資料庫

目錄标題

  • Android中使用SQLite資料庫
  • 1 SQLite和MySQL、Oracle等的差別
  • 2 SQLite在Android Studio中的用法
    • 2.1 第一種:利用工具類自動連接配接資料建立表
    • 對表的增删改查的四種方法:
      • 1 增加資料
      • 2 删除資料
      • 3 查詢資料
      • 4 修改操作
    • 2.2 第二種:建立資料庫操作類
    • 對表增删改查的四種方法:
      • 1 增加資料
      • 2 删除資料
      • 3 查詢資料
      • 4 更改操作
SQLite,是一款輕型的資料庫,是遵守ACID的關系型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RechardHipp建立的公有領域項目。它的設計目标是嵌入式的,而且已經在很多嵌入式産品中使用了它,它占用的資源非常的低,在嵌入式裝置中,可能隻需要幾百k的記憶體就夠了。它能夠支援Window/Linux/Unix等等主流的作業系統,同時能夠跟很多的程式語言相結合,比如Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界著名資料庫來講,它的處理速度比他們快。SQLite第一個Alpha版本誕生于2000年5月。至2021年已經接近有21個年頭,SQLite也迎來了一個版本SQLite3已經釋出。

1 SQLite和MySQL、Oracle等的差別

MySQL、Oracle這些資料庫的資料是所有使用者的資料,用戶端通過伺服器與資料庫進行資料傳遞和互動。而SQLite這款輕量型資料庫的資料是對應目前使用者的資料,而且用戶端也不用通過伺服器與資料庫進行資料傳遞和互動,相當于省去了伺服器這一中介,進而使得處理速度快捷友善。

Android中使用SQLite資料庫Android中使用SQLite資料庫1 SQLite和MySQL、Oracle等的差別2 SQLite在Android Studio中的用法

2 SQLite在Android Studio中的用法

2.1 第一種:利用工具類自動連接配接資料建立表

先建立一個工具類,然後在工具類中寫入建立表和修改表的方法。

Android中使用SQLite資料庫Android中使用SQLite資料庫1 SQLite和MySQL、Oracle等的差別2 SQLite在Android Studio中的用法
package com.huncm.sqlite;

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

import androidx.annotation.Nullable;

    //工具類  自動連接配接資料   建立表
public class DBOpenHelper extends SQLiteOpenHelper {
    public DBOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //建立表
        String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20),age integer)";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //修改表
    }
}
           
Android中使用SQLite資料庫Android中使用SQLite資料庫1 SQLite和MySQL、Oracle等的差別2 SQLite在Android Studio中的用法

對表的增删改查的四種方法:

1 增加資料

在MainActivity中,先對按鈕設定點選事件,然後再寫入以下調用方法。

Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //添加資料
                DBOpenHelper mySQLiteHelper = new DBOpenHelper(MainActivity.this,"test",null,1);
                SQLiteDatabase db = mySQLiteHelper.getWritableDatabase();
                //    hashmap(一個key,對應一個value)
                ContentValues contentValues = new ContentValues();
                contentValues.put("username","admin");
                contentValues.put("password","111111");
                contentValues.put("age",21);
                db.insert("user",null,contentValues);
            }
        });
           

2 删除資料

在MainActivity中,先對按鈕設定點選事件,然後再寫入以下調用方法。

Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //删除資料
                DBOpenHelper mySQLiteHelper = new DBOpenHelper(MainActivity.this,"test",null,1);
                SQLiteDatabase db = mySQLiteHelper.getWritableDatabase();
                db.delete("user","id=? and username=?",new String[]{"1","admin123"});//用于删除指定的資料
            }
        });

           

3 查詢資料

在MainActivity中,先對按鈕設定點選事件,然後再寫入以下調用方法。查詢操作比較複雜,要用到cursor遊标操作。

Button button3 = findViewById(R.id.button3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DBOpenHelper mySQLiteHelper = new DBOpenHelper(MainActivity.this,"test",null,1);
                SQLiteDatabase db = mySQLiteHelper.getWritableDatabase();
                //查詢資料(利用遊标實作)
                Cursor cursor=  db.query("user",null,"username=?",new String[]{"admin123"},null,null,null);
                while (cursor.moveToNext()){
                    String id = cursor.getString(cursor.getColumnIndex("id"));
                    String username = cursor.getString(cursor.getColumnIndex("username"));
                    int age = cursor.getInt(cursor.getColumnIndex("age"));
                    Log.i("Mainactivity", "result: id=" + id + " username: " + username + "  age:" + age);
                }

            }
        });
           

4 修改操作

在MainActivity中,先對按鈕設定點選事件,然後再寫入以下調用方法。

Button button4 = findViewById(R.id.button4);
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DBOpenHelper mySQLiteHelper = new DBOpenHelper(MainActivity.this,"test",null,1);
                SQLiteDatabase db = mySQLiteHelper.getWritableDatabase();
                ContentValues values2 = new ContentValues();
                values2.put("username","小強");
                db.update("user",values2,"username=?",new String[]{"admin"});
            }
        });
           

2.2 第二種:建立資料庫操作類

先建立一個實體類,其中包含表中的那些屬性,需要用到[email protected]==導入相關依賴包。這種方式更加簡便,友善書寫。

annotationProcessor 'androidx.room:room-compiler:2.2.5'
           
Android中使用SQLite資料庫Android中使用SQLite資料庫1 SQLite和MySQL、Oracle等的差別2 SQLite在Android Studio中的用法

再建立一個資料庫操作類,其中有抽象方法,是對表的增删改查。

package com.huncm.sqlite;

import androidx.room.Database;
import androidx.room.RoomDatabase;

@Database(entities = {User.class},version = 1,exportSchema = false)
public abstract class UserDatabase extends RoomDatabase {
    public abstract  UserDao  getUserDao();
}
           
Android中使用SQLite資料庫Android中使用SQLite資料庫1 SQLite和MySQL、Oracle等的差別2 SQLite在Android Studio中的用法

最後一個就是建立接口方法,去實作對表的增删改查。

package com.huncm.sqlite;

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

//建立接口方法
@Dao
public interface UserDao {  //資料庫操作類  對表增删改查方法
    @Insert
    void insertUser(User...users);

    @Delete
    void deleteUser(User...users);

    @Query("SELECT * FROM user")
    List<User> findALLUser();

    @Query("SELECT * from user Where id = :id")//條件查詢
    List<User> findAllUserByid(int id);

    @Query("UPDATE user set username = :username Where id = :id")
    void updateUser(String username,int id);
}
           
Android中使用SQLite資料庫Android中使用SQLite資料庫1 SQLite和MySQL、Oracle等的差別2 SQLite在Android Studio中的用法

對表增删改查的四種方法:

先聲明執行個體化類和方法,然後對表進行操作

UserDatabase userDatabase;
UserDao userDao;
userDatabase = Room.databaseBuilder(this,UserDatabase.class,"myuser").allowMainThreadQueries().build();
userDao = userDatabase.getUserDao();
           

1 增加資料

Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 增加資料  -orm架構
                User user = new User();
                user.age = 23;
                user.username = "小明";
                user.password = "333333";
                userDao.insertUser(user);
            }
        });
           

2 删除資料

Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                User user = new User();
                user.id = 3;//用于删除指定的資料
                userDao.deleteUser(user);
            }
        });
           

3 查詢資料

Button button3 = findViewById(R.id.button3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                List<User> userList = userDao.findALLUser();
                for(User user : userList){
                    Log.i("MainActivity","userid = "+user.id+" name "+user.username);
                }

            }
        })
           

4 更改操作

Button button4 = findViewById(R.id.button4);
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                userDao.updateUser("小紅",5);//更改id為5的username
            }
        });
           

總的MainAcitivity代碼:

package com.huncm.sqlite;

import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.util.List;

public class MainActivity extends AppCompatActivity {
    UserDatabase userDatabase;
    UserDao userDao;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        userDatabase = Room.databaseBuilder(this,UserDatabase.class,"myuser").allowMainThreadQueries().build();
        userDao = userDatabase.getUserDao();

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //添加資料
//                DBOpenHelper mySQLiteHelper = new DBOpenHelper(MainActivity.this,"test",null,1);
//                SQLiteDatabase db = mySQLiteHelper.getWritableDatabase();
//                //    hashmap(一個key,對應一個value)
//                ContentValues contentValues = new ContentValues();
//                contentValues.put("username","admin");
//                contentValues.put("password","111111");
//                contentValues.put("age",21);
//                db.insert("user",null,contentValues);

                // 增加資料  -orm架構
                User user = new User();
                user.age = 23;
                user.username = "小明";
                user.password = "333333";
                userDao.insertUser(user);
            }
        });

        Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //删除資料
//                DBOpenHelper mySQLiteHelper = new DBOpenHelper(MainActivity.this,"test",null,1);
//                SQLiteDatabase db = mySQLiteHelper.getWritableDatabase();
//                db.delete("user","id=? and username=?",new String[]{"1","admin123"});//用于删除指定的資料

                User user = new User();
                user.id = 3;//用于删除指定的資料
                userDao.deleteUser(user);
            }
        });

        Button button3 = findViewById(R.id.button3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                DBOpenHelper mySQLiteHelper = new DBOpenHelper(MainActivity.this,"test",null,1);
//                SQLiteDatabase db = mySQLiteHelper.getWritableDatabase();
//                //查詢資料(利用遊标實作)
//                Cursor cursor=  db.query("user",null,"username=?",new String[]{"admin123"},null,null,null);
//                while (cursor.moveToNext()){
//                    String id = cursor.getString(cursor.getColumnIndex("id"));
//                    String username = cursor.getString(cursor.getColumnIndex("username"));
//                    int age = cursor.getInt(cursor.getColumnIndex("age"));
//                    Log.i("Mainactivity", "result: id=" + id + " username: " + username + "  age:" + age);
//                }

                List<User> userList = userDao.findALLUser();
                for(User user : userList){
                    Log.i("MainActivity","userid = "+user.id+" name "+user.username);
                }

            }
        });

        Button button4 = findViewById(R.id.button4);
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                DBOpenHelper mySQLiteHelper = new DBOpenHelper(MainActivity.this,"test",null,1);
//                SQLiteDatabase db = mySQLiteHelper.getWritableDatabase();
//                ContentValues values2 = new ContentValues();
//                values2.put("username","小強");
//                db.update("user",values2,"username=?",new String[]{"admin"});

                userDao.updateUser("小紅",5);
            }
        });
    }
}