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语句