在我的数据库中有表名“Projtable”。项目名称包含4个字段。 1. projct id = autoincrement(主键) 2. projctname = varchar 3. projct_detail = 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
答案 0 :(得分:2)
您可以使用以下查询找到列的最大值:
SELECT MAX(orderid) FROM proj_table;
但是最好将列设置为INTEGER PRIMARY KEY
(当你CREATE TABLE
时),因此它会自动增加(最后一个插入的ID可用于sqlite3_last_insert_rowid
)。
如果您仍有理由使用最大值,请确保在单个事务中运行SELECT MAX...
和以下INSERT
,除非您确定不会有其他进程/线程更新数据库。
答案 1 :(得分:1)
使用SQL select语句
Select max(orderid) from proj_table;
然后您可以使用整数+ 1作为下一个值。