objective-c中的SQL和oop
这可能是一个愚蠢的问题,我试图寻找类似的帖子,但如果有,我找不到 我开始使用SQL,这很简单,但是如何在其中保存整个对象呢 我试着更好地解释。如果我想保存一个“car”对象的实例,我应该只保存它的基本值,还是有办法保存整个对象 另外,你们建议使用哪种SQL软件?我只尝试使用Mac embedded sqlite如果愿意,可以在SQL Server中使用VARBINARY(MAX)字段类型。您可以在其中存储任何类型的对象,最大为2GB 要访问它,您可以使用ADO.NET-类似以下内容:objective-c中的SQL和oop,sql,objective-c,database,sqlite,Sql,Objective C,Database,Sqlite,这可能是一个愚蠢的问题,我试图寻找类似的帖子,但如果有,我找不到 我开始使用SQL,这很简单,但是如何在其中保存整个对象呢 我试着更好地解释。如果我想保存一个“car”对象的实例,我应该只保存它的基本值,还是有办法保存整个对象 另外,你们建议使用哪种SQL软件?我只尝试使用Mac embedded sqlite如果愿意,可以在SQL Server中使用VARBINARY(MAX)字段类型。您可以在其中存储任何类型的对象,最大为2GB 要访问它,您可以使用ADO.NET-类似以下内容: objec
object yourMysteryObject = (whatever you like it to be);
MemoryStream memStream = new MemoryStream();
StreamWriter sw = new StreamWriter(memStm);
sw.Write(yourMysteryObject);
SqlCommand sqlCmd = new SqlCommand("INSERT INTO TableName(VarBinaryColumn) VALUES (@VarBinary)", sqlConnection);
sqlCmd.Parameters.Add("@VarBinary", SqlDbType.VarBinary, Int32.MaxValue);
sqlCmd.Parameters["@VarBinary"].Value = memStream.GetBuffer();
sqlCmd.ExecuteNonQuery();
如果愿意,可以在SQL Server中使用VARBINARY(MAX)字段类型。您可以在其中存储任何类型的对象,最大为2GB
要访问它,您可以使用ADO.NET-类似以下内容:
object yourMysteryObject = (whatever you like it to be);
MemoryStream memStream = new MemoryStream();
StreamWriter sw = new StreamWriter(memStm);
sw.Write(yourMysteryObject);
SqlCommand sqlCmd = new SqlCommand("INSERT INTO TableName(VarBinaryColumn) VALUES (@VarBinary)", sqlConnection);
sqlCmd.Parameters.Add("@VarBinary", SqlDbType.VarBinary, Int32.MaxValue);
sqlCmd.Parameters["@VarBinary"].Value = memStream.GetBuffer();
sqlCmd.ExecuteNonQuery();
你看过核心数据了吗
它使使用sqlite变得非常简单,并且在Mac和iOS上受支持。您看过核心数据了吗 它使使用sqlite变得非常简单,并且在Mac和iOS上受支持。以下是一些想法:
- 创建存档(请参阅):
但要使其工作,您必须为
类实现Car
和initWithCoder
方法,如本节所述:encodeWithCoder
- 您可以将其保存为数据库中的blob。使用
或者更简单地使用FMDB:sqlite3\u bind\u blob
NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *path = [documentsPath stringByAppendingPathComponent:@"cars.sqlite"]; FMDatabase *database = [FMDatabase databaseWithPath:path]; [database open]; [database executeUpdate:@"create table if not exists cars (data blob)"]; [database executeUpdate:@"insert into cars (data) values (?)", data];
- 您可以稍后从数据库中读取此信息(使用
和sqlite3\u column\u blob
,或者再次使用FMDB使您的生活更轻松):sqlite3\u column\u bytes
- 创建存档(请参阅):
但要使其工作,您必须为
类实现Car
和initWithCoder
方法,如本节所述:encodeWithCoder
- 您可以将其保存为数据库中的blob。使用
或者更简单地使用FMDB:sqlite3\u bind\u blob
NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *path = [documentsPath stringByAppendingPathComponent:@"cars.sqlite"]; FMDatabase *database = [FMDatabase databaseWithPath:path]; [database open]; [database executeUpdate:@"create table if not exists cars (data blob)"]; [database executeUpdate:@"insert into cars (data) values (?)", data];
- 您可以稍后从数据库中读取此信息(使用
和sqlite3\u column\u blob
,或者再次使用FMDB使您的生活更轻松):sqlite3\u column\u bytes
FMResultSet *rs = [database executeQuery:@"select data from cars"];
while ([rs next])
{
NSData *carData = [rs dataForColumnIndex:0];
Car *carFromDatabase = [NSKeyedUnarchiver unarchiveObjectWithData:carData];
NSLog(@"%@, %@, %d", carFromDatabase.make, carFromDatabase.model, carFromDatabase.year);
}