安卓数据库异常

3

我正在尝试在安卓设备上创建数据库,但是运行时出现了异常:

Database - Failure 1 (near "integer" : syntax error) on 0x1ac028 when preparing 'create table list1 (id integer Primary key autoincrement, task text not null, check integer not null)'

我不明白为什么会出现这种情况。这是我的代码:

String dbName="projectDatabase";
    String tableName="List1";
    String TableStructure="create table " + tableName +" (id integer Primary key autoincrement, task text not null, check integer not null)";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button cb = (Button) findViewById(R.id.creatbutton);
        cb.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                try{
                    SQLiteDatabase ldb = openOrCreateDatabase(dbName, Context.MODE_PRIVATE, null);
                    ldb.execSQL(TableStructure);}catch(Exception e){
                        Toast.makeText(DsTest2Activity.this, "Failed", Toast.LENGTH_LONG).show();
                    }
                Intent list = new Intent(DsTest2Activity.this,List.class);
                startActivity(list);
            }
        });
    }

我认为在创建语句中应该检查ID是否为空。请确认一下。 - G_S
3个回答

3

check 是 SQLite 关键字,不能用作表名或列名。

将列名更改为其他名称,您的错误将消失。

String TableStructure="create table " + tableName +" (id integer Primary key autoincrement, task text not null, checknum integer not null)";

若想查看当前SQLite关键字的完整列表,请点击这里


1

如果要直接使用关键字作为列名,请将其加引号:

..., "check" integer not null)

+1,但是你必须转义引号(在使用OP正在使用的方法中使用)。在我看来,更简单的方法是改变列名。 :p - Barak

-1
下午好,请在您的代码中加入以下内容:_id integer primary key autoincrement, ...,例如: CREATE TABLE tabela(_id integer primary key autoincrement, task text not null, check integer not null);

“check” 是 SQLite 的关键字,不能用作表或列名。 - Barak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接