Android SQL错误,不会创建表

发布于 2024-11-14 01:19:49 字数 4104 浏览 3 评论 0原文

我是 android 编程新手,我正在尝试制作 SQLite 数据库,但我不断收到此错误,

06-05 17:10:59.164: ERROR/AndroidRuntime(268): FATAL EXCEPTION: main

06-05 17:10:59.164: ERROR/AndroidRuntime(268): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.c.notes/com.c.notes.Notes}:   android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, title, body FROM note

我读到其他人也遇到与我相同的问题,但没有一个解决方案有效。 这是我的数据库适配器类,我认为问题在于

package com.c.notes;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class NotesDataBase {

/* public static final String Note_TITLE = "noteTitle";
 public static final String Note = "notee"; //these dont work must need other form for sql to work
 public static final String NoteID = "Noteid";
*/
  public static final String KEY_TITLE = "title";
    public static final String KEY_BODY = "body";
    public static final String KEY_ROWID = "_id";

 private static final String Iden = "notesLinkCable";
 private ACTNotesDBBuddy DatBuddy;//dbhelper was a coni
 private SQLiteDatabase ACTNotesDB;
/** private static final String Create_DataBase = 
        "create table note (Noteid integer primary key autoincrement, "
        + "noteTitle text not null, notee text not null);";
*/
 private static final String DATABASE_CREATE =
        "create table notes (_id integer primary key autoincrement, "
        + "title text not null, body text not null);";

 private static final String DBname = "DatBass";
 private static final String DatBassTable = "note";
 private static final int DatBassVER = 2;

 private final Context coni;



 private static class ACTNotesDBBuddy extends SQLiteOpenHelper {

     ACTNotesDBBuddy(Context context){
         super(context, DBname, null, DatBassVER);
     }

 @Override//1
 public void onCreate(SQLiteDatabase sld){
     sld.execSQL(DATABASE_CREATE);//so the data has so bs stuff pushed in it already lol
 }

 @Override//2
 public void onUpgrade(SQLiteDatabase slld, int old, int newV){
     Log.w(Iden, "I guess I'm upgrading sdl from ver" + old + " to " + newV +
                " ps I hear this will kill off the old king and knights saved");//this is a logCat tag I believe anyway this kills old data for an update...wont be doing that

        slld.execSQL("DROP TABLE IF EXISTS " + KEY_TITLE);
     onCreate(slld);
 }

 }
 //3
 public NotesDataBase(Context con){
     this.coni=con;
 }
 //4
 public NotesDataBase open() throws SQLException{
     DatBuddy = new ACTNotesDBBuddy(coni);
     ACTNotesDB =DatBuddy.getWritableDatabase();
     return this; 
 }
 //5
 public void close(){
     DatBuddy.close();
 }
  //6 a 10
 public long createNote( String name, String body){
     ContentValues Orgin = new ContentValues();
     Orgin.put(KEY_TITLE, name);
     Orgin.put(KEY_BODY,body);//my intial thought is this will over right each other but i believe its kinda like a stackish thing :)

     return ACTNotesDB.insert(DatBassTable ,null,Orgin);
 }

 //7a6
 public boolean deleteNote(long locoRow){
    return ACTNotesDB.delete(DatBassTable,KEY_ROWID + "=" + locoRow,null)>0; 
 }
 //8
 public Cursor fetchAllNotes(){
     return ACTNotesDB.query(DatBassTable, new String []{ KEY_ROWID,KEY_TITLE,KEY_BODY}, null, null, null, null, null);
     }



 //9a7
 public Cursor fetchNote(long rid) throws SQLException{
     Cursor cursor = ACTNotesDB.query(true, DatBassTable, new String [] {KEY_ROWID,KEY_TITLE,KEY_BODY}, KEY_ROWID +"="+rid, null, null, null, null, null);

     if(cursor != null){
         cursor.moveToFirst();
     }
     return cursor;
 }
 //10
  public boolean updateNote(long loco, String name, String note) {
        ContentValues info = new ContentValues();
        info.put(KEY_TITLE, name);
        info.put(KEY_BODY, note);
        return ACTNotesDB.update(DatBassTable, info, KEY_ROWID + "=" + loco, null) > 0;
    }




}

I'm new to programming android, I'm trying to make a SQLite DAtabase but i keep get this error

