Android的SQLite的增刪查改


原創作品,允許轉載,轉載時請務必聲明作者信息和本聲明。http://www.cnblogs.com/zhu520/p/8343675.html 

本人小白,那個大神看到有問題可指出,謝謝。。。。

一:sqlite概念是一個軟件庫,實現了自給自足(這意味着不需要任何外部的依賴),無服務器的,零配置的,事務性(完全兼容 ACID 的)的sql數據庫引擎,SQLite 是非常小的,是輕量級的,完全配置時小於 400KiB,省略可選功能配置時小於250KiB。支持多種開發語言,C, C++, PHP, Perl, Java, C#,Python, Ruby等

注意,SQLite 是不區分大小寫的,但也有一些命令是大小寫敏感的,比如 GLOB 和 glob 在 SQLite 的語句中有不同的含義。

對於Android,在應用程序中以編程方式創建的SQLite數據庫始終存儲在/data/data/項目名稱/databases文件夾中

SQL 能做什么? 

SQL 面向數據庫執行查詢 

SQL 可從數據庫取回數據 

SQL 可在數據庫中插入新的記錄 

SQL 可更新數據庫中的數據 

SQL 可從數據庫刪除記錄 

SQL 可創建新數據庫 

SQL 可在數據庫中創建新表 

SQL 可在數據庫中創建存儲過程 

SQL 可在數據庫中創建視圖 

SQL 可以設置表、存儲過程和視圖的權限

二:創建一個Android 工程后繼承SQLiteOpenHelper它主要用於新建數據庫,新建數據表和跟新數據庫

package zhu.com.sqlite_curd;

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

/**
 * Created by Pearl on 2018/1/25.
 */

public class CasualCreatClass  extends SQLiteOpenHelper {


    /**構造方法
     * (Context context, String name, CursorFactory factory,int version)
     * 數據庫創建的構造方法  數據庫名稱  sql_table.db ,版本號為1
     * @param context 上下文對象
     * @param /name 數據庫名稱 secb.db
     * @param /factory  游標工廠
     * @param /version 數據庫版本
     */
    public CasualCreatClass(Context context) {
        super(context, "sql_table.db", null, 1);
    }

    /**數據庫第一次被使用時創建數據庫
     * 初始化數據庫的表結構
     */
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //執行有更新行為的sql語句
        sqLiteDatabase.execSQL("CREATE Table man (manId integer primary key autoincrement, name varchar(20), age integer)");
    }

    /**數據庫版本升級時調用
     * 數據庫版本發生改變時才會被調用,數據庫在升級時才會被調用;
     * @param sqLiteDatabase 操作數據庫
     * @param i 舊版本
     * @param i1 新版本
     */
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("drop table if exists man");
        onCreate(sqLiteDatabase);
    }
}

 

類中的構造方法用於創建數據庫和初始版本號;

onCreate方法用於初始化數據庫的表結構,這里新建了一個man表,里面有manId(主鍵),name,age;

onUpgrade方法用於數據庫版本升級時調用,此時可以用測試類去測試一下看看新建語法有沒有問題,看看有沒有新建數據庫:

在清單文件中application節點上方添加四行代碼(第三行要寫自己應用的包名)

三:源碼

 

1):activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context="zhu.com.sqlite_curd.MainActivity">
    <!---->
    <LinearLayout

        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/edit_text"
        android:addStatesFromChildren="true"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="?android:attr/textColorSecondary"
            android:text="城市名:"
            android:id="@+id/tvCity"
            />
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:singleLine="true"
            android:background="@null"
            android:id="@+id/etCity"
            />
    </LinearLayout>
    <!--編碼-->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/edit_text"
        android:addStatesFromChildren="true"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="?android:attr/textColorSecondary"
            android:text="市區號"
            android:id="@+id/tvCode"
            />
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:singleLine="true"
            android:background="@null"
            android:id="@+id/etCode"
            />
    </LinearLayout>

    <!--增加,修改,查詢-->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:addStatesFromChildren="true"
        >
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="增加"
            android:id="@+id/bt_add"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="修改"
            android:id="@+id/bt_modify"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="查詢"
            android:id="@+id/bt_query"
            />
    </LinearLayout>

    <!--把數據顯示到這里來-->
    <ListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="5dip"
        android:id="@+id/listView"
        />

