【问题标题】:Error with SQLite in AndroidAndroid 中的 SQLite 出错
【发布时间】:2015-06-19 07:16:52
【问题描述】:
06-19 12:36:06.181: E/Inside log(15543): /sdcard/songs/(04) Fall Out Boy - Sugar, We're Goin' Down [2005].mp3
06-19 12:36:06.286: E/IMediaMetadataRetriever(15543): extractMetadata error
06-19 12:36:06.391: E/SQLiteLog(15543): (1) near "re": syntax error
06-19 12:36:06.421: E/AndroidRuntime(15543): FATAL EXCEPTION: main
06-19 12:36:06.421: E/AndroidRuntime(15543): android.database.sqlite.SQLiteException: near "re": syntax error (code 1): , while compiling: insert into SongDataBase(name,artist,genre,composer,albumname,year,path) values('Sugar, We're Goin' Down','Fall Out Boy','Punk','null','From Under The Cork Tree','2005','/sdcard/songs/(04) Fall Out Boy - Sugar, We're Goin' Down [2005].mp3')

代码:

if(name!=null)
{
    if(name.contains("'"))
    {
        name.replaceAll("'", "\'");
    }
}
if(genre!=null)
{
    if(genre.contains("'"))
    {
        genre.replaceAll("'", "\'");
    }
}
if(composer!=null)
{
    if(composer.contains("'"))
    {
        composer.replaceAll("'", "\'");
    }
}
if(albumname!=null)
{
    SQLiteDatabase database=getWritableDatabase();
    database.execSQL("insert into SongDataBase(name,artist,genre,composer,albumname,year,path) values('"+name+"','"+artist+"','"+genre+"','"+composer+"','"+albumname+"','"+yea‌​r+"','"+pathfile+"')");
}

【问题讨论】:

  • 您也应该编写插入查询代码。因为它没有格式化。
  • 歌曲标题中的'显然是查询的问题,但并不清楚您的问题到底是什么。
  • 这里似乎是个问题 " 'Sugar, We're Goin' Down',"
  • 我正在尝试使用 mediametadataretriever 将数据插入数据库,问题出在某些查询上。单引号引起了问题。我不知道我该如何纠正这个问题。
  • 一个 非常紧急 播放列表...但您没有发布支持代码?

标签: android sqlite audio-player android-music-player


【解决方案1】:

您需要将字符串中的撇号 (') 加倍 ('')。
否则,它们将被视为string delimiters,从而破坏您的字符串值。

不过,更好的解决方案是传递 bound 参数(使用 ? 占位符,然后由存储在字符串数组中的值填充通过)。
这样,字符串转换会自动处理,您不必加倍引号。


好的,通过分析你的代码,问题很明显的跳出来了:
不执行ArtistAlbum NameFile Path 上的引号替换。
您只能在 Name、Genre 和 Composer 上这样做。

在你的情况下,路径给你错误。

从这条错误消息中可以清楚地看出:

/sdcard/songs/(04) Fall Out Boy - Sugar, We're Goin' Down [2005].mp3

【讨论】:

  • 不,反斜杠在 SQLite 或任何其他 SQL 数据库中不起作用;这不是 MySQL。
【解决方案2】:

当您提出问题时,您应该提供更多信息(示例代码等)。但是你的问题很清楚,你只需要查看日志文件:

android.database.sqlite.SQLiteException: near "re": syntax error (code 1): , while compiling: insert into SongDataBase(name,artist,genre,composer,albumname,year,path) values('Sugar, We're Goin' Down','Fall Out Boy','Pu

您需要在用于创建该查询的代码段中转义字符 '。如果您不提供示例代码,我无法更具体。但是解决起来很简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多