獲取sqlite insert後的id

2021-08-21 09:11:02 字數 1096 閱讀 2563

1、背景知識

(1). rowid

每個表預設都有 rowid 列,除非建立表時指定了 without rowid, 它現在是 64 位長的。在查詢時用 select * from table1 裡沒有它,要顯式的用 select rowid, * from table1 就會列出它來。

(2). rowid 的別名

rowid 除了可用 rowid 查出它之外,還可用別名 _rowid_ 和 oid,都不分大小寫的, 例如 select oid from table1。另外我們還可以自定義乙個 rowid 的別名,用 integer primary key 標識的列也是 rowid 的乙個別名,比如我們用 id 來作為 rowid 的別名。

rowid 的表示也是個自增列,每個表有自己的計數器,和常見的資料庫的自增列是一致的。

sqlite 的 rowid 可不象 oracle 的 rowid, oracle 的 rowid 是純內部的,標記著記錄的物理位置,所以資料庫匯入匯出 oracle 的 rowid 就會變了。更為可怕的是 sqlite 的 rowid 是可以自己賦值的。

(3). 自增列序列表(也是 rowid)

用 integer primary key autoincrement 標識的列就是個自增列,說到底它也是 rowid  別名。資料庫中存在自增列後,sqlite 就會建立乙個 sqlite_sequence 表。所有表的自增列都共享這個表,sqlite_sequence 分別維護著每個自增列的當前值,所以自增列的計數也是單獨的。它不象於 oracle 中多個表在共用乙個序列時,id 值是交錯的,oracle 的序列的好處就是插入前可獲知下乙個序列值。

順便說一下 vacuum命令,這個命令能重建 rowid 值。

2、插入時注意事項

(1)當主鍵設定為自動增長的時候,主鍵的資料型別必須是integer型別,不能使long型別。

(2)插入的時候,如果羅列的列中沒有自動增長列 ,自動增長列也是可以實現自動增長的,如一所示。

(3)插入的時候,如果羅列的列中有自動增長列,那麼設定為null,可以實現自動增長,如二所示。

3、讀取剛插入的記錄的id

select last_insert_rowid() from 表名

使用CSLoader獲取Node後再獲取精靈失敗

今天在寫 的時候遇到乙個很鬱悶的問題,用cocostudio做了乙個介面,然後將其載入到程式當中,也成功獲取了node節點下的幾個精靈,但唯獨有乙個精靈獲取後使用失敗,程式中斷,下面 auto node csloader createnode cocostudio scene.csb mones s...

Android 拍照後獲取真實路徑

原文 普通的獲取方式 得到的將是縮圖,而且因手機的不同,縮圖的大小也不一樣 intent intent new intent mediastore.action image capture startactivityforresult intent,result ok override protec...

js獲取url後的引數

前端頁面傳參主要是通過url實現 該鏈結,傳遞了id和user兩個引數,那麼我們需要獲取到這兩個引數。1 封裝乙個全域性方法 export function geturlparam name else 2 在需要接收引數的頁面呼叫 let id geturlparam id let user get...