</LinearLayout>

 2):listview.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:padding="5dip"
  android:id="@+id/linear"
  >
      <ImageView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:gravity="left"
          android:id="@+id/imCity"
      />
      <TextView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:gravity="left"
          android:id="@+id/tvCity"
          />
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentRight="true"
          android:gravity="right"
          android:id="@+id/btRemove"
          />
</RelativeLayout>

 3):CityBean\

package zhu.com.sqlite_curd;
/**
 * 普通JavaBean
 *
 */
public class CityBean {
    public static final String ID = "_id";
    public static final String CITY = "city";
    public static final String CODE = "code";
    
    private String id;
    private String city;
    private String code;
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }

}

4):SQLiteHelper

package zhu.com.sqlite_curd;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
/**
 * 實現對表的創建、更新、變更列名操作
 * @author ytm0220@163.com
 *
 */
public class SQLiteHelper extends SQLiteOpenHelper {
    public static final String TB_NAME = "citys";

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

    /**
     * 創建新表
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS " +
                TB_NAME + "(" +
                CityBean.ID + " integer primary key," +
                CityBean.CITY + " varchar," +
                CityBean.CODE + " integer"+
                ")");
    }

    /**
     * 當檢測與前一次創建數據庫版本不一樣時,先刪除表再創建新表
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TB_NAME);
        onCreate(db);
    }

    /**
     * 變更列名
     * @param db
     * @param oldColumn
     * @param newColumn
     * @param typeColumn
     */
    public void updateColumn(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn){
        try{
            db.execSQL("ALTER TABLE " +
                    TB_NAME + " CHANGE " +
                    oldColumn + " "+ newColumn +
                    " " + typeColumn
            );
        }catch(Exception e){
            e.printStackTrace();
        }
    }

}

5):MainActivity

package zhu.com.sqlite_curd;