06-05 17:10:59.164: ERROR/AndroidRuntime(268): FATAL EXCEPTION: main

06-05 17:10:59.164: ERROR/AndroidRuntime(268): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.c.notes/com.c.notes.Notes}:   android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, title, body FROM note

I read were other people are having the same issue as me, but none of the solutions are working.
here's my database adapter class where I believe the issue is

package com.c.notes;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class NotesDataBase {

/* public static final String Note_TITLE = "noteTitle";
 public static final String Note = "notee"; //these dont work must need other form for sql to work
 public static final String NoteID = "Noteid";
*/
  public static final String KEY_TITLE = "title";
    public static final String KEY_BODY = "body";
    public static final String KEY_ROWID = "_id";

 private static final String Iden = "notesLinkCable";
 private ACTNotesDBBuddy DatBuddy;//dbhelper was a coni
 private SQLiteDatabase ACTNotesDB;
/** private static final String Create_DataBase = 
        "create table note (Noteid integer primary key autoincrement, "
        + "noteTitle text not null, notee text not null);";
*/
 private static final String DATABASE_CREATE =
        "create table notes (_id integer primary key autoincrement, "
        + "title text not null, body text not null);";

 private static final String DBname = "DatBass";
 private static final String DatBassTable = "note";
 private static final int DatBassVER = 2;

 private final Context coni;



 private static class ACTNotesDBBuddy extends SQLiteOpenHelper {

     ACTNotesDBBuddy(Context context){
         super(context, DBname, null, DatBassVER);
     }

 @Override//1
 public void onCreate(SQLiteDatabase sld){
     sld.execSQL(DATABASE_CREATE);//so the data has so bs stuff pushed in it already lol
 }

 @Override//2
 public void onUpgrade(SQLiteDatabase slld, int old, int newV){
     Log.w(Iden, "I guess I'm upgrading sdl from ver" + old + " to " + newV +
                " ps I hear this will kill off the old king and knights saved");//this is a logCat tag I believe anyway this kills old data for an update...wont be doing that

        slld.execSQL("DROP TABLE IF EXISTS " + KEY_TITLE);
     onCreate(slld);
 }

 }
 //3
 public NotesDataBase(Context con){
     this.coni=con;
 }
 //4
 public NotesDataBase open() throws SQLException{
     DatBuddy = new ACTNotesDBBuddy(coni);
     ACTNotesDB =DatBuddy.getWritableDatabase();
     return this; 
 }
 //5
 public void close(){
     DatBuddy.close();
 }
  //6 a 10
 public long createNote( String name, String body){
     ContentValues Orgin = new ContentValues();
     Orgin.put(KEY_TITLE, name);
     Orgin.put(KEY_BODY,body);//my intial thought is this will over right each other but i believe its kinda like a stackish thing :)

     return ACTNotesDB.insert(DatBassTable ,null,Orgin);
 }

 //7a6
 public boolean deleteNote(long locoRow){
    return ACTNotesDB.delete(DatBassTable,KEY_ROWID + "=" + locoRow,null)>0; 
 }
 //8
 public Cursor fetchAllNotes(){
     return ACTNotesDB.query(DatBassTable, new String []{ KEY_ROWID,KEY_TITLE,KEY_BODY}, null, null, null, null, null);
     }



 //9a7
 public Cursor fetchNote(long rid) throws SQLException{
     Cursor cursor = ACTNotesDB.query(true, DatBassTable, new String [] {KEY_ROWID,KEY_TITLE,KEY_BODY}, KEY_ROWID +"="+rid, null, null, null, null, null);

     if(cursor != null){
         cursor.moveToFirst();
     }
     return cursor;
 }
 //10
  public boolean updateNote(long loco, String name, String note) {
        ContentValues info = new ContentValues();
        info.put(KEY_TITLE, name);
        info.put(KEY_BODY, note);
        return ACTNotesDB.update(DatBassTable, info, KEY_ROWID + "=" + loco, null) > 0;
    }




}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

安人多梦 2024-11-21 01:19:49

您正在查询的表在数据库表名称变量中保存为“note”。您可以将表创建为带有“s”的“注释”。

The table you're querying is saved as "note" in your database table name variable. You create the table as "notes" with an "s."

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文