2015-11-13 100 views
-1

我在Android的工作室初学者...我的代码只对表3列的作品,如果其他字段添加到表,logcat的将返回:SQLite的错误没有这样的列/语法错误近

没有这样的栏目:“FONE”

我有改变的代码创建表的一部分,现在它返回另一个错误(我不知道是不是第一个错误依然存在):

SQLite的日志: (1)near“)”:语法错误

可以肯定错误是在创建表或查询的...

...我已经寻找答案和字段的名称不是关键字,我试图纠正逗号等...

我认为SelectionArguments是解决方案,但我没有经验,我不知道究竟是如何把价值观有...

这很奇怪,因为我加场到TABLE的方式与其他方式相同,但现在它返回了这些错误,apk崩溃。

下面是表:

public void onCreate(SQLiteDatabase db) { 
     String livro = "CREATE TABLE livros " + 
         " (" + 
         " id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + 
         " titulo TEXT NOT NULL," + 
         " autor TEXT NOT NULL," + 
         " pagina TEXT NOT NULL," + 
         " fone INTEGER," + 
         ")" ; 
     db.execSQL(livro); 

查询的一部分:

String[] columns = {"id", "titulo", "autor", "pagina", "fone"}; 
     Cursor cursor = getWritableDatabase().query("livros", columns, null, null, null, null, null, null); 

     ArrayList<Livros> livros = new ArrayList<Livros>(); 

     while (cursor.moveToNext()){ 

      Livros livro = new Livros(); 

      livro.setId(cursor.getLong(0)); 
      livro.setTitulo(cursor.getString(1)); 
      livro.setAutor(cursor.getString(2)); 
      livro.setPagina(cursor.getString(3)); 
      livro.setFone((cursor.getInt(4))); ... 
+0

除了Maloubobola突出强调的问题,您可能无法理解数据库创建与升级差异。阅读此:http://stackoverflow.com/questions/21881992/when-is-sqliteopenhelper-oncreate-onupgrade-run – Kuffs

+0

清除您的应用程序的数据或卸载它,然后再次测试。 – madlymad

回答

4

你有一个额外,这条线后(以创建请求)

fone INTEGER, 

只是删除它

+2

然后卸载并重新安装您的应用程序,以便重新创建数据库。 –

+0

好吧,现在应用程序打开,它似乎应用程序正在保存寄存器...但当手指按下打开注册表,没有任何反应......你有什么想法吗?你的答案很简单,但帮助很大,谢谢。 –

+1

目前没有。但是这似乎是一个新问题,所以用最少的资源发布一个新问题来尝试解决它。 – ThomasThiebaud

0
" fone INTEGER," + 
        ")" ; 

应该

" fone INTEGER)" ; 

你没有在最后一栏后,使用逗号。

+1

这只是一个重复的Maloubobola答案 – Kuffs

+0

我写这个答案时,第一次发布,似乎并不正确。它在我发布时进行了编辑。 Artie需要时间并且形成一个答案。仅仅因为它在几分钟后出现,并不意味着我从另一篇文章中得到了这个想法。 @Kuffs –

+1

这就像我在堆栈上看到的许多帖子,它们之间有几秒钟或几分钟的时间。有些人花时间比其他人草拟答案。我很慢,如果,*在我开始写*的时候,如果没有正确的答案,我发布它。在此期间,我无法解释其他人发布或编辑帖子的情况。否则,我可以发布一个不完整的答案并对其进行编辑,以便获得较早的时间戳。 –