【发布时间】:2019-04-26 14:34:31
【问题描述】:
我创建了一个数据库没有问题,我可以显示它手动添加数据,但是在 if else 方法中它没有添加任何值,我可以在日志中看到适合 if 方法的值但我认为问题是execSQL方法我不能调用它。
在我用 // 行标记的第二个代码的底部附近
错误:
android.database.sqlite.SQLiteException: near "s": syntax error (code 1): , while compile: INSERT INTO myTable1(id, FAVCampaignName, FAVCampaigncampaignStartDate, FAVCampaigncampaignEndDate) VALUES(NULL,'Starbucks's','2019- 04-01','2019-04-19'); ################################################# ############### 错误代码:1(SQLITE_ERROR) 原因:SQL(查询)错误或缺少数据库。 (“de”附近:语法错误(代码 1):,编译时:INSERT INTO myTable1(id, FAVCampaignName, FAVCampaigncampaignStartDate, FAVCampaigncampaignEndDate) VALUES(NULL,'Starbucks's','2019-04-01','2019-04- 19');) ################################################# ############### 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法) 在 android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1062)
代码:
public void DBCreateFavCampaign(){
SQLITEDATABASEFavCampaign = openOrCreateDatabase("FavCampaign3", Context.MODE_PRIVATE, null);
SQLITEDATABASEFavCampaign.execSQL("CREATE TABLE IF NOT EXISTS myTable1(id INTEGER PRIMARY KEY AUTOINCREMENT, FAVCampaignName VARCHAR,FAVCampaigncampaignStartDate VARCHAR, FAVCampaigncampaignEndDate VARCHAR);");
}
代码2:
public void readFirestore() {
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("campaigns")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
private String FSname,FScityLAT,FScityLONG,FScampaignStartDate,FScampaignEndDate;
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful() && task.getResult() != null) {
for (QueryDocumentSnapshot document : task.getResult()) {
String name = document.getString("name");
String cityLAT = document.getString("cityLAT");
String cityLONG = document.getString("cityLONG");
String campaignStartDate = document.getString("campaignStartDate");
String campaignEndDate = document.getString("campaignEndDate");
this.FSname = name;
this.FScityLAT = cityLAT;
this.FScityLONG = cityLONG;
this.FScampaignStartDate = campaignStartDate;
this.FScampaignEndDate = campaignEndDate;
String FS_FAVCurrentLocationLAT = List_FAVCurrentLocationLAT;
String FS_FAVCurrentLocationLONG = List_FAVCurrentLocationLONG;
double FS_FAVCurrentLocationLAT_double = Double.parseDouble(FS_FAVCurrentLocationLAT);
double FS_FAVCurrentLocationLONG_double = Double.parseDouble(FS_FAVCurrentLocationLONG);
double FScityLAT_double = Double.parseDouble(FScityLAT);
double FScityLONG_double = Double.parseDouble(FScityLONG);
double theta = FScityLONG_double - FS_FAVCurrentLocationLONG_double;
double dist = Math.sin(Math.toRadians(FS_FAVCurrentLocationLAT_double)) * Math.sin(Math.toRadians(FScityLAT_double)) + Math.cos(Math.toRadians(FS_FAVCurrentLocationLAT_double)) * Math.cos(Math.toRadians(FScityLAT_double)) * Math.cos(Math.toRadians(theta));
dist = Math.acos(dist);
dist = Math.toDegrees(dist);
dist = dist * 60 * 1.1515;
dist = dist * 1.609344;
Log.i("hello",""+dist); //OK it writes to the log
if (dist <= 0.5) //
{
Log.i("near",""+dist); // Ok
DBCreateFavCampaign();
SQLiteQueryFavCampaign = "INSERT INTO myTable1(id, FAVCampaignName, FAVCampaigncampaignStartDate, FAVCampaigncampaignEndDate) VALUES(NULL,'"+FSname+"','"+FScampaignStartDate+"','"+FScampaignEndDate+"');";
SQLITEDATABASEFavCampaign.execSQL(SQLiteQueryFavCampaign); //execSQL gives the error
Toast.makeText(CampaignActivity.this,"FAV OK", Toast.LENGTH_SHORT).show();
}
}
} else {
}
}
});
}
【问题讨论】:
-
看在上帝的份上,请使用
PreparedStatements,不要将值直接写入数据库。