0

在我的数据库中有表名“Projtable”。项目名称包含 4 个字段。1. 项目 id = 自动增量(主键) 2. 项目名称 = varchar 3. 项目详细信息 = varchar 4. order_id = int

现在我插入 projctname 和 projct_detail 可以完美运行。我必须找到 orderid 列的最大值。我怎样才能找到这个?

我的代码是:

-(void)insertProject:(Project *)projobj
{
//    next_orderid = next_orderid + 1;
//    projobj.orderid = next_orderid;

    NSLog(@" insert:: %@, %@, %d", projobj.outcome, projobj.projctname, projobj.orderid);
     sqlite3 *database;
    if (sqlite3_open([self.databasePath UTF8String] , &database) == SQLITE_OK)
    {
        const char *sql = "INSERT INTO proj_table (projctname, outcome, orderid) VALUES (?,?,?)";
        sqlite3_stmt *statement;
        statement = [self PrepareStatement:sql];

        int a1 = sqlite3_bind_text(statement, 1, [projobj.projctname UTF8String], -1, SQLITE_TRANSIENT);
        int a2 =  sqlite3_bind_text(statement, 2, [projobj.outcome UTF8String], -1, SQLITE_TRANSIENT);
       int a3= sqlite3_column_int( statement, 3);
        NSLog(@" integer :== %d",a3);
       // int a3 = sqlite3_bind_int(statement, 3, projobj.orderid);
            if (statement)
        {
            if (a1 != SQLITE_OK || a2 != SQLITE_OK || a3 != SQLITE_OK)
            {
                sqlite3_finalize(statement);
                return;
            }
            sqlite3_step(statement);
        }
        sqlite3_finalize(statement);
    }
}

结果为 0

4

2 回答 2

2

您可以通过如下查询找到列的最大值:

SELECT MAX(orderid) FROM proj_table;

但最好将列创建为INTEGER PRIMARY KEY(当你CREATE TABLE),所以它是自动递增的(并且最后插入的 id 可用于sqlite3_last_insert_rowid)。

如果您仍然有理由使用最大值,请确保在单个事务中运行SELECT MAX...以下内容INSERT,除非您确定不会有其他进程/线程更新数据库。

于 2013-02-04T07:08:42.227 回答
1

使用 SQL 选择语句

Select max(orderid) from proj_table;

然后,您可以使用 integer+1 作为下一个值。

于 2013-02-04T07:07:02.097 回答