天道酬勤,学无止境

在 DBAccess 中关联两个对象(Relating two objects in DBAccess)

问题

我正在为我的 iOS 项目使用 dbaccess。 如何将数组传递给 dbaccess 对象? 例如:我有 dbobject 像:

@interface Member : DBObject
@property (strong) NSString* firstname;
@property (strong) NSString* lastName;
@end

@interface Group : DBObject
@property (strong) NSString* groupName;
@property (strong) NSString* adminName;
@property (strong) Member* members;
@end

对于这个组,它有 4 个成员,而不是如何将所有组成员和组详细信息存储在一个对象中,以及如何检索它们? 广告中的感谢。

回答1

为了回答这个问题,我重新建模并在下面提供了一个示例,说明如何在这两个对象之间创建一对一的关系。

这个问题源于这样一个事实,即在 Objective-c 中没有类型化数组这样的东西。 如果有,我们将研究重新实现接口的工作方式。

我已经将 Group 对象移动到成员中,因为成员属于一个组,然后向 Group 对象添加了一个 members 方法以向后查看子对象。

@interface Member : DBObject

@property (strong) NSString* firstname;
@property (strong) NSString* lastName;
@property (strong) Group* group;

@end

@interface Group : DBObject

@property (strong) NSString* groupName;
@property (strong) NSString* adminName;

- (DBResultSet*)members;

@end

现在的实现看起来像这样。

@implementation Member

@dynamic firstname,lastName, group;

@end

@implementation Group

@dynamic adminName, groupName;

- (DBResultSet *)members {
    /* we achieve one-to-many relationships by querying the objects in the 
     manner a relational database would commonly be structured */

    return [[[Member query] whereWithFormat:@"group = %@", self] fetch];

}

- (void)entityDidDelete {

    /* when you create tight bonds, you may well wish to create 'trigger' methods 
     to clean data and keep the integrity in good order */

    for (Member* member in [[[Member query] whereWithFormat:@"group = %@", self] fetch]) {
        member.group = nil;
        [member commit];
    }

}

@end

现在没有什么可以阻止您创建一个数组作为属性类型,并在其中存储 Id 值。 但这并不那么干净,并且需要您维护它,而如果您正在寻找 FK 值,则这不需要维护,您可以创建可爱的逻辑来停止删除与其他对象相关的对象,而无需 hydration许多对象,然后查看数组内部。

此外,您还可以使用对象点符号来导航来自 Person 对象的强类型关系。

NSString* admin = person.group.adminName;

此外,当您将 Group 对象添加到 Member 时:

@property (strong) Group* group;

DBAccess 自动在 SQLite 中为属性创建了一个索引,并优先考虑它在缓存中的重要性,因为以这种方式链接的对象更有可能被访问。

