天天看點

android studio資料存儲建立SQLite資料庫實作增删查改

SQLite的簡介

SQLite,是一款輕型的資料庫,是遵守ACID的關系型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域項目。它的設計目标是嵌入式的,而且已經在很多嵌入式産品中使用了它,它占用資源非常的低,在嵌入式裝置中,可能隻需要幾百K的記憶體就夠了。它能夠支援Windows/Linux/Unix等等主流的作業系統,同時能夠跟很多程式語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界著名資料庫管理系統來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生于2000年5月。 至2021年已經接近有21個年頭,SQLite也迎來了一個版本 SQLite 3已經釋出。

至于它的原理有很多大佬對他的詳細介紹,我就不在這裡累述了。

這篇文章主要是想記錄一下sqlite的詳細使用,我主要是通過一個執行個體了解sqlite 的增删改查。

實驗效果:

android studio資料存儲建立SQLite資料庫實作增删查改

工程結構:

android studio資料存儲建立SQLite資料庫實作增删查改

源代碼:

DBAdapter.java

import android.annotation.SuppressLint;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteException;

import android.database.sqlite.SQLiteOpenHelper;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class DBAdapter {

 private static final String DB_NAME = "student.db";

 private static final String DB_TABLE = "peopleinfo";

 private static final int DB_VERSION = 1;

 public static final String KEY_ID = "_id";

 public static final String KEY_NAME = "name";

 public static final String KEY_BANJI = "banji";

 public static final String KEY_XUEHAO = "xuehao";

 private SQLiteDatabase db;

 private final Context context;

 private DBOpenHelper dbOpenHelper;

 public DBAdapter(Context _context) {

  context = _context;

 }

 public void close() {

  if(db !=null)

  {

   db.close();

   db=null;

  }

 }

 public void open() throws SQLiteException {

  dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION);

  try {

   db = dbOpenHelper.getWritableDatabase();

  }

  catch (SQLiteException ex) {

   db = dbOpenHelper.getReadableDatabase();

  }

 }

 public long insert(People people) {

  ContentValues newValues = new ContentValues();

  newValues.put(KEY_NAME, people.Name);

  newValues.put(KEY_BANJI, people.Banji);

  newValues.put(KEY_XUEHAO, people.Xuehao);

  return db.insert(DB_TABLE, null, newValues);

 }

 public People[] queryAllData() {

  Cursor results =  db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_BANJI, KEY_XUEHAO},

    null, null, null, null, null);

  return ConvertToPeople(results);

 }

 public People[] queryOneData(long id) {

  Cursor results =  db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_BANJI, KEY_XUEHAO},

    KEY_ID + "=" + id, null, null, null, null);

  return ConvertToPeople(results);

 }

 @SuppressLint("Range")

 private People[] ConvertToPeople(Cursor cursor){

  int resultCounts = cursor.getCount();

  if (resultCounts == 0 || !cursor.moveToFirst()){

   return null;

  }

  People[] peoples = new People[resultCounts];

  for (int i = 0 ; i<resultCounts; i++){

   peoples[i] = new People();

   peoples[i].ID = cursor.getInt(0);

   peoples[i].Name = cursor.getString(cursor.getColumnIndex(KEY_NAME));

   peoples[i].Banji = cursor.getString(cursor.getColumnIndex(KEY_BANJI));

   peoples[i].Xuehao = cursor.getString(cursor.getColumnIndex(KEY_XUEHAO));

   cursor.moveToNext();

  }

  return peoples;

 }

 public long deleteAllData() {

  return db.delete(DB_TABLE, null, null);

 }

 public long deleteOneData(long id) {

  return db.delete(DB_TABLE,  KEY_ID + "=" + id, null);

 }

 public long updateOneData(long id , People people){

  ContentValues updateValues = new ContentValues();

  updateValues.put(KEY_NAME, people.Name);

  updateValues.put(KEY_BANJI, people.Banji);

  updateValues.put(KEY_XUEHAO, people.Xuehao);

  return db.update(DB_TABLE, updateValues,  KEY_ID + "=" + id, null);

 }

 private static class DBOpenHelper extends SQLiteOpenHelper {

  public DBOpenHelper(Context context, String name, CursorFactory factory, int version) {

   super(context, name, factory, version);

  }

  private static final String DB_CREATE = "create table " +

    DB_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " +

    KEY_NAME+ " text not null, " + KEY_BANJI+ " text not null," + KEY_XUEHAO + " text not null);";

  @Override

  public void onCreate(SQLiteDatabase _db) {

   _db.execSQL(DB_CREATE);

  }

  @Override

  public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) {

   _db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);

   onCreate(_db);

  }

 }

}

