Android學習總結——SQLite

來源:互聯網
上載者:User

標籤:

SQLiteDatabase類:

一.使用sql語句操作資料庫

SQLiteDatabase db = openOrCreateDatabase("database.db", MODE_PRIVATE,null);// (資料庫名稱,許可權,資料處理站)

db.execSQL("create table if not exists usertb(_id integer primary key autoincrement,name text not null,age integer not null,sex text not null)");// 執行任何SQL語句
db.execSQL("insert into usertb(name,sex,age)values(‘張三‘,‘女‘,18)");//插入資料


Cursor:遊標介面,提供了遍曆查詢結果的方法,如移動指標方法move(),擷取列值方法getString()等常用方法:
-getCount()總記錄條數
-isFirst()判斷是否第一條記錄
-isLast()判斷是否最後一條記錄
-moveToFirst()移動到第一條記錄
-moveToLast()移動到最後一條記錄
-move(int offset)移動到指定記錄
-moveToNext()移動到下一條記錄
-moveToprevious()移動到上一條記錄
-getColumnIndexOrThrow(String columnName)據列名稱擷取列索引
-getInt(int columnIndex)擷取指定列索引的int類型值
-getString(int columnIndex)擷取指定列索引的String類型值


Cursor c=db.rawQuery(“select*from table“,null);
if(c!=null){
  While(c.moveToNext()){}
}

 

package com.example.sqlitetest1;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //每個程式都有自己的資料庫,預設情況下互不干擾        //建立資料庫並開啟        SQLiteDatabase db=openOrCreateDatabase("usertb",MODE_PRIVATE,null);        String sqlcom="create table if not exists usertb(_id integer primary key autoincrement,name text,age integer,sex text)";        //執行sql語句        db.execSQL(sqlcom);        //向資料庫中插入資料        db.execSQL("insert into usertb(name,age,sex)values(‘張三‘,18,‘女‘)");        db.execSQL("insert into usertb(name,age,sex)values(‘張三‘,20,‘男‘)");        db.execSQL("insert into usertb(name,age,sex)values(‘李四‘,21,‘女‘)");        //查詢        Cursor cs=db.rawQuery("select * from usertb",null);        if(cs!=null){            while (cs.moveToNext()){                Log.i("info","id: "+cs.getString(cs.getColumnIndex("_id")));                Log.i("info","name: "+cs.getString(cs.getColumnIndex("name")));                Log.i("info","age: "+cs.getString(cs.getColumnIndex("age")));                Log.i("info","sex: "+cs.getString(cs.getColumnIndex("sex")));                Log.i("info","--------------------------------------------");            }            cs.close();        }        db.close();    }}

 

 

二.使用內建函數操作資料庫

1. ContentValues類
   儲存一組可以被ContentResolver處理的值,可以理解為它的Object Storage Service了多個索引值對
2. 使用ContentValues和內建函數插入資料庫
   ContentValues values = new ContentValues();
   values.put("name", "zhang76");
   values.put("sex", "man");
   values.put("age", 26);
   sqLiteDatabase.insert("studentdb", null, values);
   可以將values清空,並重新存值。
   values.clear();
   values.put("name", "張三");
   values.put("sex", "man");
   values.put("age", 27);
   sqLiteDatabase.insert("studentdb", null, values);
3. 更新和刪除
   sqLiteDatabase.update("stutb",values,"_id">?,new String[]{"1"});//將全部ID>1的人的性別改成女;
   sqLiteDatabase.delete("stutb","name like ?",new String[]{"%三%"});//刪除所有名字中帶有"三"的人
4. 通過Cursor類的getColumnNames()可以得到所有的列名
   if(cursors!=null){

    String[] columnNames = cursor.getColumnNames();
    while (cursor.moveToNext()) { //moveToNext()可以移動到下一行
       for(String columnName:columnNames) {
       Log.i(TAG, cursor.getString(cursor.getColumnIndex(columnName)));
       }
    }
    cursor.close();//關閉遊標
}
sqLiteDatabase.close();

 

