android SQLite數據庫相關的操作

 SQLite數據庫相關的操作

 一.
SQLite數據庫的簡介:

Android中的數據庫存儲中包含SQLite。 SQLite是一個輕量級的數據庫,支持基本SQL語法,是常被採用的一種數據存儲方式。

Android爲此數據庫提供了一個名爲SQLiteDatabase的類,封裝了一些操作數據庫的API。

在Android應用中創建數據庫後數據庫文件是存儲在/data/ data/應用包名/databases/下。該文件可以連接android設備後用命令進入查看。

在電腦運行中它存儲在: .android/avd/avd.avd/userdata.img文件裏, 並在運行時移到內存。

關注如下三個類:
1.SQLiteOpenHelper:這是一個抽象類,需要重寫實例類。

2.SQLiteDatabase

3.Cursor

二.
SQLite數據庫的創建操作:
package com.example.test_sqlite;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
/**
 * 首先必須繼承自:SQLiteOpenHelper,實現其onCreate,onUpgrade方法
 *
 * @author wen
 */
public class DbHelper extends SQLiteOpenHelper {
 /**
  * 創建相關的數據庫
  *
  * @param context
  * :上下文菜單
  * @param name
  * :要創建的數據庫的名字
  * @param factory
  * :一般爲:null
  * @param version
  * :數據庫的版本號(>0)
  */
 public DbHelper(Context context, String name, CursorFactory factory,
   int version) {
  super(context, name, factory, version);
  // TODO Auto-generated constructor stub
 }
 /**
  * 在 onCreate的方法裏面進行建表操作,使用db.execSQL()方法; 此處創建一個表名爲Info的表,字段爲id與name
  */
 @Override
 public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  db.execSQL("create table Info( _id integer primary key autoincrement,id integer(5),name varcha(10))"); 
 }
 /**
  * 數據庫的升級操作;當newVersion大於oldVersion時進行數據庫的升級操作
  *
  * if(newVersion>oldVersion){
  *
  * String sql="drop table if exists table<表名>";//刪除掉之前的數據庫
  *
  * db.execSQL(sql);
  */
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // TODO Auto-generated method stub
 }
}


三.
對SQLite數據庫使用的相關的操作:


<增>向數據庫添加相關的數據
insert
<一>  使用SQL語句進行添加操作 :  
   insert into 表名(字段名) values(值); 

SQLiteDatabase database = db.getWritableDatabase();
String insert="INSERT INTO info(id,name)VALUES(15,'張三')";
 database.execSQL(insert);
<二> 使用ContentValues的方式進行添加
SQLiteDatabase database = db.getWritableDatabase();
ContentValues values = new ContentValues();
   values.put("id", 60);
   values.put("name", "張三");
   //insert(table<表名>, nullColumnHack<條件>, values<符合條件的替換值>)
   database.insert("info", null, values);

<刪>刪除數據庫中的相關的數據
delete
delete from 表名 where 條件;

delete from Info  where id<2000<條件值>;
String delete=delete from Info where name='張三' and id=15;
 database.execSQL(delete);
.delete(table<表名> , whereClause  <刪除條件>,  whereArgs<刪除條件值數組>)
 
eg:
 database.delete("info", "id=?", new String[] { String.valueOf(15) });

<改>修改數據庫中相關的數據
update 表名 set 字段1=值1, 字段2=值2 where 條件;

update Info  set name='李四' where id=17;
 


update(String table<表名>,ContentValues values<要修改的數據>,String whereClause<修改條件>, String[] whereArgs<修改條件值>)

eg:
database.update("info", values, "id=?", new String[] { String.valueOf(17) });
<查>依據相關的條件進行查詢操作




SQL語句操作
查詢所有數據
select * from 表名;
--->select * from Info;
模糊查詢
select * from 表名 where 字段 like '%條件%';
select * from exam_books where bookname like '%馬克思%';
select * from exam_books where bookname like '馬__';
(查詢書名中第一個字是“馬”,後面有兩個字)
按照一定的條件查找
select * from 表名 where 條件;
select * from info where id<20;
複合查詢
select * from 表名 where 條件 and 另一個條件;
select * from exam_questions  where coursecode = '03706' and chapterid = 2;

