2015-05-01 6 views
0

я получил приложение, которое в качестве внутренней базы данных, и приложение аварий с этой ошибкой:Android Запись базы данных Ошибка

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; 
} 

И это мой contructer запрос:

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 хорошо прописан так, что вы думаете, это проблема?

ответ

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 Query создает угрозы безопасности и вызывает ошибки, подобные этой.
Чтобы вставить вместо делать:

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

Этот подход будет автоматически экранировать все и гарантировать Счетчики, что ваш запрос не является ошибочным.

Кроме того, широта и долгота, вероятно, не должны быть String. Я точно не помню, но то, что мне кажется, это double для/Android и в нормальном SQL вам понадобится тип данных decimal в столбце, но его SQLite и я не уверен, что вы предположительно для десятичной колонки в sqlite, поэтому, возможно, Duck it.

Кроме того, я сделал database manager class, который обертывает класс SQLiteOpenHelper, чтобы обеспечить синхронизацию и безопасность потоков, что упростит вашу жизнь на тонну и предотвратит массу ошибок.

0

Добавьте одну цитату вокруг всех значений, тогда эта вставка будет работать. Заключительный запрос должен быть как ниже

INSERT INTO TABLE_NAME VALUES('Basílica_Santa_Luzia','Stuff','10.43597','-10.5747'); 
+0

Это взорвется, когда строка содержит цитату. –

+0

Одиночная кавычка в значении может быть проанализирована добавлением еще одной отдельной кавычки до нее – Manish

Смежные вопросы