1

I want to use SQlite for my android app to store some data.After trying to run the app i got this error :

    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)

I tried everything that i found in google to resolve this including changing the database version.It works ones but after trying to run the app another time it went back to the same error. This is my DBHandler class :

    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();
    }


}
1
  • 2
    Use TABLE_TRACKS(table name) instead of DATABASE_NAME( db name) for inserting data in db Commented Jun 21, 2015 at 16:28

1 Answer 1

2

Just change to db.insert(TABLE_TRACKS, null, values); in addTrack method.

You have provided the db name instead of the table name, hence you are getting the error.

Corrected code below

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();
    }
Sign up to request clarification or add additional context in comments.

5 Comments

Welcome:) You can mark it answered if it helped you and to help other users in future.
Yes i did :) but now i got another error : SQLiteException: near "1": syntax error (code 1): while compiling: SELECT * FROM WHERE 1
Can you post another question for it..its very difficult to track it from comments..
I think in 90 min i have to post another question because i have been getting those two error for two days now
i will but i have to wait 90 min ! i will provide the link in a comment as soon as i post it ! thank you for your help

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.