2014-11-01 22 views
0

我不知道为什么,但我的数据库中的每个项目重复约30次,即使我只插入每个项目一次。我想也许这可能是因为walkdir()方法插入到数据库中的每个扩展名为.mp3的文件在指定的根文件夹中,或者可能是因为我关于ListView回收的天真。SQLite插入多次添加相同的条目

public class SQLHelper extends SQLiteOpenHelper{ 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "MusicDatabase.db"; 
    private static final String SQL_CREATE_TABLE = 
      "CREATE TABLE "+ 
        FeedEntry.TABLE_NAME+" ("+ 
        FeedEntry._ID+" INTEGER PRIMARY KEY,"+ 
        FeedEntry.KEY_FILENAME+" TEXT UNIQUE,"+ 
        FeedEntry.KEY_SONGNAME+" TEXT)"; 
    private static final String SQL_DELETE_TABLE = "DROP TABLE IF EXISTS "+ SQLContract.FeedEntry.TABLE_NAME; 

    public SQLHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(SQL_CREATE_TABLE); 
    } 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL(SQL_DELETE_TABLE); 
     onCreate(db); 
    } 
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     onUpgrade(db, oldVersion, newVersion); 
    }/* 
    public List<Song> getAllSongs(){ 
     List<Song> songs = new LinkedList<Song>(); 
     String query = "SELECT * FROM "+FeedEntry.TABLE_NAME; 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(query,null); 
     Song song = null; 
     if(cursor.moveToFirst()){ 
      do { 
       song = new Song(); 
       song.setId(Integer.parseInt(cursor.getString(0))); 
       song.setFileName(cursor.getString(1)); 
       song.setSongName(cursor.getString(2)); 
       songs.add(song); 
      }while(cursor.moveToNext()); 
     } 
     return songs; 
    }*/ 
    public void addSong(File file){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(FeedEntry.KEY_FILENAME, file.getPath()); 
     values.put(FeedEntry.KEY_SONGNAME, file.getName()); 
     db.insert(FeedEntry.TABLE_NAME,null,values); 
    } 
    public Cursor read(String sort, String direction){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     String[] projection = { 
      FeedEntry._ID, 
      FeedEntry.KEY_FILENAME, 
      FeedEntry.KEY_SONGNAME, 
     }; 
     String sortOrder = sort+direction; 
     Cursor c = db.query(
       FeedEntry.TABLE_NAME, 
       projection,null,null,null,null, 
       sortOrder 
     ); 
     return c; 
    } 
} 
+0

你假设,不知何故,我们都知道你在说什么,或者我错过了最后一集什么的。 – eduyayo 2014-11-01 16:08:32

+0

插入的代码似乎没问题。根目录的内容和列表中重复的内容是什么? – eduyayo 2014-11-01 16:09:04

+0

什么时候“walkdir”叫? – 2014-11-01 20:46:12

回答

0

大量的试验和失败后,我发现,在我的代码中的错误就出在这里:

public static final String DATABASE_NAME = "MusicDatabase.db"; 

应该是:

public static final String DATABASE_NAME = "MusicDatabase"; 

我不知道为什么我认为数据库扩展是必要的。