package com.example.sqlitetest2;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.util.Log;public class MainActivity extends AppCompatActivity {    private static final String TABLENAME="usertb";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        SQLiteDatabase db2=openOrCreateDatabase("db",MODE_PRIVATE,null);        String sqlcom="create table if not exists "+TABLENAME+"(_id integer primary key autoincrement,name text,age integer,sex text)";        db2.execSQL(sqlcom);        ContentValues values=new ContentValues();        values.put("name","張三");        values.put("age",21);        values.put("sex","男");        db2.insert(TABLENAME,null,values);        values.clear();        values.put("name","李四");        values.put("age",24);        values.put("sex","女");        db2.insert(TABLENAME,null,values);        values.clear();        values.put("name","王五");        values.put("age",19);        values.put("sex","男");        db2.insert(TABLENAME,null,values);        values.clear();        values.put("name","張四");        values.put("age",19);        values.put("sex","女");        db2.insert(TABLENAME,null,values);        values.clear();        values.put("sex","女");        //將id>3的人的性別改為女        db2.update(TABLENAME,values,"_id>?",new String[]{"3"});        //刪除名字中帶有“三”的人        db2.delete(TABLENAME,"name like ?",new String[]{"%三%"});        //查詢        Cursor cs=db2.query(TABLENAME,null,"_id>?",new String[]{"0"},null,null,"name");//查出id>0的值,即所有的        if(cs!=null){            String[] columnNames=cs.getColumnNames();//查詢出所有的欄位            while (cs.moveToNext()){                for (String columnName:columnNames) {                    Log.i("info", cs.getString(cs.getColumnIndex(columnName)));                }            }            cs.close();        }        db2.close();    }}

 

SQLiteOpenHelper類:

SQLiteOpenHelper協助類,用於對資料庫進行建立和升級。

實現兩個方法:onCreate()方法用來實現建立資料庫、onUpgrade()用來實現升級資料庫

@Override//首次建立資料庫的時候調用,一般用來建庫/建表的操作
public void onCreate(SQLiteDatabase db) {
    // TODO 自動產生的方法存根
    db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,sex text not null,age integer not null)");
    db.execSQL("insert into stutb(name,sex,age)values(‘張三‘,‘女‘,18)");
}

@Override//當資料庫的版本發生變化的時候會自動執行
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO 自動產生的方法存根
}

 

Demo:

MyOpenHelper.class:

package com.example.sqlitetest3;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by xch on 2016/9/19. */public class MyOpenHelper extends SQLiteOpenHelper{    private static final String TABLENAME="stu";    public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {        super(context, name, factory, version);    }    @Override//首次建立資料庫時調用,一般用來建立資料庫 建立表    public void onCreate(SQLiteDatabase db) {        String sqlcom="create table if not exists "+TABLENAME+"(_id integer primary key autoincrement,name text,age integer,sex text)";        db.execSQL(sqlcom);        db.execSQL("insert into "+TABLENAME+"(name,sex,age)values(‘yang‘,‘男‘,20)");    }    @Override//版本更新時調用    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

 

MainActivity.class

package com.example.sqlitetest3;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        MyOpenHelper helper=new MyOpenHelper(MainActivity.this,"stu",null,1);        helper.getReadableDatabase();//擷取一個唯讀資料庫,不能寫入,不能更新,只能查詢        SQLiteDatabase database=helper.getWritableDatabase();        Cursor cs=database.rawQuery("select * from stu",null);        if(cs!=null){            String[] colmnNames=cs.getColumnNames();            while(cs.moveToNext()){                for (String cln:colmnNames ) {                    Log.i("info","ColumnNames:"+cs.getString(cs.getColumnIndex(cln)));                }            }            cs.close();        }        database.close();    }}

 

Android學習總結——SQLite

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.