People.java

public class People {

 public int ID = -1;

 public String Name;

 public String Banji;

 public String Xuehao;

 @Override

 public String toString(){

  String result = "";

  result += "ID:" + this.ID + ",";

  result += "姓名:" + this.Name + ",";

  result += "班級:" + this.Banji + ", ";

  result += "學号:" + this.Xuehao;

  return result;

 }

}

MainActivity.java

package com.example.shiyan6_sqlite;

import androidx.appcompat.app.AppCompatActivity;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    EditText e_xm,e_nl,e_sg,e_id;

    TextView t_1;

    Button b_add,b_allsee,b_clearsee,b_alldel,b_delid,b_seeid,b_updid;

    DBAdapter dbAdapter;

    SQLiteDatabase db;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        e_xm=findViewById(R.id.e_xm);

        e_nl=findViewById(R.id.e_nl);

        e_sg=findViewById(R.id.e_sg);

        b_add=findViewById(R.id.b_add);

        b_allsee=findViewById(R.id.b_allsee);

        b_clearsee=findViewById(R.id.b_clearall);

        b_alldel=findViewById(R.id.b_delall);

        b_delid=findViewById(R.id.b_delid);

        b_seeid=findViewById(R.id.b_seeid);

        b_updid=findViewById(R.id.b_updid);

        e_id=findViewById(R.id.e_id);

        t_1=findViewById(R.id.t_1);

        dbAdapter=new DBAdapter(this);

        dbAdapter.open();

        b_add.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                People t=new People();

                t.Name=e_xm.getText().toString();

                t.Banji=e_nl.getText().toString();

                t.Xuehao=e_sg.getText().toString();

                long colunm=dbAdapter.insert(t);

                if (colunm == -1 ){

                    t_1.setText("添加過程錯誤!");

                } else {

                    t_1.setText("成功添加資料,ID:"+String.valueOf(colunm));

                }

            }

        });

        b_allsee.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                People [] peoples =dbAdapter.queryAllData();

                if (peoples == null){

                    t_1.setText("資料庫中沒有資料");

                    return;

                }

                String t="資料庫:\n";

                for(int i=0;i<peoples.length;++i){

                    t+=peoples[i].toString()+"\n";

                }

                t_1.setText(t);

            }

        });

        b_clearsee.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                t_1.setText("");

            }

        });

        b_alldel.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                dbAdapter.deleteAllData();

                t_1.setText("已删除所有資料!");

            }

        });

        b_delid.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                int id=Integer.parseInt(e_id.getText().toString());

                long result=dbAdapter.deleteOneData(id);

                String msg = "删除ID為"+e_id.getText().toString()+"的資料" + (result>0?"成功":"失敗");

                t_1.setText(msg);

            }

        });

        b_seeid.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                int id=Integer.parseInt(e_id.getText().toString());

                People people[]=dbAdapter.queryOneData(id);

                if(people==null){

                    t_1.setText("Id為"+id+"的記錄不存在!");

                }

                else{

                    t_1.setText("查詢成功:\n"+people[0].toString());

                }

            }

        });

        b_updid.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                int id=Integer.parseInt(e_id.getText().toString());

                People t=new People();

                t.Name=e_xm.getText().toString();

                t.Banji=e_nl.getText().toString();

                t.Xuehao=e_sg.getText().toString();

                long n=dbAdapter.updateOneData(id,t);

                if (n<0){

                    t_1.setText("更新過程錯誤!");

                } else {

                    t_1.setText("成功更新資料,"+String.valueOf(n)+"條");

                }

            }

        });

    }

    @Override

    protected void onStop() {

        super.onStop();

        dbAdapter.close();

    }

}