andriod 数据存储与读取

如何将音频或者音频路径存入SQLite数据库中,又怎么读取

SQLite数据库存储数据
SQLite是一个轻量级关系型数据库,既然是关系型数据库,那操作起来其实跟MySQL、sql server差不多的。
SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。
  对数据库SQLite进行操作,我们要借助于SQLiteOpenHelper类进行操作。对数据库的操作也就是”增、删、改、查“。在学习数据库的操作之前我们首先要学会如何创建数据库……
创建数据库
  数据库的操作借助于SQLiteOpenHelper,SQLiteOpenHelper是一个抽象类,我们我们在使用SQLiteOpenHelper时要先创建一个MySQLiteOpenHelper继承SQLiteOpenHelper类。
  SQLiteOpenHelper有两个非常重要的方法:getReadableDatabase()方法返回数据库是一个只读的;getWriteableDatabase()方法获得是一个可读写的数据库对象。这里我们使用getWriteableDatabase()方法获得数据库Database对象。
添加数据
  使用SQLiteDatabase的insert(String table, String nullColumnHack, ContentValues values)方法插入数据。这个方法包含三个参数:
  我们先列举一条SQLite中的插入语句:INSERT INTO user (name, passwords)] VALUES ("张三", "123456");
String table:操作的数据表的名称。
String nullColumnHack:用于我们在未指定添加数据的情况下,为数据表中可以添加null值的数据填入null值。一般这个参数我们传入null。
ContentValues values:用于传递数据,通常我们通过ContentValues 类的对象的putXXX()方法封装数据,然后将数据添加进数据库。
  ContentValues 类,类似于Java中的Map,以键值对的方式保存数据。
删除数据
  使用SQLiteDatabase的delete(String table, String whereClause, String[] whereArgs)方法删除数据。这个方法包含三个参数:
  我们先列举一条SQLite中的删除语句:DELETE FROM user WHERE name="张三"。
String table:操作的数据表的名称。
String whereClause:约束删除行的条件。相当于SQLite语句中“where name=?“内容。
String[] whereArgs:与前一个参数对应约束删除行的条件。相当于”where name=”张三““中的”张三“。
注意:如果参数String whereClause和参数String[] whereArgs都传null的话,就是删除所有行。
修改数据
  使用SQLiteDatabase的 update (String table, ContentValues values, String whereClause, String[] whereArgs)方法删除数据。这个方法包含四个参数:
  我们先列举一条SQLite中的修改语句:UPDATE user SET name= "李四", passwords= "123" WHERE name="张三"。
String table:操作的数据表的名称。
ContentValues values:用于传递数据,通常我们通过ContentValues 类的对象的putXXX()方法封装数据,然后将数据添加进数据库。
String whereClause:约束修改行的条件。相当于SQLite语句中“where name=?“内容。
String[] whereArgs:与前一个参数对应约束删除行的条件。相当于”where name=”张三““中的”张三“。
查询数据
  对于”查“操作,SQLiteDatabase提供了多种方法。
  我们先列举一条SQLite中的修改语句:SELECT passwords="123" FROM user。
(1)使用SQL语句进行查询。这里SQLiteDatabase提供了方法:
rawQuery (String sql, String[] selectionArgs):该方法返回 Cursor类的对象,用于操作查询的结果。
(2)使用SQLiteDatabase内定方法查询:
query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit):这个方法有N多个参数啊……String table是操作的数据表的名称;String selection是筛选的字段选项;String[] selectionArgs是字段选项对应的值;String groupBy是筛选结果的分组依据;String having是在由groupBy子句创建的分组上设置条件;String orderBy是结果的排序方式,String limit是筛选结果的显示限制,例如“2, 3”是指从筛选结果的第2个开始显示3个。

音频文件路径 :android 工程中的声音文件一般位于raw文件夹下;
res->raw,也可以重新在res下创建一个新的文件夹;

