2012-11-21 62 views
3

我想创建Android上的数据库,当我运行将引发异常:Android的数据库异常

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); 
      } 
     }); 
    } 
+0

我认为它检查ID不null在create语句中。一旦检查它 –

回答

3

check是一个SQLite关键字。您不能将其用作表或列名称。

将您的列名更改为别的,您的错误将消失。

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

有关curent SQLite关键字的完整列表,请看here

+0

ref:http://www.sqlite.org/lang_keywords.html – njzk2

+0

感谢您立即工作 –

-1

下午好,把你的代码_id integer primary key autoincrement, ...,对于为例:

CREATE TABLE tabela(_id integer primary key autoincrement, task text not null, check integer not null);

+0

'check'是一个SQLite关键字...它不能用作表或列的名称。 – Barak

+0

对不起,我没有看到你的帖子.. – Rodolfo

1

直接使用关键字作为列名,报价是:

..., "check" integer not null) 
+0

+1正确,但你必须逃避引号(用于OP使用它的方法)。更简单的只是改变列名IMO。 :p – Barak