如何在Sqlite中查找具有列Blob类型的表。我需要获取从中获取列blob类型的表名,然后再查看总数。的斑点不为空的记录。
答案 0 :(得分:0)
如果您想要具有定义为斑点的列的表,则可以使用
SELECT * FROM sqlite_master WHERE sql LIKE '%blob%';
作为确定表格的基础。例如这可能会返回结果,例如:-
但是,这并不一定找到存储为斑点的所有值。这是因为除了rowid列或其别名之外,任何类型的值(包括blob)都可以存储在任何列中。
例如考虑以下:-
DROP TABLE IF EXISTS not_a_blob_table;
CREATE TABLE IF NOT EXISTS not_a_blob_table (col1 TEXT, col2 INTEGER, col3 REAL, col4 something_or_other);
INSERT INTO not_a_blob_table VALUES
('test text',123,123.4567,'anything'), -- Insert using types as defined
(x'00',x'12',x'34',x'1234567890abcdefff00') -- Insert with all columns as blobs
;
SELECT typeof(col1),typeof(col2),typeof(col3),typeof(col4) FROM not_a_blob_table;
结果为:-
如果要查找所有Blob,则需要根据对列类型的检查来处理所有表的所有行中的所有列。这可能基于:-
SELECT typeof(col1),typeof(col2),typeof(col3),typeof(col4),* FROM not_a_blob_table
WHERE typeof(col1) = 'blob' OR typeof(col2) = 'blob' OR typeof(col3) = 'blob' OR typeof(col4) = 'blob';
使用上面的表将在:-
中产生结果(只有第二行有斑点)进一步的复杂性是 不为空 的意思,显然为null。但是x'00'呢?或如果您使用默认的zeroblob(0)?。
zeroblob(N)
- zeroblob(N)函数返回一个BLOB,该BLOB由N个字节组成,0x00。 SQLite非常有效地管理这些零点。 Zeroblobs可以 用于为BLOB保留空间,稍后使用 增量BLOB I / O。此SQL函数是使用 来自C / C ++接口的sqlite3_result_zeroblob()例程。
尽管如果为null,则它不会具有blob类型,而是类型为null,如果检查所有存储为blob的值,则可能使事情复杂化。
您不妨考虑看看Are there any methods that assist with resolving common SQLite issues? 中的代码,因为这很可能是您想要的基础。
您还希望看看typeof(X)和zeroblob(N)。