我觉得有没有简单的方法来做到这一点?获取每个ManagedObject,获取链接到它的所有对象,并计算转换后的变量的字节数?有没有办法在Objective-C中获取SQLite中的表的大小?
-1
A
回答
0
好吧,我找到了我需要的解决方案来获取我的数据库统计数据。
如上所述,我直接用length()函数使用SQL查询。然后,我可以稍后循环以字节为单位计算总大小。
首先,在您的XCode项目,包括 'libsqlite3.0.dylib'
然后,导入lib目录下:
#import <sqlite3.h>
最后实现可以是:
float size;
sqlite3* dbHandle;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* dbFile = [documentsDirectory stringByAppendingPathComponent:@"mybase.sqlite"];
sqlite3_config(SQLITE_CONFIG_SERIALIZED);
int result = sqlite3_open([dbFile UTF8String], &dbHandle);
if (result != SQLITE_OK) {
NSLog(@"Failure in connecting to the database with result %d",result);
}
else {
NSLog(@ "Successfully opened connection to DB") ;
NSString *query = @"SELECT length(HEX(zmyField))/2 FROM zmyTable";
// You have to append 'z' to table and name field due to SQLite naming convention (cf.https://softwareengineering.stackexchange.com/questions/178994/why-do-core-data-sqlite-table-columns-start-with-z)
const char *sql3 = [[NSString stringWithFormat:query] cStringUsingEncoding:NSUTF8StringEncoding];
NSMutableArray *results = [NSMutableArray array];
sqlite3_stmt *sql1Statement;
int returnCode;
if(sqlite3_prepare_v2(dbHandle, sql3, -1, &sql1Statement, NULL) != SQLITE_OK)
{
NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(dbHandle));
}
else
{
while ((returnCode = sqlite3_step(sql1Statement)) == SQLITE_ROW) {
NSLog(@"SIZE : %f",sqlite3_column_double(sql1Statement, 0));
size+=sqlite3_column_double(sql1Statement, 0);
}
if (returnCode != SQLITE_DONE)
NSLog(@"Problem with step statement: %s", sqlite3_errmsg(dbHandle));
sqlite3_finalize(sql1Statement);
}
}
NSLog(@"TOTAL SIZE for myField in my Table : %f",size);
要获取总的数据库大小,或者逐个表,即使是逐个字段,也可以使用SQLite指令来列出所有表和字段名称。 你然后应用length()函数的循环结果:
对于表列出:
SELECT name FROM sqlite_master WHERE type='table'
对于字段:
PRAGMA table_info('myTable')
编号:
http://www.priyaontech.com/2011/09/intro-to-sqlite-for-ios-developers/
相关问题
- 1. 有没有办法在SQLite中获取表的约束?
- 2. 有没有办法加快SQLite获取?
- 3. 有没有办法在firebase URL获取数据的大小?
- 4. 有没有办法改变JasperReports图表中的形状大小?
- 5. 有没有办法在SQLITE中获取视图的列数据类型?
- 6. 有没有办法获取API来反应js中的表?
- 7. 有没有办法从表中获取不同的PartionKeys
- 8. 有没有办法将ObjectiveC块封装到函数指针中?
- 9. Android:有没有办法获得RemoteViews对象的大小?
- 10. 有没有办法获得程序的大小?
- 11. 有没有什么办法在SQLite中标记一个表?
- 12. 有没有办法在JdbcTemplate上智能设置抓取大小?
- 13. 有没有办法改变MFMailCompose中的字体大小?
- 14. 在Oracle中有没有办法让列不区分大小写?
- 15. 有没有办法在python中通过http调整jpgs大小?
- 16. 有没有办法在Reportlab中设置字体大小?
- 17. 有没有办法在Ghost.py中设置窗口大小?
- 18. 有没有办法在Ruby中控制标签大小?
- 19. 有没有办法在UIActionSheet中更改标题字体大小?
- 20. 有没有办法在java中获取数组的名称?
- 21. 有没有办法在javascript中获取返回值的类型?
- 22. 有没有办法在视图中获取插入的缩进?
- 23. 有没有办法在Winforms TabControl中获取TabPage的边界?
- 24. 有没有办法在openpyxl中获取工作簿的名称
- 25. 有没有办法在PHP中获取启动页面的URL
- 26. 有没有办法在Google Maps中获取标记的坐标?
- 27. 有没有办法在jQuery中获取动画的最终值?
- 28. 有没有办法在Haskell中获取异常的类型?
- 29. 有没有办法从c#中的变量中获取命令?
- 30. 有没有办法在spritekit中读取/获取fps swift
正是你在找什么规模? – rmaddy 2015-04-03 18:57:41
https://www.sqlite.org/lang_aggfunc.html#count – 2015-04-03 20:23:05
我在这里得到了我的答案:http://stackoverflow.com/questions/250940/how-do-i-find-the-length-size-对的一二进制BLOB功能于sqlite的。我将总结查询每个字段后返回的所有值。 – 2015-04-07 07:11:42