创建表时的主键声明错误

时间:2009-09-08 16:12:07

标签: c++ sql symbian

CreateL()
{
_LIT(KSQLCountry, "CREATE TABLE Country(CountryID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,CountryName VARCHAR(45) NOT NULL,CountryCode VARCHAR(10) NOT NULL)");
User::LeaveIfError(iDatabase.Execute(KSQLCountry));
}

创建表时我想声明主键和外键

在创建表

期间显示运行时错误(崩溃)

声明主键的正确方法

3 个答案:

答案 0 :(得分:1)

我不知道您使用的是哪个数据库,但也许这会对您有所帮助

http://snippets.dzone.com/posts/show/1680

尝试使用COUNTER数据类型而不是INTEGER和AUTOINCREMENT。

另一个猜测:那不是带有下划线的AUTO_INCREMENT吗?

答案 1 :(得分:1)

AUTO_INCREMENT确实有下划线,这是SQL

中的错误

答案 2 :(得分:0)

好像你正在使用旧的Symbian DBMS而不是SQLite。

旧的DBMS仅支持一小部分SQL。如果我的记忆很好,那只包括一些基本的SELECT查询。

要使用旧DBMS创建表,请使用C ++ API,例如

CDbColSet* columns = CDbColSet::NewLC();

TDbCol id(_L("CountryID"), EDbColInt32);
id.iAttributes = TDbCol::EAutoIncrement | TDbCol::ENotNull;
columns->AddL(id);               

columns->AddL(TDbCol(_L("CountryName"), EDbColText, 45));
columns->AddL(TDbCol(_L("CountryCode"), EDbColText, 10));

User::LeaveIfError(aDatabase.CreateTable(_L("Country"), *columns));

CleanupStack::PopAndDestroy(columns);

或者只使用最新的SQLite支持的RSqlDatabase API。