範圍條件查詢
select * from 表名 where 字段 between  值1  and 值2 ;
select * from info where id<20 and id>10;
select * from info where id between 10 and 20;
 
查詢個數
select count(*) from 表名 where 條件
select count(*) as 別名 from exam_questions  where coursecode = '03706' and chapterid = 2;
查詢結果按順序排列
升序/降序(asc/desc
select * from 表名 where 條件 order by 字段 desc<降序>/asc<升序>;
select * from info where id = 10 order by chapterid;
按照limit查找某個範圍內的數據
SELECT  * FROM info order by id asc  limit  0, 15;(代表查找出的第一頁的信息,從0開始,共有15條數據)
SELECT  * FROM exam_questions  order by id asc  limit 15, 15;(代表查找出的第二頁的信息,從15開始的十五條數據)
【備註:】limit後面的兩個數字中:第一個代表偏移量,第二個代表每頁展示的數量
que
r
y
語句操作

.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit);//返回一個Cusor對象

String table  -----------    要查詢的表名

String[] columns---------  返回哪一列,如果參數是null,則返回所有列(不鼓勵設置爲null,以免防止讀出的數據沒有用到) 

String selection---------返回哪一行的過濾器,格式是SQL的WHERE,設置爲null,返回這個table的所有行.

String[] selectionArgs-----------在selection字段中可能會用'?'的形式來加一些額外的參數,這個的selectionArgs字段就是把selection字段的條件填充好 

String groupBy  -----------一個過濾器,如何來分組---設置爲null則不分組 

String having--------------分組後聚合的過濾條件 

String orderBy  ------排序,格式是SQL的ORDER一樣.設置null使用默認(無序unonder)排列.    
          
String limit   --------返回的行數,設置爲null表示沒有限制條款.

.rawQuery(sql, selectionArgs )

String sql--------select語句(sql查詢語句)
String   []  selectionArgs------------select語句中的佔位符的值(就是eg:   "_id=?"   中的?的值),沒有就填null

 

<四>附錄:

SQL :http://www.w3school.com.cn/sql/sql_delete.asp

SQL 語法

數據庫表

一個數據庫通常包含一個或多個表。每個表由一個名字標識(例如“客戶”或者“訂單”)。表包含帶有數據的記錄(行)。

下面的例子是一個名爲 "Persons" 的表:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

上面的表包含三條記錄(每一條對應一個人)和五個列(Id、姓、名、地址和城市)。

SQL 語句

您需要在數據庫上執行的大部分工作都由 SQL 語句完成。

下面的語句從表中選取 LastName 列的數據:

SELECT LastName FROM Persons

結果集類似這樣:

LastName
Adams
Bush
Carter

在本教程中,我們將爲您講解各種不同的 SQL 語句。

重要事項

一定要記住,SQL 對大小寫不敏感

SQL 語句後面的分號?

某些數據庫系統要求在每條 SQL 命令的末端使用分號。在我們的教程中不使用分號。

分號是在數據庫系統中分隔每條 SQL 語句的標準方法,這樣就可以在對服務器的相同請求中執行一條以上的語句。

如果您使用的是 MS Access 和 SQL Server 2000,則不必在每條 SQL 語句之後使用分號,不過某些數據庫軟件要求必須使用分號。

SQL DML 和 DDL

可以把 SQL 分爲兩個部分:數據操作語言 (DML) 和 數據定義語言 (DDL)。

SQL (結構化查詢語言)是用於執行查詢的語法。但是 SQL 語言也包含用於更新、插入和刪除記錄的語法。

查詢和更新指令構成了 SQL 的 DML 部分:

  • SELECT - 從數據庫表中獲取數據
  • UPDATE - 更新數據庫表中的數據
  • DELETE - 從數據庫表中刪除數據
  • INSERT INTO - 向數據庫表中插入數據

SQL 的數據定義語言 (DDL) 部分使我們有能力創建或刪除表格。我們也可以定義索引(鍵),規定表之間的鏈接,以及施加表間的約束。

