SQLite3 觸發器、檢視的案例
介紹:
安卓預設的資料是SQLite,但SQLite3.6.19之前是不支援外來鍵的,如果有兩張表需要關聯,用外來鍵是最省事的,但不支援的話怎麼辦呢?這裡就有一個解決辦法,就是用事務將兩張表關聯起來,並且最後生成一張檢視。
現有兩張表
Employees
Dept
檢視
ViewEmps
:顯示僱員資訊和他所在的部門
建立資料庫
自定義一個輔助類繼承SQLiteOpenHelper類
1.onCreate(SQLiteDatabase db)
: 當資料庫被建立的時候,能夠生成表,並建立檢視跟觸發器。2.
onUpgrade(SQLiteDatabse db, int oldVersion, int newVersion)
- publicclass DatabaseHelper extends SQLiteOpenHelper {
- staticfinal String dbName="demoDB";
- staticfinal String employeeTable="Employees";
- staticfinal String colID="EmployeeID";
- staticfinal String colName="EmployeeName";
- staticfinal String colAge="Age";
-
staticfinal
- staticfinal String deptTable="Dept";
- staticfinal String colDeptID="DeptID";
- staticfinal String colDeptName="DeptName";
- staticfinal String viewEmps="ViewEmps";
- public DatabaseHelper(Context context) {
- super(context, dbName, null,33);
- }
-
public
- // TODO Auto-generated method stub
- db.execSQL("CREATE TABLE "+deptTable+" ("+colDeptID+ " INTEGER PRIMARY KEY , "+
- colDeptName+ " TEXT)");
- db.execSQL("CREATE TABLE "+employeeTable+"
- ("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
- colName+" TEXT, "+colAge+" Integer, "+colDept+"
- INTEGER NOT NULL ,FOREIGN KEY ("+colDept+") REFERENCES
- "+deptTable+" ("+colDeptID+"));");
- //建立觸發器
- db.execSQL("CREATE TRIGGER fk_empdept_deptid " +
- " BEFORE INSERT "+
- " ON "+employeeTable+
- " FOR EACH ROW BEGIN"+
- " SELECT CASE WHEN ((SELECT "+colDeptID+" FROM "+deptTable+"
- WHERE "+colDeptID+"=new."+colDept+" ) IS NULL)"+
- " THEN RAISE (ABORT,'Foreign Key Violation') END;"+
- " END;");
- //建立檢視
- db.execSQL("CREATE VIEW "+viewEmps+
- " AS SELECT "+employeeTable+"."+colID+" AS _id,"+
- " "+employeeTable+"."+colName+","+
- " "+employeeTable+"."+colAge+","+
- " "+deptTable+"."+colDeptName+""+
- " FROM "+employeeTable+" JOIN "+deptTable+
- " ON "+employeeTable+"."+colDept+" ="+deptTable+"."+colDeptID
- );
- }
更新庫中的表
- publicvoid onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // TODO Auto-generated method stub
- db.execSQL("DROP TABLE IF EXISTS "+employeeTable);
- db.execSQL("DROP TABLE IF EXISTS "+deptTable);
- db.execSQL("DROP TRIGGER IF EXISTS fk_empdept_deptid");
- db.execSQL("DROP VIEW IF EXISTS "+viewEmps);
- onCreate(db);
- }
- SQLiteDatabase db=this.getWritableDatabase();
- ContentValues cv=new ContentValues();
- cv.put(colDeptID, 1);
- cv.put(colDeptName, "Sales");
- db.insert(deptTable, colDeptID, cv);
- cv.put(colDeptID, 2);
- cv.put(colDeptName, "IT");
- db.insert(deptTable, colDeptID, cv);
- db.close();
更新資料
- publicint UpdateEmp(Employee emp)
- {
- SQLiteDatabase db=this.getWritableDatabase();
- ContentValues cv=new ContentValues();
- cv.put(colName, emp.getName());
- cv.put(colAge, emp.getAge());
- cv.put(colDept, emp.getDept());
- return db.update(employeeTable, cv, colID+"=?",
- new String []{String.valueOf(emp.getID())});
- }
刪除資料
- publicvoid DeleteEmp(Employee emp)
- {
- SQLiteDatabase db=this.getWritableDatabase();
- db.delete(employeeTable,colID+"=?", new String [] {String.valueOf(emp.getID())});
- db.close();
- }
取得所有部門資訊
- Cursor getAllDepts()
- {
- SQLiteDatabase db=this.getReadableDatabase();
- Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id,
- "+colDeptName+" from "+deptTable,new String [] {});
- return cur;
- }
取得部門內僱員資訊
- public Cursor getEmpByDept(String Dept)
- {
- SQLiteDatabase db=this.getReadableDatabase();
- String [] columns=new String[]{"_id",colName,colAge,colDeptName};
- Cursor c=db.query(viewEmps, columns, colDeptName+"=?",
- new String[]{Dept}, null, null, null);
- return c;
- }
取得部門ID
- publicint GetDeptID(String Dept)
- {
- SQLiteDatabase db=this.getReadableDatabase();
- Cursor c=db.query(deptTable, new String[]{colDeptID+" as _id",colDeptName},
- colDeptName+"=?", new String[]{Dept}, null, null, null);
- //Cursor c=db.rawQuery("SELECT "+colDeptID+" as _id FROM "+deptTable+"
- //WHERE "+colDeptName+"=?", new String []{Dept});
- c.moveToFirst();
- return c.getInt(c.getColumnIndex("_id"));
- }
相關推薦
SQLite3 觸發器、檢視的案例
介紹: 安卓預設的資料是SQLite,但SQLite3.6.19之前是不支援外來鍵的,如果有兩張表需要關聯,用外來鍵是最省事的,但不支援的話怎麼辦呢?這裡就有一個解決辦法,就是用事務將兩張表關聯起來,並且最後生成一張檢視。 現有兩張表 EmployeesDept檢視 V
修改MySQL儲存過程、函式、事件、觸發器、檢視的DEFINER
#修改儲存過程、函式、事件、觸發器、檢視的 DEFINER select definer from mysql.proc; update mysql.proc set definer='[email protected]%'; select DEFINER fro
修改MySql的儲存過程、函式、事件、觸發器、檢視的 DEFINER
#修改儲存過程、函式、事件、觸發器、檢視的 DEFINER select definer from mysql.proc; update mysql.proc set definer='[email protected]'; or update mysql.pro
Mysql觸發器、檢視、儲存過程詳解(例項)
/*觸發器trigger*/觸發器的概念:監視某種情況並出發某種操作例如:一個電子商城商品表goods簡稱g:主鍵 商品名 庫存 1 電腦 282 手錶 120訂單表o:訂單主鍵 訂單外來鍵 購買數量1
sql server 2000/2005/2008 判斷儲存過程、觸發器、檢視是否存在並刪除
--判斷是否存在addOneArticle這個儲存過程 if Exists(select name from sysobjects where NAME = 'addOneArticle' and type='P') drop procedure addOneArticle --判斷是否存在coun
五十七、檢視、模板配合使用,缺一不可、MVT綜合案例
一、檢視函式的使用 注意:檢視函式必須有一個引數request,進行處理之後,需要返回一個HttpResponse的類物件, hello python就是返回給瀏覽器顯示的內容。 1、在專案的views.py 檔案中寫入函式 2、進行url配置:建立url地址和檢視的對應關
MySQL中索引、檢視、觸發器詳解
一、索引 1.概述 所有 MySQL 列型別都可以被索引,對相關列使用索引是提高 SELECT 操作效能的最佳途 徑。根據儲存引擎可以定義每個表的最大索引數和最大索引長度,每種儲存引擎(如 MyISAM、 InnoDB、BDB、MEMORY 等)對每個表至少支援 16 個索引
mysql查詢指定庫的所有表的記錄數、外來鍵、索引、檢視、觸發器等
-- 查詢指定庫的所有表資料行數 use information_schema; select table_name,table_rows from tables where TABLE_SCHEMA = 'cs_lanzhou' order by table
SQL Server觸發器建立、刪除、修改、檢視
教程貼士:本教程為大家介紹SQL Server觸發器建立、刪除、修改、檢視方法。 一:觸發器是一種特殊的儲存過程,它不能被顯式地呼叫,而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地啟用。所以觸發器可以用來實現對錶實施複雜的完整性約束。 二:SQL Server
檢視、觸發器、事務、儲存過程、函式,流程控制
檢視 檢視是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的資料集,併為其命名】,使用者使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來使用。 使用檢視我們可以把查詢過程中的臨時表摘出來,用檢視去實現,這樣以後再想操作該臨時表的資料時就無需重寫複雜的sql了,直接去檢視中查詢即可,
mysql-檢視、觸發器、事務、儲存過程、函式
目錄 檢視 觸發器 事務 儲存過程 流程控制 一、檢視 檢視是由查詢結果構成的一張虛擬表,和真實的表一樣,帶有名稱的列和行資料 強調:檢視是永久儲存的,但是檢視儲存的不是資料,只是一條sql語句 檢視的特點: 檢視的列可以來自不同的表,是表的抽象和邏輯意義上建立的新關係。
MySQL:檢視、觸發器、儲存過程、事務
檢視: 檢視,虛擬表 建立虛擬表: # 語法: # create view 虛擬表名稱 as 虛擬表; create view course_and_teacher as select * from course inner join teacher on course.teacher_id =
SQL的綜合案例(觸發器、函式、遊標、儲存過程)
下面是一個學生資訊的建立 在這裡就不建立資料庫了 CREATE TABLE CLASS ( class_id int IDENTITY PRIMARY KEY, --班級ID class_name Varchar(50), --班級名稱 cla
sql server 查看錶、檢視、觸發器、儲存過程等組成sql查詢語句
1. 檢視使用者表 select name from sys.tables select name from sys.objects where type='U' select name from sysobjects where xtype='U' 其中type
【轉】MySQL資料庫 外來鍵、檢視、儲存過程、觸發器的優缺點
https://www.yiibai.com/mysql/introduction-sql-views.html 檢視 使用資料庫檢視的優點 資料庫檢視允許簡化複雜查詢:資料庫檢視由與許多基礎表相關聯的SQL語句定義。 您可以使用資料庫檢視來隱藏終端使用者和外部應用
表、檢視、儲存過程、函式、觸發器、事件
儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中。使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的一個重要物件,任何一個設計良好的資料庫應用程式都應該用到儲存過程。函式l過程不必返回值l函式必須返回值l過程可
MySQL之檢視、觸發器、事務、儲存過程
http://www.cnblogs.com/linhaifeng/articles/7495918.html 檢視 試圖就是一個虛擬表(非真實存在),本質就是【根據sql語句獲取動態的資料集,併為其命名】,使用者使用時只需要使用名稱即可獲取資料集,可將該資料集當作表來使用。 ''' what: 檢
SQLServer觸發器建立、刪除、修改、檢視示例程式碼
一: 觸發器是一種特殊的儲存過程﹐它不能被顯式地呼叫﹐而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地啟用。所以觸發器可以用來實現對錶實施複雜的完整性約束。 二: SQL Server為每個觸發器都建立了兩個專用表:Inserted表和Deleted表。這兩個表。一:
第六篇:檢視、觸發器、事務、儲存過程、函式
一 檢視 檢視是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的資料集,併為其命名】,使用者使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來使用。 使用檢視我們可以把查詢過程中的臨時表摘出來,用檢視去實現,這樣以後再想操作該臨時表的資料時就無需重寫複雜的sql了,直接去檢視中查詢即
在Oracle資料庫中查詢所有觸發器、儲存過程、檢視、表
在Oracle資料庫中查詢所有觸發器、儲存過程、檢視、表 方法一: Select object_name From user_objects Where object_type='TRIGGER'; --所有觸發器 Select object_name From user_objects Where ob