0位元組。資料庫欄位的長度到底指的是位元組。在多數的計算機系統中,一個位元組是一個8位長的數據單位,大多數的計算機用一個位元組表示一個字元、數字或其他字元。一個位元組也可以表示一系列二進制位。
『貳』 sqlite資料庫如何插入以及修改date類型的欄位
sqlite資料庫中插入date類型用string類型,如下:
public void insert(String dailyGuid, String dailyCreateDate, String dailyUpdateDate, String dailyContactGuid,
String dailyEmployeeGuid, String dailyContent, String dailyType, String dailyTypeValue,
String dailyEstimateRate, String dailyRealRate, String dailyMemo, String dailyApproval,
String dailyExecuteDate, String dailyRemindSign, String dailyTime, String dailyIsdel){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL("INSERT INTO TBL_DAILY(dailyGuid, dailyCreateDate, dailyUpdateDate, dailyContactGuid, " +
"dailyEmployeeGuid, dailyContent, dailyType, dailyTypeValue, " +
"dailyEstimateRate, dailyRealRate, dailyMemo, dailyApproval, " +
"dailyExecuteDate, dailyRemindSign, dailyTime, dailyIsdel) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
new String[]{dailyGuid, dailyCreateDate, dailyUpdateDate, dailyContactGuid,
dailyEmployeeGuid, dailyContent, dailyType, dailyTypeValue,
dailyEstimateRate, dailyRealRate, dailyMemo, dailyApproval,
dailyExecuteDate, dailyRemindSign, dailyTime, dailyIsdel});
}
更新動作如下:
public void update(String dailyGuid, String dailyCreateDate, String dailyUpdateDate, String dailyContactGuid,
String dailyEmployeeGuid, String dailyContent, String dailyType, String dailyTypeValue,
String dailyEstimateRate, String dailyRealRate, String dailyMemo, String dailyApproval,
String dailyExecuteDate, String dailyRemindSign, String dailyTime, String dailyIsdel){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put("dailyGuid", dailyGuid);
cv.put("dailyCreateDate", dailyCreateDate);
cv.put("dailyUpdateDate", dailyUpdateDate);
cv.put("dailyContactGuid", dailyContactGuid);
cv.put("dailyEmployeeGuid", dailyEmployeeGuid);
cv.put("dailyContent", dailyContent);
cv.put("dailyType", dailyType);
cv.put("dailyTypeValue", dailyTypeValue);
cv.put("dailyEstimateRate", dailyEstimateRate);
cv.put("dailyRealRate", dailyRealRate);
cv.put("dailyMemo", dailyMemo);
cv.put("dailyApproval", dailyApproval);
cv.put("dailyExecuteDate", dailyExecuteDate);
cv.put("dailyRemindSign", dailyRemindSign);
cv.put("dailyTime", dailyTime);
cv.put("dailyIsdel", dailyIsdel);
db.update("TBL_DAILY", cv, "dailyGuid=?", new String[]{dailyGuid});
}
public void delete(String dailyGuid){
SQLiteDatabase db=this.getWritableDatabase();
db.delete("TBL_DAILY", "dailyGuid=?", new String[]{dailyGuid});
}
注意:sqlite其中的數據 類型是可以很容易的進行轉換的,提取的時候如果需要可以將String在轉為date類型就可以了。
『叄』 sqlite3怎麼查詢欄位類型
Sqlite v3資料庫中的任何列,除了整形主鍵列,可以用於存儲任何一個存儲列的值。sql語句中的中所有值,不管它們是嵌入在sql文本中或者是作為參數綁定到一個預編譯的sql語句,它們的存儲類型都是未定的。在下面描述的情況中,資料庫引擎會在查詢執行過程中在數值(numeric)存儲類型(INTEGER和REAL)和TEXT之間轉換值。
1.1布爾類型
Sqlite沒有單獨的布爾存儲類型,它使用INTEGER作為存儲類型,0為false,1為true
1.2 Date和Time Datatype
Sqlite沒有另外為存儲日期和時間設定一個存儲類集,內置的sqlite日期和時間函數能夠將日期和時間以TEXT,REAL或INTEGER形式存放
l TEXT 作為IS08601字元串("YYYY-MM-DD HH:MM:SS.SSS")
l REAL 從格林威治時間11月24日,4174 B.C中午以來的天數
l INTEGER 從 1970-01-01 00:00:00 UTC以來的秒數
『肆』 怎麼用sqlite sql修改欄位類型
SQLite 僅僅支持 ALTER TABLE 語句的一部分功能,我們可以用 ALTER TABLE 語句來更改一個表的名字,也可向表中增加一個欄位(列),但是我們不能刪除一個已經存在的欄位,或者更改一個已經存在的欄位的名稱、數據類型、限定符等等。 x0dx0a改變表名 - ALTER TABLE 舊表名 RENAME TO 新表名 x0dx0a增加一列 - ALTER TABLE 表名 ADD COLUMN 列名 數據類型 限定符 x0dx0a數據表結構變了就要重建表,好像有其他方法解決,但這偶就不知道了......
『伍』 請教SQLite資料庫讀寫BLOB欄位
// 連接字元串 data source=d:\test.db3;password=1234
SQLiteConnectionStringBuilder connStr = new SQLiteConnectionStringBuilder();
connStr.DataSource = @"d:\test.db3";
connStr.Password = "1234";
conn = new SQLiteConnection(connStr.ToString());
conn.Open();
// 插入數據
string SQL = "INSERT INTO test(k) VALUES(:k)";
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = SQL;
// 取圖標,准備插入到資料庫BLOB欄位
FileStream picStream = File.OpenRead(@"d:\1.bmp");
byte[] bArray = new byte[picStream.Length];
picStream.Read(bArray, 0, bArray.Length);
picStream.Close();
cmd.Parameters.Add("k", DbType.Binary).Value = bArray; // BLOB
cmd.ExecuteNonQuery();
//取出數據
cmd.CommandText = "SELECT k FROM test";
System.Data.SQLite.SQLiteDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
MemoryStream streamImage = new MemoryStream(reader["k"] as byte[]);
pictureBox1.Image = Image.FromStream(streamImage);
streamImage.Close(); // 關閉流
}
reader.close();
conn.close();
『陸』 sqlite怎樣在原有基礎上添加新欄位
通過alter添加新的欄位SQL語句:
『柒』 SQLite資料庫的id欄位,怎麼設置成從1開始自增
使用自增長欄位為主鍵有不少問題,比如維護或是在大型分布應用中主鍵沖突的解決等。在一些大型分布應用中主鍵一般選用guid,這可以有效的避免主鍵沖突,減少對主鍵維護的工程。當然,對於中小型的應用,自增長欄位的好處更多一些,簡單、快速。
Sqlite中,一個自增長欄位定義為INTEGER PRIMARY KEY AUTOINCREMENT,那麼在插入一個新數據時,只需要將這個欄位的值指定為NULL,即可由引擎自動設定其值,引擎會設定為最大的rowid+1。當然,也可以設置為非NULL的數字來自己指定這個值,但這樣就必須自己小心,不要引起沖突。當這個rowid的值大於所能表達的最大值 9223372036854775807 (3.0及以後版本的rowid最大值)後,rowid的新值會這個最大數之前隨機找一個沒被使用了的值。所以在rowid達到最大值前,rowid的值是嚴格單調增加的。
INTEGER PRIMARY KEY AUTOINCREMENT 自增長欄位的演算法與rowid稍微有些不同。
第一,在達到最大值後,rowid會找已被刪除的欄位對應的rowid作為新值,而自增長欄位則會丟出一個SQLITE_FULL的錯誤。
第二,自增長欄位在增加新值時,是找一個從沒被使用過的rowid作為新值,而rowid則是找最大已存在的rowid+1。這里對應用的影響會比較大,尤其是一些對id值有依賴的元記錄,只適合使用自增長欄位而不能用rowid。
比如,我們設計一個元記錄表:
drop table test;
create table test (
[tkid] integer PRIMARY KEY autoincrement, -- 設置主鍵
[tktype] int default 0,
[tableid] varchar (50),
[createdate] datetime default (datetime('now', 'localtime')) -- 時間
);
第三,使用自增長欄位,引擎會自動產生一個sqlite_sequence表,用於記錄每個表的自增長欄位的已使用的最大值,用戶可以看到,並可以用使用 Update、Delete和Insert操作,但不建議這么使用,這會讓引擎混亂。如果使用rowid,也會有這么一個內部表,用戶可以維護rowid 值,但看不到。
這么看來,如果直接使用rowid來代替自增加欄位,根據兩者的細微的差別,需要注意是否與自己的應用沖突,如果沒有沖突,那麼用rowid會更快一點。
SQLite中創建自增欄位:
簡單的回答:一個聲明為 INTEGER PRIMARY KEY 的欄位將自動增加。
從 SQLite 的 2.3.4 版本開始,如果你將一個表中的一個欄位聲明為 INTEGER PRIMARY KEY,那麼無論你何時向該表的該欄位插入一個 NULL 值,這個 NULL 值將自動被更換為比表中該欄位所有行的最大值大 1 的整數;如果表為空,那麼將被更換為 1。
一個新的API函數 sqlite3_last_insert_rowid() 返回最近的插入操作的整形鍵.
注意這個整型鍵始終比之前插入表中的最後一個鍵大1。新鍵相對於表中的已有鍵來說是唯一的,但它可能與之前從表中刪除的鍵值重疊。要始終得到在整個表中唯一的鍵,在INTEGER PRIMARY KEY的聲明之前加關鍵詞AUTOINCREMENT.這樣被選的鍵將總是比表中已存在的最大鍵大1。若可能的最大鍵已存在於表中,INSERT操作將失敗並返回一個SQLITE_FULL錯誤碼.
『捌』 請教SQLite資料庫讀寫BLOB欄位
SQLite中如何用api操作blob類型的欄位
在實際的編程開發當中我們經常要處理一些大容量二進制數據的存儲,如圖片或者音樂等等。對於這些二進制數據(blob欄位)我們不能像處理普通的文本那樣 簡單的插入或者查詢,為此SQLite提供了一組函數來處理這種BLOB欄位類型。下面的代碼演示了如何使用這些API函數。
首先我們要建立一個資料庫:
sqlite3_exec(db, "CREATE TABLE list (fliename varchar(128) UNIQUE, fzip blob);", 0, 0, &zErrMsg);
//由於mmmm.rar是一個二進制文件,所以要在使用insert語句時先用?號代替
sqlite3_prepare(db, "insert into list values ('mmmm.rar',?);", -1, &stat, 0);
FILE *fp;
long filesize = 0;
char * ffile;
fp = fopen("mmmm.rar", "rb");
if(fp != NULL)
{
//計算文件的大小
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fseek(fp, 0, SEEK_SET);
//讀取文件
ffile = new char[filesize+1];
size_t sz = fread(ffile, sizeof(char), filesize+1, fp);
fclose(fp);
}
//將文件數據綁定到insert語句中,替換「?」部分
sqlite3_bind_blob(stat, 1, ffile, filesize, NULL);
『玖』 使用SQLite如何修改資料庫中的欄位
(1)增加表欄位
<pre>
ALTER TABLE 表名 ADD COLUMN 欄位名 欄位類型
</pre>
例如:
<pre>
ALTER TABLE t_student ADDCOLUMN age ingeter
</pre>
(2)刪除表欄位
<pre>
ALTER TABLE 表名 DROP COLUMN 欄位名 欄位類型
</pre>
(3)修改表欄位
<pre>
ALTER TABLE 表名 RENAME COLUMN 舊欄位名 TO 新欄位名
</pre>
註:考sql語句