import android.app.Activity;
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.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {
    private static String DB_NAME = "mycity.db";
    private static int DB_VERSION = 1;
    private static int POSTION;
    private ListView listview;
    private Cursor cursor;
    private SQLiteDatabase db;
    private SQLiteHelper dbHelper;
    private ListAdapter listAdapter;

    private EditText etCity;
    private EditText etCode;
    private Button bt_add;
    private Button bt_modify;
    private Button bt_query;

    private List<CityBean> cityList = new ArrayList<CityBean>();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etCity = (EditText) findViewById(R.id.etCity);
        etCode = (EditText) findViewById(R.id.etCode);
        bt_add = (Button) findViewById(R.id.bt_add);
        bt_modify = (Button) findViewById(R.id.bt_modify);
        bt_query = (Button) findViewById(R.id.bt_query);

        try{
            /* 初始化並創建數據庫 */
            dbHelper = new SQLiteHelper(this, DB_NAME, null, DB_VERSION);
            /* 創建表 */
            db = dbHelper.getWritableDatabase();    //調用SQLiteHelper.OnCreate()
            /* 查詢表,得到cursor對象 */
            cursor = db.query(SQLiteHelper.TB_NAME, null, null, null, null, null, CityBean.CODE + " DESC");
            cursor.moveToFirst();
            while(!cursor.isAfterLast() && (cursor.getString(1) != null)){
                CityBean city = new CityBean();
                city.setId(cursor.getString(0));
                city.setCity(cursor.getString(1));
                city.setCode(cursor.getString(2));
                cityList.add(city);
                cursor.moveToNext();
            }
        }catch(IllegalArgumentException e){
            //當用SimpleCursorAdapter裝載數據時,表ID列必須是_id,否則報錯column '_id' does not exist
            e.printStackTrace();
            //當版本變更時會調用SQLiteHelper.onUpgrade()方法重建表 注:表以前數據將丟失
            ++ DB_VERSION;
            dbHelper.onUpgrade(db, --DB_VERSION, DB_VERSION);
//            dbHelper.updateColumn(db, SQLiteHelper.ID, "_"+SQLiteHelper.ID, "integer");
        }
        listview = (ListView)findViewById(R.id.listView);
        listAdapter = new ListAdapter();
        listview.setAdapter(listAdapter);
        listview.setOnItemClickListener(new ListView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int postion,
                                    long arg3) {
                setSelectedValues(postion);
            }
        });

        /* 插入表數據並ListView顯示更新 */
        bt_add.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                if(etCity.getText().length() > 1 && etCode.getText().length() >1){
                    ContentValues values = new ContentValues();
                    values.put(CityBean.CITY, etCity.getText().toString().trim());
                    values.put(CityBean.CODE, etCode.getText().toString().trim());
                    //插入數據 用ContentValues對象也即HashMap操作,並返回ID號
                    Long cityID = db.insert(SQLiteHelper.TB_NAME, CityBean.ID, values);
                    CityBean city = new CityBean();
                    city.setId(""+cityID);
                    city.setCity(etCity.getText().toString().trim());
                    city.setCode(etCode.getText().toString().trim());
                    cityList.add(city);
                    listview.setAdapter(new ListAdapter());
                    resetForm();
                }
            }
        });

        /* 查詢表,模糊條件查詢 */
        bt_query.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View view) {
                cityList.removeAll(cityList);
                String sql = null;
                String sqlCity = etCity.getText().length() > 0 ? CityBean.CITY + " like '%" + etCity.getText().toString().trim() + "%'" : "";
                String sqlCode = etCode.getText().length() > 0 ? CityBean.CITY + " like '%" + etCity.getText().toString().trim() + "%'" : "";
                if( (!"".equals(sqlCity)) && (!"".equals(sqlCode)) ){
                    sql = sqlCity + " and" + sqlCode;
                }else if(!"".equals(sqlCity)){
                    sql = sqlCity;
                }else if(!"".equals(sqlCode)){
                    sql = sqlCode;
                }
                cursor = db.query(true, SQLiteHelper.TB_NAME,
                        new String[]{CityBean.ID, CityBean.CITY, CityBean.CODE},
                        sql,
                        null, null, null, null, null);
                cursor.moveToFirst();
                while(!cursor.isAfterLast() && (cursor.getString(1) != null)){
                    CityBean city = new CityBean();
                    city.setId(cursor.getString(0));
                    city.setCity(cursor.getString(1));
                    city.setCode(cursor.getString(2));
                    cityList.add(city);
                    cursor.moveToNext();
                }
                listview.setAdapter(new ListAdapter());
                resetForm();
            }
        });

        /* 修改表數據 */
        bt_modify.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                ContentValues values = new ContentValues();
                values.put(CityBean.CITY, etCity.getText().toString().trim());
                values.put(CityBean.CODE, etCode.getText().toString().trim());
                db.update(SQLiteHelper.TB_NAME, values, CityBean.ID + "=" + cityList.get(POSTION).getId(), null);
                cityList.get(POSTION).setCity(etCity.getText().toString().trim());
                cityList.get(POSTION).setCode(etCode.getText().toString().trim());
                listview.setAdapter(new ListAdapter());
                resetForm();
            }
        });
    }

    /* 設置選中ListView的值 */
    public void setSelectedValues(int postion){
        POSTION = postion;
        etCity.setText(cityList.get(postion).getCity());
        etCode.setText(cityList.get(postion).getCode());
    }

    /* 重值form */
    public void resetForm(){
        etCity.setText("");
        etCode.setText("");
    }

    @Override
    protected void onDestroy() {
        db.delete(SQLiteHelper.TB_NAME, null, null);
        super.onDestroy();
    }

    private class ListAdapter extends BaseAdapter {
        public ListAdapter(){
            super();
        }
        @Override
        public int getCount() {
            return cityList.size();
        }

        @Override
        public Object getItem(int postion) {
            return postion;
        }

        @Override
        public long getItemId(int postion) {
            return postion;
        }

        @Override
        public View getView(final int postion, View view, ViewGroup parent) {
            view = getLayoutInflater().inflate(R.layout.listview, null);
            TextView tv = (TextView) view.findViewById(R.id.tvCity);
            tv.setText("" + cityList.get(postion).getCity());
            TextView bu = (TextView) view.findViewById(R.id.btRemove);
            bu.setText("刪除");//R.string.delete
            bu.setId(Integer.parseInt(cityList.get(postion).getId()));

            /* 刪除表數據 */
            bu.setOnClickListener(new Button.OnClickListener(){
                @Override
                public void onClick(View view) {
                    try{
                        db.delete(SQLiteHelper.TB_NAME, CityBean.ID + "=" + view.getId(), null);
                        cityList.remove(postion);
                        listview.setAdapter(new ListAdapter());
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                }
            });
            return view;
        }
    }
}

6):運行效果

7:源碼下載(放心這次是百度雲)密碼: ryv4

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM