Android数据库写错误

时间:2015-05-01 00:52:27

标签: android sqlite

我有一个应用程序作为内部数据库,应用程序崩溃时出现此错误:

04-30 20:46:30.836    1647-1647/prosis.guiatour E/SQLiteLog﹕ (1) no such column: Basílica_Santa_Luzia

以及它所引用的代码是:

public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_QUERY);
    Log.e("Database Operations"," Table Created....");
    db.execSQL(addingInfo("Basílica_Santa_Luzia", "Stuff", "10.43597", "-10.5747"));
Log.e("Database Operations"," Data Inserted");
}
public String addingInfo(String nome, String cat, String lat, String longi){
    String Query = "INSERT INTO "+ Table_name+" VALUES("+nome+","+cat+","+lat+","+longi+");";
    return Query;
}

这是我的结构查询:

private static final String CREATE_QUERY = "CREATE TABLE "+ Contract.NewLocalInfo.Table_name+" ("+ Contract.NewLocalInfo.Nome+" TEXT,"+ Contract.NewLocalInfo.Categoria+" TEXT,"+ Contract.NewLocalInfo.Latitude+" TEXT,"+ Contract.NewLocalInfo.Longitude+" TEXT);";

我认为SQL写得很好所以你认为这里的问题是什么?

2 个答案:

答案 0 :(得分:1)

您的SQL无效。根据你的功能,你会得到:

INSERT INTO table_name VALUES(Basilica_Santa_Luzia,Stuff,10.43,10.57)

无效。你必须单引号,如:

INSERT INTO table_name VALUES('Basilica_Santa_Luzia','Stuff','10.43','10.57')

但是,除非您有复杂的要求,否则不应该编写任何SQL。您应该使用内置于Android中的内容或获取第三方选项。

编写SQL查询字符串会产生安全风险并导致类似这样的错误 要插入,请执行:

ContentValues cv = new ContentValues();
cv.put("key","value");
cv.put("key2","value2");
db.insert("table_name",cv);

此方法将自动转义任何参数并确保您的查询没有错误。

此外,纬度和经度可能不应该是String s。我不记得是肯定的,但我认为你需要的是double / JavaAndroid,而在普通的SQL中,你需要一个decimal数据类型列,但它的SQLite,我不知道你应该为sqlite中的十进制列做什么,所以也许Duck it

另外,我创建了一个包含SQLiteOpenHelper类的database manager class来确保同步和线程安全,这可以简化你的生活并防止大量错误。

答案 1 :(得分:0)

在所有值周围添加单引号,然后此插入将起作用。最终查询应如下所示

index.jsp