【问题标题】:SQLiteLog:(1) no such table: tableName.db (sqlite with android)SQLiteLog:(1) no such table: tableName.db (sqlite with android)
【发布时间】:2015-06-21 16:26:15
【问题描述】:

我想在我的 android 应用程序中使用 SQlite 来存储一些数据。尝试运行该应用程序后出现此错误:

    06-21 16:14:30.175    2375-2375/snet.app E/SQLiteLog﹕ (1) no such table: tracks.db
06-21 16:14:30.176    2375-2375/snet.app E/SQLiteDatabase﹕ Error inserting title=Goldchains _id=null artist=Marlin album=Filet Mignon - Volume II
    android.database.sqlite.SQLiteException: no such table: tracks.db (code 1): , while compiling: INSERT INTO tracks.db(title,_id,artist,album) VALUES (?,?,?,?)
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
            at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
            at snet.tuberlin.app.DBHandler.addTrack(DBHandler.java:64)
            at snet.tuberlin.app.TrackInformations$1.onReceive(TrackInformations.java:91)
            at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

我尝试了我在谷歌中找到的所有方法来解决这个问题,包括更改数据库版本。它可以工作,但是在尝试再次运行应用程序后又回到了相同的错误。 这是我的 DBHandler 类:

    public class DBHandler extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 6;// as you can see i changed the version many time already !!
    private static final String DATABASE_NAME = "tracks.db";

    public static final String TABLE_TRACKS = "tracks";
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_TITLE = "title";
    public static final String COLUMN_ARTIST = "artist";
    public static final String COLUMN_ALBUM = "album";
    public static final String COLUMN_LOCATION = "location";

    public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
    }

    public void onCreate(SQLiteDatabase db) {

        final String DATABASE_CREATE = "create table "
                + TABLE_TRACKS + "(" + COLUMN_ID
                + " integer primary key autoincrement, " + COLUMN_TITLE
                + " text not null, " +COLUMN_ARTIST
                + " text not null, " + COLUMN_ALBUM
                + " text not null);";
        db.execSQL(DATABASE_CREATE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_TRACKS);
        onCreate(db);
    }

    /*Add new row to the DB*/
    public void addTrack(UserTrack usertrack) {
        ContentValues values = new ContentValues();
        values.put(COLUMN_ID, usertrack.getUserTrackId());
        values.put(COLUMN_TITLE, usertrack.getTitle());
        values.put(COLUMN_ARTIST, usertrack.getArtist());
        values.put(COLUMN_ALBUM, usertrack.getAlbum());

        SQLiteDatabase db = getWritableDatabase();
        db.insert(DATABASE_NAME, null, values);
        db.close();
    }


}

【问题讨论】:

  • 使用TABLE_TRACKS(表名)代替DATABASE_NAME(数据库名)在数据库中插入数据

标签: android database sqlite


【解决方案1】:

只需在addTrack方法中改为db.insert(TABLE_TRACKS, null, values);即可。

您提供了数据库名称而不是表名称,因此您遇到了错误。

以下代码更正

public void addTrack(UserTrack usertrack) {
        ContentValues values = new ContentValues();
        values.put(COLUMN_ID, usertrack.getUserTrackId());
        values.put(COLUMN_TITLE, usertrack.getTitle());
        values.put(COLUMN_ARTIST, usertrack.getArtist());
        values.put(COLUMN_ALBUM, usertrack.getAlbum());

        SQLiteDatabase db = getWritableDatabase();
        db.insert(TABLE_TRACKS, null, values); <----change here
        db.close();
    }

【讨论】:

  • 欢迎您:)如果它对您有帮助,您可以将其标记为已回答,并在将来帮助其他用户。
  • 是的,我做到了 :) 但现在我得到了另一个错误: SQLiteException:接近“1”:语法错误(代码 1):编译时:SELECT * FROM WHERE 1
  • 你能再发一个问题吗..很难从 cmets 跟踪它..
  • 我想在 90 分钟内我必须发布另一个问题,因为我已经收到这两个错误两天了
  • 我会,但我必须等 90 分钟!我一发布就会在评论中提供链接!谢谢你的帮助
猜你喜欢
  • 2018-05-24
  • 2022-07-06
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多