一般使用sharepreferences存储技术
public class MusicUtils {

// 存放歌曲列表

public static ArrayList sMusicList = new ArrayList();

    public static void initMusicList() {  
        // 获取歌曲列表  
        sMusicList.clear();  
        sMusicList.addAll(LocalMusicUtils.queryMusic(getBaseDir()));  
    }  

    /**  
     * 获取内存卡根  
     * @return  
     */  
    public static String getBaseDir() {  
        String dir = null;  
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_UNMOUNTED)) {  
            dir = Environment.getExternalStorageDirectory() + File.separator;  
        } else {  
            dir = App.sContext.getFilesDir() + File.separator;  
        }  

        return dir;  
    }  

    /**  
     * 获取应用程序使用的本地目录  
     * @return  
     */  
    public static String getAppLocalDir() {  
        String dir = null;  

        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_UNMOUNTED)) {  
            dir = Environment.getExternalStorageDirectory() + File.separator  
                    + "Music" + File.separator;  
        } else {  
            dir = App.sContext.getFilesDir() + File.separator + "Music" + File.separator;  
        }  

        return mkdir(dir);  
    }  

    /**  
     * 获取音乐存放目录  
     * @return  
     */  
    public static String getMusicDir() {  
        String musicDir = getAppLocalDir();  
        return mkdir(musicDir);  
    }  

    /**  
     * 获取歌词存放目录  
     *   
     * @return  
     */  
    public static String getLrcDir() {  
        String lrcDir = getAppLocalDir();  
        return mkdir(lrcDir);  
    }  

    /**  
     * 创建文件夹  
     * @param dir  
     * @return  
     */  
    public static String mkdir(String dir) {  
        File f = new File(dir);  
        if (!f.exists()) {  
            for (int i = 0; i < 5; i++) {  
                if(f.mkdirs()) return dir;  
            }  
            return null;  
        }  

        return dir;  
    }  

            /**  
 * 获取目录下的歌曲  
 * @param dirName  
 */  
public static ArrayList<Music> queryMusic(String dirName) {  
    ArrayList<Music> results = new ArrayList<Music>();  
    Cursor cursor = App.sContext.getContentResolver().query(  
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,  
            MediaStore.Audio.Media.DATA + " like ?",  
            new String[] { dirName + "Music/" + "%" },  
            MediaStore.Audio.Media.DEFAULT_SORT_ORDER);  
    if(cursor == null) return results;  

    // id title singer data time image  
    Music music;  
    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {  
        // 如果不是音乐  
        String isMusic = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.IS_MUSIC));  
        if (isMusic != null && isMusic.equals("")) continue;  

        String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));  
        String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));  

        if(isRepeat(title, artist)) continue;  

        music = new Music();  
        music.setId(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)));  
        music.setTitle(title.toString());  
        music.setArtist(artist.toString());  
        music.setUri(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));  
        music.setLength(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)));  
        music.setImage(getAlbumImage(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID))));  
        results.add(music);  
    }  

    cursor.close();  
    return results;  
}  

    /**  
 * 播放  
 * @param position 音乐列表的位置  
 * @return 当前播放的位置  
 */  
public int play(int position) {  
    if(position < 0) position = 0;  
    if(position >= MusicUtils.sMusicList.size()) position = MusicUtils.sMusicList.size() - 1;  

    try {  
        mPlayer.reset();  

        mPlayer.setDataSource(MusicUtils.sMusicList.get(position).getUri());  
        mPlayer.prepare();  

        start();  
        if(mListener != null) mListener.onChange(position);  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  

    mPlayingPosition = position;  
    SpUtils.put(Constants.PLAY_POS, mPlayingPosition);  
    if(!readyNotification){  
        startNotification();  
    }else{  
        setRemoteViews();  
    }  
    return mPlayingPosition;  
}  

android实现音乐播放器:
http://blog.csdn.net/u014078192/article/details/22827397