希望这会有所帮助,阿德里安

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Relating two objects in DBAccess
    I'm using dbaccess for my iOS project. How can I pass an array to dbaccess object? For example: I have dbobject like: @interface Member : DBObject @property (strong) NSString* firstname; @property (strong) NSString* lastName; @end @interface Group : DBObject @property (strong) NSString* groupName; @property (strong) NSString* adminName; @property (strong) Member* members; @end For this group, it has 4 member than How can I store all group members and group detail in one object and also how to retrieve them? Thanx in adv.
  • 业务逻辑层(Business Logic Layer)
    问题 我正在使用带有 Telerik 控件的 asp.net 编程数据驱动的应用程序(v2009 q2)。 我有一个名为 BLL 的类,它包含(几乎只有)静态类,这些类返回以某些 id 作为参数的不同对象。 通常将对象组返回为列表。 我的问题是这是否有任何架构缺陷,总是使用静态。 我知道人们将他们的业务层和数据访问层作为不同的项目。 作为一个项目有什么好处? 所以我可以添加更多功能,或者只是这样更整洁。 提前致谢 回答1 使用静态方法作为您的进入方法并不是一个特别大的问题。 这实际上取决于您是否有需要存储状态的工作领域,因为静态定义可能不允许您存储或分离状态信息。 幸运的是,从使用静态声明向后使用成员声明通常比反向使用更容易。 如果从这些方法返回的项目完全负责状态,您甚至可能不会遇到这个问题。 单独的库/项目对于划分工作单元很有用。 正如 Dave Swersky 所提到的,虽然您可能会看到静态成员变量的怪癖,尤其是在多线程应用程序中,但没有严格要求所有内容都必须分离到不同的库中。 拥有单独的库还为您带来以下好处: 在开发过程中更好地分离变更,因为项目边界通常与源代码控制边界重合,允许更多的人在平台的整个表面上同时工作。 可以在生产中独立更新的单独部件,前提是布局和界面兼容。 更好地组织在每一层(无论是 BLL 还是 DAL)的给定段的哪些行为、特征和角色相交。
  • PHP需要文件策略(PHP include file strategy needed)
    问题 我正在设置一个php项目,但是对如何正确使用php的include / require命令不是很熟悉。 我的布局目前看起来像这样: /public --apache points into this directory /public/index.php /public/blah/page.php /utils/util1.php -- useful classes/code are stored in other directories out here /dbaccess/db1.php dbaccess/db1.php require '../utils/util1.php public / index.php require '../dbaccess/db1.php' 公共/blah/page.php require '../../dbaccess/db1.php' 问题是来自php'include'文档的问题: 如果文件名以./或../开头,则仅在当前工作目录中查找 因此public / blah / page.php失败,因为它包含dbaccess / db1.php,当它尝试包含util1.php时它会爆炸。 它失败,因为它的相对路径来自public / blah /中的原始脚本,而不是来自dbaccess / 这似乎很愚蠢-db1
  • 使用 jquery 使用 .net Web 服务(consume .net web service using jquery)
    问题 我制作了这个从 sql server db 返回数据表的 Web 服务。 有人可以帮助我使用 jquery 来显示它吗? 网络服务 [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class WebService : System.Web.Services.WebService { DataTable dt = new DataTable(); [WebMethod] public DataTable dbAccess() { using (SqlConnection conn = new SqlConnection( ConfigurationManager.ConnectionStrings["localConnectionString"] .ConnectionString)) { using (SqlDataAdapter da = new SqlDataAdapter()) { conn.Open(); da.SelectCommand = new SqlCommand("SELECT VehicleMake FROM VehicleMakes"
  • Error on creating connection to PDO in PHP
    Today, I removed and reinstalled the latest version of lampp in order to move to php 5.30, and suddenly a very simple app is failing to connect to the mysql database. I'm using PDO to connect, and receiving the following error: Warning: PDO::__construct() [pdo.--construct]: [2002] Invalid argument (trying to connect via unix://) in /home/raistlin/www/todoapp/home.php on line 9 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Invalid argument' in /home/raistlin/www/todoapp/home.php:9 Stack trace: #0 /home/raistlin/www/todoapp/home.php(9): PDO->__construct(
  • Java 访问数据库连接(Java Access DB Connection)
    问题 我尝试制作连接到 db (MS Access 2010) 的项目 我在 CodeProject 上使用本教程。 import java.sql.*; public class DbAccess { public static void main(String[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=myDB.mdb;"; Connection conn = DriverManager.getConnection(database, "", ""); Statement s = conn.createStatement(); // create a table String tableName = "myTable" + String.valueOf((int)(Math.random() * 1000.0)); String createTable = "CREATE TABLE " + tableName + " (id Integer, name Text(32))"; s.execute(createTable); // enter
  • MVC版增删改
    目录 什么是MVCMVC结构MVC增删改综合案例 什么是MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,它是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码 Model1 jsp+jdbc Model2 ->MVC 核心思想:各司其职 MVC结构 V jsp/ios/android C servlet/action M 实体域模型(名词) 过程域模型(动词) 注1:不能跨层调用 注2:只能出现由上而下的调用 MVC增删改综合案例 1,创建实体类util,里面包含了数据库连接以及分页的方法 pageBean类里面的内容: package com.wangcaihua.uitl; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; public class PageBean { private int page = 1; private int rows = 10; private int total = 0; private String url; private Map<String, String[]> parameterMap=
  • 父pom.xml的无效包装,必须为“ pom”,但为“ ear”(Invalid packaging for parent pom.xml, must be “pom” but is “ear”)
    问题 有人可以建议我一个解决方案,但以下情况除外。 我将创建一个多模块项目。 父项目名称为LOGICBACKEND子项目名称为DBAccess 我需要有LOGICBACKEND耳朵文件,该文件应包含DBAccess prjoects jar文件。 运行mav clean install -P Developer时出现以下异常。 [ERROR]The project com.project1.Database:DBAccess:1.0-SNAPSHOT (C:\Project1\DBAccess\pom.xml) has 1 error [ERROR]Invalid packaging for parent POM com.project1.logic:LOGIC:1.0-SNAPSHOT (C:\Project1\pom.xml), must be "pom" but is "ear" @ com.project1.logic:LOGIC:1.0-SNAPSHOT, C:\Project1\pom.xml, line 6, column 13 这就是我的父pom.xml的一部分的样子 <modelVersion>4.0.0</modelVersion> <groupId>com.project1.logic</groupId> <artifactId>LOGICBACKEND<
  • 在PHP中创建与PDO的连接时出错(Error on creating connection to PDO in PHP)
    问题 今天,我删除并重新安装了Lampp的最新版本,以转到php 5.30,突然之间,一个非常简单的应用程序无法连接到mysql数据库。 我正在使用PDO进行连接,并收到以下错误: Warning: PDO::__construct() [pdo.--construct]: [2002] Invalid argument (trying to connect via unix://) in /home/raistlin/www/todoapp/home.php on line 9 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Invalid argument' in /home/raistlin/www/todoapp/home.php:9 Stack trace: #0 /home/raistlin/www/todoapp/home.php(9): PDO->__construct('mysql:host=loca...', 'USER', 'PASSWORD') #1 {main} thrown in /home/raistlin/www/todoapp/home.php on line 9 为了调试它,此刻我没有捕获到该错误。
  • Invalid packaging for parent pom.xml, must be “pom” but is “ear”
    Could anybody suggest me an solution with the following exception. I am going to create a multi-module project. Parent Project name is LOGICBACKEND child project name is DBAccess I need to have ear file of LOGICBACKEND which should contain DBAccess prjoects jar file. I am getting following exception when i run mav clean install -P Developer. [ERROR]The project com.project1.Database:DBAccess:1.0-SNAPSHOT (C:\Project1\DBAccess\pom.xml) has 1 error [ERROR]Invalid packaging for parent POM com.project1.logic:LOGIC:1.0-SNAPSHOT (C:\Project1\pom.xml), must be "pom" but is "ear" @ com.project1.logic
  • PHP include file strategy needed
    I'm in the process of setting up a php project, but am not very familiar with how to properly use php's include/require commands. My layout currently looks like this: /public --apache points into this directory /public/index.php /public/blah/page.php /utils/util1.php -- useful classes/code are stored in other directories out here /dbaccess/db1.php dbaccess/db1.php require '../utils/util1.php public/index.php require '../dbaccess/db1.php' public/blah/page.php require '../../dbaccess/db1.php' The problem is this from the php 'include' documentation: If filename begins with ./ or ../, it is
  • 为什么将更改保存到数据库失败?(Why saving changes to a database fails?)
    问题 我在控制台应用程序中有以下C#代码。 每当我调试应用程序并运行query1(将新值插入数据库),然后运行query2(显示数据库中的所有条目)时,都可以清楚地看到我插入的新条目。 但是,当我关闭应用程序并检查数据库中的表(在Visual Studio中)时,它消失了。 我不知道为什么它没有保存。 using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlServerCe; using System.Data; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { try { string fileName = "FlowerShop.sdf"; string fileLocation = "|DataDirectory|\\"; DatabaseAccess dbAccess = new DatabaseAccess(); dbAccess.Connect(fileName, fileLocation)
  • unity学习笔记之SQLite
    SQLite配置 1、在Assets目录下创建Plugins目录,将Mono.Data.Sqlite.dll,System.Data.dll,sqlite3.dll三个文件放到工程Plugins目录下。 2、在Assets目录下创建StreamingAssets目录,把db放在该目录内。 3、将DbAccess.cs脚本添加到工程中。 安卓和iOS端要多一个步骤,在Plugins目录下建立安卓/iOS目录,再将libsqlite3.so放到目录下。 using Mono.Data.Sqlite; using System.IO; DbAccess db; //数据库 string appDBPath;//数据库路径 appDBPath = Application.streamingAssetsPath +"/Test.db"; db = new DbAccess("URI=file:"+ appDBPath); //创建、打开数据库 db.CloseSqlConnection();//闭数据库 Mono.Data.Sqlite.dll,System.Data.dll在unity安装目录中,libsqlite3.so和sqlite3.dll(有32位和64位)在网上下载 发布时的注意事项 在PlaySettings中修改Api Compatibility Level改成NET 2.0
  • 无法将 clob 转换为字符串(cannot convert clob to string)
    问题 我正在尝试将我的 clob 对象转换为字符串以在我的 JSTL 页面上显示它,因为我正在编写以下代码 public String convertClobToString(Clob clob){ String toRet=""; if(clob!=null) { try { long length=clob.length(); toRet=clob.getSubString(1, (int)length); } catch(Exception ex) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); ex.printStackTrace(); } } return toRet; } 但是在使用“long length = clob.length()”计算长度时,它会抛出以下异常 java.sql.SQLException: Must be logged on to server at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc
  • 在 VB.NET 中关联两个文本字符串的最佳方法(Best way to associate two strings of text in VB.NET)
    问题 我有两个字符串要关联在一起,以便我可以按用户名进行搜索并获取计算机名。 字符串:用户名计算机名 我对 VB 代码不太熟练,所以我不知道如何构建这个对象。 这就是我认为我需要的: ( ("user1" "computer1") ("user2" "computer2") ("user3" "computer3") ("user4" "computer4") ("user5" "computer5") ) 然后我希望能够通过询问以下问题来查询列表:与“user3”关联的计算机名是什么? 并得到“computer3”作为结果。 回答1 我想有可能一台计算机被不止一个用户使用,并且不止一个用户可以使用一台特定的计算机。 在这种情况下,拥有一个保存用户与计算机相关信息的类可能会更简单。 然后,您可以创建该类的实例列表来保存整个信息集,作为一个列表,您可以使用 LINQ 轻松查询它,如下所示: Option Infer On Module Module1 Dim computerUsers As New List(Of ComputerUser) Class ComputerUser Property ComputerName As String Property UserName As String End Class Sub CreateTestData()
  • Fast insert relational(normalized) data tables into SQL Server 2008 database
    I'm trying to find a better and faster way to insert pretty massive amount of data(~50K rows) than the Linq that I'm using now. The data I'm trying to write to a local db is in a list of ORM mapped data serialized and received from WCF. I'm keen on using SqlBulkCopy, but the problem is that the tables are normalized and are actually a sequence or interconnected tables with one-to-many relationships. Here's some code that illustrates my point: foreach (var meeting in meetingsList) { int meetingId = dbAccess.InsertM(value1, value2...); foreach (var competition in meeting.COMPETITIONs) { int
  • Why saving changes to a database fails?
    I have following C# code in a console application. Whenever I debug the application and run the query1 (which inserts a new value into the database) and then run query2 (which displays all the entries in the database), I can see the new entry I inserted clearly. However, when I close the application and check the table in the database (in Visual Studio), it is gone. I have no idea why it is not saving. using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlServerCe; using System.Data
  • Failed to load Image from database
    I have a file upload and download using ajaxFileUploader and 2 handlers. ajaxFileUploader code: $.ajaxFileUpload ( { url: 'AjaxFileUploader.ashx?user=' + userId, secureuri: false, fileElementId: 'uploadControl', dataType: 'json', data: '{}', success: function (mydata) { alert("Image Successfully Uploaded"); $('#imgdefaultphoto').attr('src', 'ImageRetrieval.ashx?user=' + userId); }, error: function () { } } ) AjaxFileUploader.ashx code: public void ProcessRequest(HttpContext context) { if (context.Request.Files.Count > 0) { string path = context.Server.MapPath("~/Temp"); if (!Directory.Exists
  • Java Access DB Connection
    I try to make project with connection to db (MS Access 2010) I use this tutorial on CodeProject. import java.sql.*; public class DbAccess { public static void main(String[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=myDB.mdb;"; Connection conn = DriverManager.getConnection(database, "", ""); Statement s = conn.createStatement(); // create a table String tableName = "myTable" + String.valueOf((int)(Math.random() * 1000.0)); String createTable = "CREATE TABLE " + tableName + " (id Integer, name Text(32))"
  • 无法从数据库加载图像(Failed to load Image from database)
    问题 我使用 ajaxFileUploader 和 2 个处理程序上传和下载文件。 ajaxFileUploader 代码: $.ajaxFileUpload ( { url: 'AjaxFileUploader.ashx?user=' + userId, secureuri: false, fileElementId: 'uploadControl', dataType: 'json', data: '{}', success: function (mydata) { alert("Image Successfully Uploaded"); $('#imgdefaultphoto').attr('src', 'ImageRetrieval.ashx?user=' + userId); }, error: function () { } } ) AjaxFileUploader.ashx 代码: public void ProcessRequest(HttpContext context) { if (context.Request.Files.Count > 0) { string path = context.Server.MapPath("~/Temp"); if (!Directory.Exists(path)) Directory.CreateDirectory