1. 程式人生 > >SQLite資料庫之資料新增與刪除

SQLite資料庫之資料新增與刪除

-------------------------------------- SQLite資料庫-------------------------------------- Android自帶SQLite工具類SQLiteOpenHelper
  1. 先自定義一個類繼承自SQLiteOpenHelper
  2. 建立一個構造方法
  3. 重寫兩個建立資料庫的方法onCreate()和onUpgrade(),分別是建立和更新資料庫。
publicclassDBOpenHelperextendsSQLiteOpenHelper{publicDBOpenHelper(Context context
,String name,SQLiteDatabase.CursorFactory factory,int version){
super(context, name, factory, version);}@Override//資料庫生成publicvoid onCreate(SQLiteDatabase sqLiteDatabase){}@Override//資料庫升級publicvoid onUpgrade(SQLiteDatabase sqLiteDatabase,int i,int i1){}}
  • 構造方法第二個引數是資料庫的名稱。第三個是遊標工廠,資料庫查詢結果的物件,Cursor相當於一個指標,每讀取一個遊標下移。一般遊標設定為null。Version資料庫版本。

  •     在onCreate()方法中建立表。 sqLiteDatabase。execSQL(""); SQLite官網SQLite.org其中有SQL操作語句
  • 在MainActivity中的onCreate中建立DBOpenHelper物件,並且傳入引數。 
    DBOpenHelper helper=newDBOpenerHelper(this,"資料庫名稱.db",null,1);
  • 呼叫可寫的方法。返回物件是SQLite資料庫 
SQLiteDatabase databaseWriter=helper.getWritableDatabase();
  • 然後建立一個ContentValues物件,它是Android封裝的一條資料 
    ContentValues cv=newContentValues();    cv.put("name","小張");    cv.put("sex","男");
  • 向可寫的資料庫中插入資料,呼叫insert("表名","空列的填充用null",values);方法 //values就是上述的物件
    databaseWriter.insert("user",null,cv);    databaseWriter.close();
  • 建立可讀的方法。
    • 呼叫query("表名",”返回哪幾列的資料“,”查詢的條件“,”查詢的條件的引數“,”“,”“,"")方法查詢資料。
      • 返回哪幾列的資料返回的是一個數組,如查詢name列,可寫為new String[]{"name"},null預設返回所有列資料。
      • 查詢的條件的引數返回的是一個字串陣列。 返回Cursor(遊標)型別物件
Cursor c=dbRead.query("user",newString[]{"name","sex"},"name=?",newString[]{"小張"},null,null);
  • 利用迴圈移到下一個資料,讀值
    while(c.moveToNext()){String name = c.getString(c.getColumnIndex("name"));//利用列的索引獲取使用者名稱String sex=c.getString(c.getColumnIndex("sex"));    }
將資料呈現在ListView中
  1. 主類需要繼承ListActivity
  2. layout中新增ListView
  • 利用Curson物件建立一個SimpleCursonAdapter物件
    • private  SimpleCursonAdapter  adapter;
    • adapter=newSimpleCursonAdapter(context,layout,Cursor,from,to);
    • 建立兩個顯示文字,顯示使用者名稱和性別
    adapter=new SimpleCursonAdapter(this,layout,c,newString[]{"name","sex"},newint[]{R.id.tvName,R.id.tvSex});
  • 使用setListAdapter呈現
    setListAdapter(adapter);
  • 如果使用Android中的SimpleCursonAdapter,必須要求資料庫中有一列名為”_id"。
  • 因此要回到工具類SQLiteOpenHelper中的onCreate方法中,在執行建立table語句中新增一列"_id integer primary key autoincrement"
    sqliteDatabase.execSQL("create table user(_id integer primary key autoincrement,name text default null,sex text default null)");
    在layout中建立兩個文字框和一個新增按鈕,用於新增使用者名稱和性別資料。
    分別在主類中宣告,新增按鈕建立監聽。
//全域性中定義    private DBOpenHelper helper;    private SQLiteDatabasedatabaseWriter,databaseRead;privateOnclick btnAddListener=newOnClickListener(){publicvoid onClick(View v){ContentValues cv = new ContentValues();              cv.put("name",et_name.getText().toString());              cv.put("sex",et_sex.getText().toString());              databaseWriter.insert("user",null,cv);refreshListView();   }};        btn_add.setOnClickListener(btnAddListener);
將Cursor的資料庫查詢方法放到一個新的方法refreshListView()中,可以保持ListView的重新整理狀態。
privatevoid refreshListView(){  //兩次呼叫該方法 類中呼叫一次。Cursor c = databaseRead.query("user",null,null,null,null,null,null);             adapter.changeCursor(c);}                
設定彈出對話方塊,將某一條資料刪除
  • 設定列表項的長按監聽事件
   getListView().setOnItemLongCilckListener(newOnItemLongCilckListener(public boolean onItemLongClick(AdapterView<?> parent,View view,final int position,long id){       new AlertDialog.Builder(MainActivity.this).setTitle("提醒").setMessage("您確定要刪除該項嗎").setNegativeButton("取消",null).setPositiveButton("確定",new DialogInterface.OnClickListener(){                   public void onClick(DialogInterface dialog,int which){                          Cursor c = adapeter.getCursor();                          c.moveToPosition(position);                          int itemId=c.getInt(c.getColunmIndex("_id"):                          databaseWriter.delete("user","_id=?",new String[]{itemId+""});                          refreshListView();                   }             }).show();//建立一個彈出對話方塊              return true;  //是否執行長按}  ));
------------------完整程式碼------------------ DBOpenHelper
import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by 59666 on 2016/10/20. */publicclassDBOpenHelperextendsSQLiteOpenHelper{publicDBOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){super(context, name, factory, version);}@Overridepublicvoid onCreate(SQLiteDatabase sqLiteDatabase){        sqLiteDatabase.execSQL("create table user(_id integer primary key autoincrement,name text default null,sex text default null)");}@Overridepublicvoid onUpgrade(SQLiteDatabase sqLiteDatabase,int i,int i1){}}
主類
import android.content.ContentValues;import android.content.DialogInterface;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.support.v4.widget.SimpleCursorAdapter;

相關推薦

SQLite資料庫資料新增刪除

-------------------------------------- SQLite資料庫-------------------------------------- Androi

Qt5.8QListWidgetItem的新增刪除

1.實現的功能 在listWidget中水平添QListWidgetItem,點選按鈕刪除所有QListWidgetItem,下面直接上程式碼,程式碼中有每一步的註釋。 2.程式碼實現 #include "mainwindow.h" #include "ui_mainwindow.h" #incl

react+antd系列Form表單(1):新增刪除

在用antd的時候,我們如果要對錶單進行新增和刪除該怎麼弄呢,如下: import { connect } from 'dva'; import { Form, Input, Button } from 'antd'; import styles from './eg1.css';

資料庫MySQL如何新增刪除列?

文章目錄 新增/刪除 列 1. 新增單列 2. 新增多列:無法指定FIRST/AFTER、只能預設為最後方。 3. 刪除單列 4. 刪除多列 新增/刪除 列 1

Java JDBC資料庫 讀取,新增,刪除,修改

下載 Oracle 或者 Mysql Jar 驅動 mysql-connector-java-3.0.10-stable-bin.jar ojdbc14.jar package com.jdbc.test; import java.sql.Connection;

解決Sqlite資料庫資料刪除後佔用空間不變的問題

sqlite資料庫庫檔案在使用過後,隨著資料的增多,檔案大小也會隨之變大。但是在把所有表中資料刪除以後發現sqlite資料庫檔案大小沒有變化,還是佔用原來大小的空間。 造成這種情況的原因是:sqlite在之前使用的時候,隨著資料的插入,會分配磁碟空間來供使用,在刪除資料以後

從零開始學 Web jQuery(四)元素的建立新增刪除,自定義屬性

一、元素的建立新增和刪除 1、方式一:以物件的方式建立元素 append,appendTo :在被選元素所有子元素的結尾插入內容(增加子元素)。 prepend,prependTo:在被選元素所有子元素的開頭插入元素(增加子元素)。 before:在當前被選元素之後插入內容(相當於增加兄弟元素)。 af

React實現表單資料新增刪除

最近在學習React,做了一個簡單的Demo,寫成部落格,用以自勉。Demo功能:在輸入框中輸入資料後,點選儲存按鈕,資料將會逐一顯示在輸入框下方,點選儲存後顯示的任何一條資料,該資料即可被刪除。 實現思路 在開始實現之前,我們需要理清我們的思路,這

Netty原始碼分析ChannelPipeline(二)—ChannelHandler的新增刪除

上篇文章中,我們對Netty中ChannelPipeline的構造與初始化進行了分析與總結,本篇文章我們將對ChannelHandler的新增與刪除操作進行具體的的程式碼分析; 一、ChannelHandler的新增 下面是Netty官方的一段demo原始碼,可以看到在服務端初始化時執行了向Channel

MySQL外來鍵新增刪除

ALTER table erp_bom_detail ADD CONSTRAINT `FK_bom_detail` FOREIGN KEY (`bom_id`) REFERENCES erp_bom(`bom_id`)   ALTER 的是子表   alter t

四、資料庫資料型別

  首先補充點了解的小知識; select * from mysql.user #顯示出來亂了 select * from mysql.user\G #加了\G後一行一行顯示了 一、資料型別:分不同種類去存不同型別的資料 儲存引

hibernate多對多關係的新增刪除

程式碼 bookdao public Integer save(Book book) { Session session = SessionFactoryUtils.getSession(); Transaction transaction = session.beginTran

《SQL入門經典》筆記(第二章:建立資料庫資料型別)

“建立資料庫”包括五個內容:定義資料結構、管理資料庫物件、規格化過程、操作資料以及管理資料庫事務   1. 什麼是資料型別? 資料型別用於指定特定列所包含資料的規則,它決定了資料儲存在列裡的方式。SQL最基本的資料型別有字串、數值、日期和時間(其實每個實現都有自己的資料型別

JavaSE資料型別運算子

package cn.shuju.java; import java.io.IOException; //本節目標 //1.java識別符號與關鍵字 //2.java資料型別劃分 //3.java運算子 //對於類和變數的命名,java的標準命名規範為“駝峰”命名法 //對於類名,類

資料庫資料型別

首先補充點了解的小知識; select * from mysql.user #顯示出來亂了 select * from mysql.user\G #加了\G後一行一行顯示了 一、資料型別:分不同種類去存不同型別的資料 儲存引擎決定了表的型別,而表記憶體放的資料也要有不同的型別,每種資料型別

html中元素動態新增刪除

<div class="unit" > <label>產品引數</label> <input type="button" value="新增" onclick="addProduc

Hibernate持久層框架使用【三】資料查詢刪除

Hibernate資料查詢可以通過hibernate封裝好的兩個方法來實現 分別是get方法和load方法,這兩個方法都是通過主鍵來查詢資料 get方法: 新建個get.class類來測試一下,下面貼上程式碼 public class get { public static vo

Hibernate持久層框架使用【二】資料新增修改

Hibernate的資料新增與修改 新增資料: hibernate提供了這幾種新增資料的方法,分別是: save方法、saveOrUpdate方法、merge方法以及persist方法 在對資料庫進行操作時,過程是先開啟事務—操作資料庫—提交事務 上一篇部落格寫的hibernat

網站運維技術實踐資料分析報警

  對於日益積累的監控資料,顯然需要有規劃地進行儲存和分析,做到“故障沒來時有預防,故障來臨時有提示,故障到來時有解決方案”。      一、時間序列儲存      對於大多數監控資料,都有一個天然的類似資料庫主鍵的屬性,那就是時間。所以,通常情況下,各類監控系統的後臺資料庫都可以認為是時間序列的資

部落格資料結構演算法目錄

一、結構 為了能夠方便的檢視資料結構與演算法知識點,我將文章目錄羅列了一下 (1)演算法 1.複雜度分析 演算法 時間和空間複雜度的簡單理解小述 2.排序演算法知識點總結 演算法 直接插入排序小述 演算法 希爾排序小述 演算法 氣