SQL 中最重要的 DDL 語句:

  • CREATE DATABASE - 創建新數據庫
  • ALTER DATABASE - 修改數據庫
  • CREATE TABLE - 創建新表
  • ALTER TABLE - 變更(改變)數據庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 創建索引(搜索鍵)
  • DROP INDEX - 刪除索引

SQL SELECT 語句

本章講解 SELECT 和 SELECT * 語句。

SQL SELECT 語句

SELECT 語句用於從表中選取數據。

結果被存儲在一個結果表中(稱爲結果集)。

SQL SELECT 語法

SELECT 列名稱 FROM 表名稱

以及:

SELECT * FROM 表名稱

註釋:SQL 語句對大小寫不敏感。SELECT 等效於 select。

SQL SELECT 實例

如需獲取名爲 "LastName" 和 "FirstName" 的列的內容(從名爲 "Persons" 的數據庫表),請使用類似這樣的 SELECT 語句:

SELECT LastName,FirstName FROM Persons

"Persons" 表:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

結果:

LastName FirstName
Adams John
Bush George
Carter Thomas

SQL SELECT * 實例

現在我們希望從 "Persons" 表中選取所有的列。

請使用符號 * 取代列的名稱,就像這樣:

SELECT * FROM Persons

提示:星號(*)是選取所有列的快捷方式。

結果:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

在結果集(result-set)中導航

由 SQL 查詢程序獲得的結果被存放在一個結果集中。大多數數據庫軟件系統都允許使用編程函數在結果集中進行導航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record 等等。

類似這些編程函數不在本教程講解之列。如需學習通過函數調用訪問數據的知識,請訪問我們的 ADO 教程 和 PHP 教程

SQL SELECT DISTINCT 語句

本章講解 SELECT DISTINCT 語句。

SQL SELECT DISTINCT 語句

在表中,可能會包含重複值。這並不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。

關鍵詞 DISTINCT 用於返回唯一不同的值。

語法:

SELECT DISTINCT 列名稱 FROM 表名稱

使用 DISTINCT 關鍵詞

如果要從 "Company" 列中選取所有的值,我們需要使用 SELECT 語句:

SELECT Company FROM Orders

"Orders"表:

Company OrderNumber
IBM 3532
W3School 2356
Apple 4698
W3School 6953

結果:

Company
IBM
W3School
Apple
W3School

請注意,在結果集中,W3School 被列出了兩次。

如需從 Company" 列中僅選取唯一不同的值,我們需要使用 SELECT DISTINCT 語句:

SELECT DISTINCT Company FROM Orders 

結果:

Company
IBM
W3School
Apple

現在,在結果集中,"W3School" 僅被列出了一次。

SQL WHERE 子句

WHERE 子句用於規定選擇的標準。

WHERE 子句

如需有條件地從表中選取數據,可將 WHERE 子句添加到 SELECT 語句。

語法

SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值

下面的運算符可在 WHERE 子句中使用:

操作符 描述
= 等於
<> 不等於
> 大於
< 小於
>= 大於等於
<= 小於等於
BETWEEN 在某個範圍內
LIKE 搜索某種模式

註釋:在某些版本的 SQL 中,操作符 <> 可以寫爲 !=。

使用 WHERE 子句

如果只希望選取居住在城市 "Beijing" 中的人,我們需要向 SELECT 語句添加 WHERE 子句:

SELECT * FROM Persons WHERE City='Beijing'

"Persons" 表

LastName FirstName Address City Year
Adams John Oxford Street London 1970
Bush George Fifth Avenue New York 1975
Carter Thomas Changan Street Beijing 1980
Gates Bill Xuanwumen 10 Beijing 1985

結果:

LastName FirstName Address City Year
Carter Thomas Changan Street Beijing 1980
Gates Bill Xuanwumen 10 Beijing 1985

引號的使用

請注意,我們在例子中的條件值周圍使用的是單引號。

SQL 使用單引號來環繞文本值(大部分數據庫系統也接受雙引號)。如果是數值,請不要使用引號。

文本值:

這是正確的:
SELECT * FROM Persons WHERE FirstName='Bush'

這是錯誤的:
SELECT * FROM Persons WHERE FirstName=Bush

數值:

這是正確的:
SELECT * FROM Persons WHERE Year>1965

