我有一个应用程序作为内部数据库,应用程序崩溃时出现此错误:
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写得很好所以你认为这里的问题是什么?
答案 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
/ Java
方Android
,而在普通的SQL中,你需要一个decimal
数据类型列,但它的SQLite
,我不知道你应该为sqlite中的十进制列做什么,所以也许Duck it。
另外,我创建了一个包含SQLiteOpenHelper类的database manager class来确保同步和线程安全,这可以简化你的生活并防止大量错误。
答案 1 :(得分:0)
在所有值周围添加单引号,然后此插入将起作用。最终查询应如下所示
index.jsp