一直说 no such table: playlistTbl,怎么回事....
public class AppDBHelp extends SQLiteOpenHelper {
/**
* 表名
*/
public static final String TBL_NAME = "playlistTbl";
/**
* 建表语句
*/
public static final String CREATE_TBL = "create table " + TBL_NAME + " ("
+ "_id integer,"
+ "id integer,"
+ "songName text,"
+ "songSinger text,"
+ "album text,"
+ "albumId long,"
+ "displayName text,"
+ "duration long,"
+ "size long,"
+ "path text)";
public AppDBHelp(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TBL);
} catch (SQLException e) {
LogUtils.i("error", "create table failed");
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
db.execSQL("drop table if exists " + TBL_NAME);
} catch (SQLException e) {
LogUtils.i("error", "create table failed");
}
onCreate(db);
}
}
public class AppDB {
private static final int AppDBVersion = 1;
private static AppDB songDB;
private SQLiteDatabase db;
/**
* 构造方法私有化
*/
private AppDB(Context context) {
AppDBHelp appDBHelp = new AppDBHelp(context, AppConstant.AppDB_NAME, null, AppDBVersion);
db = appDBHelp.getWritableDatabase();
}
/**
* 获取SongDB实例
*/
public synchronized static AppDB getInstance(Context context) {
if (songDB == null) {
songDB = new AppDB(context);
}
return songDB;
}
/**
* 将SongDetails实例存储到数据库
*
* @param details
*/
public void addSongInfo(SongDetails details) {
if (details != null) {
ContentValues values = new ContentValues();
values.put("_id", details.get_id());
values.put("id", details.getId());
values.put("songName", details.getSongName());
values.put("songSinger", details.getSongSinger());
values.put("album", details.getAlbum());
values.put("albumId", details.getAlbumId());
values.put("displayName", details.getDisplayName());
values.put("duration", details.getDuration());
values.put("size", details.getSize());
values.put("path", details.getPath());
db.insert(AppDBHelp.TBL_NAME, null, values);
}
}
/**
* 从数据库加载Song信息
*/
public List<SongDetails> loadSongDetails() {
List<SongDetails> list = new ArrayList<SongDetails>();
Cursor cursor = db.query(AppDBHelp.TBL_NAME, null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
SongDetails details = new SongDetails();
details.set_id(cursor.getInt(cursor.getColumnIndex("_id")));
details.setId(cursor.getInt(cursor.getColumnIndex("id")));
details.setSongName(cursor.getString(cursor.getColumnIndex("songName")));
details.setSongSinger(cursor.getString(cursor.getColumnIndex("songSinger")));
details.setAlbumId(cursor.getLong(cursor.getColumnIndex("albumId")));
details.setDisplayName(cursor.getString(cursor.getColumnIndex("displayName")));
details.setDuration(cursor.getLong(cursor.getColumnIndex("duration")));
details.setSize(cursor.getLong(cursor.getColumnIndex("size")));
details.setPath(cursor.getString(cursor.getColumnIndex("path")));
list.add(details);
} while (cursor.moveToNext());
}
return list;
}
}
实体类
public class SongDetails implements Serializable {
private int _id;
// 歌曲Id
private int id;
// 歌曲名称
private String songName;
// 歌手名称
private String songSinger;
// 专辑
private String album;
// 专辑Id
private long albumId;
// 显示名称
private String displayName;
// 歌曲时长
private long duration;
// 歌曲大小
private long size;
// 歌曲路径
private String path;
错误信息
12-05 01:28:53.008 20834-21026/? E/SQLiteDatabase: Error inserting id=69441 duration=0 albumId=24 _id=183 album=download songSinger=<unknown> path=/storage/sdcard0/kgmusic/download/张敬轩 - 追风筝的孩子.ape songName=张敬轩 - 追风筝的孩子 displayName=张敬轩 - 追风筝的孩子.ape size=30158672
android.database.sqlite.SQLiteException: no such table: playlistTbl (code 1): , while compiling: INSERT INTO playlistTbl(id,duration,albumId,_id,album,songSinger,path,songName,displayName,size) VALUES (?,?,?,?,?,?,?,?,?,?)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
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:1467)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
at com.jack.musicandchat.db.AppDB.addSongInfo(AppDB.java:63)
at com.jack.musicandchat.service.ScanService.onHandleIntent(ScanService.java:90)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.os.HandlerThread.run(HandlerThread.java:60)
at com.jack.musicandchat.db.AppDB.addSongInfo(AppDB.java:63)
public void addSongInfo(SongDetails details) {
if (details != null) {
ContentValues values = new ContentValues();
values.put("_id", details.get_id());
values.put("id", details.getId());
values.put("songName", details.getSongName());
values.put("songSinger", details.getSongSinger());
values.put("album", details.getAlbum());
values.put("albumId", details.getAlbumId());
values.put("displayName", details.getDisplayName());
values.put("duration", details.getDuration());
values.put("size", details.getSize());
values.put("path", details.getPath());
db.insert(AppDBHelp.TBL_NAME, null, values);
}
}
at com.jack.musicandchat.service.ScanService.onHandleIntent(ScanService.java:90)
最后一行是所谓的(ScanService.java:90)
Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
int _id = 1;
while (cursor.moveToNext()) {
int isMusic = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));
if (isMusic == 0) continue;
long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));
if (size < 1024 * 1024) continue;
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
if (displayName.contains(".mp3")) {
String[] displayNameArr = displayName.split(".mp3");
displayName = displayNameArr[0].trim();
}
long duration = cursor.getLong(cursor
.getColumnIndex(MediaStore.Audio.Media.DURATION));
String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
long albumid = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
// String albumPath = getAlbumPicPath(path, displayName);
SongDetails info = new SongDetails();
info.set_id(_id++);
info.setId(id);
info.setSongName(title);
info.setDuration(duration);
info.setDisplayName(displayName);
info.setSize(size);
info.setPath(path);
info.setSongSinger(artist);
info.setAlbum(album);
info.setAlbumId(albumid);
/**
*添加数据到数据中
*/
appDB.addSongInfo(info);
SQL语句左括号前面少了空格