這是錯誤的:
SELECT * FROM Persons WHERE Year>'1965'

SQL AND & OR 運算符

AND 和 OR 運算符用於基於一個以上的條件對記錄進行過濾。

AND 和 OR 運算符

AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結合起來。

如果第一個條件和第二個條件都成立,則 AND 運算符顯示一條記錄。

如果第一個條件和第二個條件中只要有一個成立,則 OR 運算符顯示一條記錄。

原始的表 (用在例子中的):

LastName FirstName Address City
Adams John Oxford Street London
Bush George Fifth Avenue New York
Carter Thomas Changan Street Beijing
Carter William Xuanwumen 10 Beijing

AND 運算符實例

使用 AND 來顯示所有姓爲 "Carter" 並且名爲 "Thomas" 的人:

SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'

結果:

LastName FirstName Address City
Carter Thomas Changan Street Beijing

OR 運算符實例

使用 OR 來顯示所有姓爲 "Carter" 或者名爲 "Thomas" 的人:

SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'

結果:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Carter William Xuanwumen 10 Beijing

結合 AND 和 OR 運算符

我們也可以把 AND 和 OR 結合起來(使用圓括號來組成複雜的表達式):

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'

結果:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Carter William Xuanwumen 10 Beijing

SQL ORDER BY 子句

ORDER BY 語句用於對結果集進行排序。

ORDER BY 語句

ORDER BY 語句用於根據指定的列對結果集進行排序。

ORDER BY 語句默認按照升序對記錄進行排序。

如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。

原始的表 (用在例子中的):

Orders 表:

Company OrderNumber
IBM 3532
W3School 2356
Apple 4698
W3School 6953

實例 1

以字母順序顯示公司名稱:

SELECT Company, OrderNumber FROM Orders ORDER BY Company

結果:

Company OrderNumber
Apple 4698
IBM 3532
W3School 6953
W3School 2356

實例 2

以字母順序顯示公司名稱(Company),並以數字順序顯示順序號(OrderNumber):

SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

結果:

Company OrderNumber
Apple 4698
IBM 3532
W3School 2356
W3School 6953

實例 3

以逆字母順序顯示公司名稱:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

結果:

Company OrderNumber
W3School 6953
W3School 2356
IBM 3532
Apple 4698

實例 4

以逆字母順序顯示公司名稱,並以數字順序顯示順序號:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

結果:

Company OrderNumber
W3School 2356
W3School 6953
IBM 3532
Apple 4698

注意:在以上的結果中有兩個相等的公司名稱 (W3School)。只有這一次,在第一列中有相同的值時,第二列是以升序排列的。如果第一列中有些值爲 nulls 時,情況也是這樣的。

SQL INSERT INTO 語句

INSERT INTO 語句

INSERT INTO 語句用於向表格中插入新的行。

語法

INSERT INTO 表名稱 VALUES (值1, 值2,....)

我們也可以指定所要插入數據的列:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

插入新的行

"Persons" 表:

LastName FirstName Address City
Carter Thomas Changan Street Beijing

SQL 語句:

INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

結果:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing

在指定的列中插入數據

"Persons" 表:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing

SQL 語句:

INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

結果:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing
Wilson

Champs-Elysees

SQL UPDATE 語句

Update 語句

Update 語句用於修改表中的數據。

語法:

UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

Person:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson

Champs-Elysees

更新某一行中的一個列

我們爲 lastname 是 "Wilson" 的人添加 firstname:

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 

結果:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Fred Champs-Elysees

更新某一行中的若干列

我們會修改地址(address),並添加城市名稱(city):

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'

結果:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Fred Zhongshan 23 Nanjing

SQL DELETE 語句

DELETE 語句

DELETE 語句用於刪除表中的行。

語法

DELETE FROM 表名稱 WHERE 列名稱 = 值

Person:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Fred Zhongshan 23 Nanjing

刪除某行

"Fred Wilson" 會被刪除:

DELETE FROM Person WHERE LastName = 'Wilson' 

結果:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing

刪除所有行

可以在不刪除表的情況下刪除所有的行。這意味着表的結構、屬性和索引都是完整的:

DELETE FROM table_name

或者:

DELETE * FROM table_name

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章