插入SQLite数据库的困难(适用于android)

插入SQLite数据库的困难(适用于android),android,sql,database,sqlite,android-sqlite,Android,Sql,Database,Sqlite,Android Sqlite,我的代码有一些问题。我需要开发一个应用程序与一些有关商店的信息。这是一个单表数据库。这是我的4个java文件 `package com.example.rpata.roxyapp; public class TableBoutique { private int BTQ_KEY ; private String BTQ_NAME ; private String BTQ_TYPE ; private String BTQ_SITE ; private String BTQ_CLKAM1 ; p

我的代码有一些问题。我需要开发一个应用程序与一些有关商店的信息。这是一个单表数据库。这是我的4个java文件

`package com.example.rpata.roxyapp;

public class TableBoutique {
private int BTQ_KEY ;
private String BTQ_NAME ;
private String BTQ_TYPE ;
private String BTQ_SITE ;
private String BTQ_CLKAM1 ;
private String BTQ_CLKAM2 ;
private String BTQ_CLKPM1 ;
private String BTQ_CLKPM2 ;
private String BTQ_PHONE ;
private String BTQ_LOGO ;

public TableBoutique() {}

public TableBoutique(String BTQ_NAME, String BTQ_TYPE, String BTQ_SITE, String BTQ_CLKAM1, String BTQ_CLKAM2, String BTQ_CLKPM1, String BTQ_CLKPM2, String BTQ_PHONE, String BTQ_LOGO) {
    this.BTQ_NAME = BTQ_NAME;
    this.BTQ_TYPE = BTQ_TYPE;
    this.BTQ_SITE = BTQ_SITE;
    this.BTQ_CLKAM1 = BTQ_CLKAM1;
    this.BTQ_CLKAM2 = BTQ_CLKAM2;
    this.BTQ_CLKPM1 = BTQ_CLKPM1;
    this.BTQ_CLKPM2 = BTQ_CLKPM2;
    this.BTQ_PHONE = BTQ_PHONE;
    this.BTQ_LOGO = BTQ_LOGO;
}

//methodes pour la cle
public int getBTQKey() {
    return BTQ_KEY;
}
public void setBTQKey(int BTQ_KEY) {
    this.BTQ_KEY = BTQ_KEY;
}


//methodes pour le nom
public String getBTQName() {
    return BTQ_NAME;
}
public void setBTQName(String BTQ_NAME) {
    this.BTQ_NAME = BTQ_NAME;
}


//methodes pour le type de boutique
public String getBTQType() {
    return BTQ_TYPE;
}
public void setBTQType(String BTQ_TYPE) {
    this.BTQ_TYPE = BTQ_TYPE;
}


//methodes pour le site
public String getBTQSite() {
    return BTQ_SITE;
}
public void setBTQSite(String BTQ_SITE) {
    this.BTQ_SITE = BTQ_SITE;
}


//methodes pour la premiere heure du matin
public String getBTQClkam1() {
    return BTQ_CLKAM1;
}
public void setBTQClkam1(String BTQ_CLKAM1) {
    this.BTQ_CLKAM1 = BTQ_CLKAM1;
}


//methodes pour la deuxieme heure du matin
public String getBTQClkam2() {
    return BTQ_CLKAM2;
}
public void setBTQClkam2(String BTQ_CLKAM2) {
    this.BTQ_CLKAM2 = BTQ_CLKAM2;
}


//methodes pour la premiere heure de l apres-midi
public String getBTQClkpm1() {
    return BTQ_CLKPM1;
}
public void setBTQClkpm1(String BTQ_CLKPM1) {
    this.BTQ_CLKPM1 = BTQ_CLKPM1;
}


//methodes pour la deuxieme heure de l apres-midi
public String getBTQClkpm2() {
    return BTQ_CLKAM2;
}
public void setBTQClkpm2(String BTQ_CLKPM2) {
    this.BTQ_CLKPM2 = BTQ_CLKPM2;
}


//methodes pour le numero de telephone du service client de la boutique
public String getBTQPhone() {
    return BTQ_PHONE;
}
public void setBTQPhone(String BTQ_PHONE) {
    this.BTQ_PHONE = BTQ_PHONE;
}

//methodes pour le chemin d acces au fichier du logo
public String getBTQLogo() {
    return BTQ_LOGO;
}
public void setBTQLogo(String BTQ_LOGO) {
    this.BTQ_LOGO = BTQ_LOGO;
}


public String toString(){
    return "Id of the store: "+BTQ_KEY+"\n name of the store: "+BTQ_NAME+
            "\n type of store :"+BTQ_TYPE+"\n website of the store: "+BTQ_SITE+
            "\n open morning at :"+BTQ_CLKAM1+"\n close morning at :"+BTQ_CLKAM2+
            "\n open afternoon at :"+BTQ_CLKPM1+"\n close afternoon at :"+BTQ_CLKPM2;
}
}`

} `

} `

} ` 第一次运行我的应用程序时,插入工作正常,但是,如果我第二次运行我的应用程序,插入失败(我收到一条消息,告诉我的列ID(这是我的第一列)在我的表中不存在) 我正在使用Android Studio。我不知道现在该怎么办。有人能帮我吗? 顺便说一下,我是一个小组的成员,你的帮助将帮助5名学生

我已经更改了插入函数中的行
values.put(BTK_键,boutiq.getBTQKey());
Log.d(“BDD_操作”、“j ai la cle”)
我已删除了主要任务中的-':
test.setqname(“J'ai modifiéle nom de la精品店”)
现在我的日志中有这样一条信息:
`D/BDD_运算:一个准终端
E/SQLiteLog:(1)靠近“ai”:语法错误
D/AndroidRuntime:1小时前关闭VM–Rxn Olcyk

beginning of crash E/AndroidRuntime: FATAL EXCEPTION: main Process: PID: 2486         ComponentInfo{.MainActivity}: android.database.sqlite.SQLiteException: near "ai":         syntax error (code 1): 
,编译时:更新表格精品集精品时钟PM2=?,精品时钟PM1=?,精品时钟AM2=?, 电话号码=?,bou‌tiqueClockAm1=?,精品名称=?, 精品标识=?,精品类型=?,精品网站=?哪里
finitenom=J ai modifiéle nom de la finitery`

在InsertFinitery函数中,使用以下命令指定插入行的键:

values.put(BTK_KEY, boutiq.getBTQKey());
请尝试删除这行代码

通常,如果您有一个自动SQL字段,例如具有自动递增功能的主键,则不应在insert语句中指定该字段。在Android SQLite包装器中,这意味着您不应该将密钥插入ContentValues对象;然后,它将从SQL插入中删除。这可能是导致您出现问题的原因


如果这不起作用,请发布日志/堆栈跟踪,以便有更好的机会发现问题。

我已经按照您的要求完成了,并且我已经删除了主要任务中的-':test.setBTQName(“J'ai modifiéle nom de la精品店”);现在我在logcat中得到了这个消息:D/BDD_操作:mise a jour准终端e/SQLiteLog:(1)接近“ai”:语法错误D/AndroidRuntime:关闭VMStart of crash E/AndroidRuntime:致命异常:主进程:PID:2486 ComponentInfo{.MainActivity}:android.database.sqlite.SQLiteException:接近“ai”:语法错误(代码1):,编译时:更新表格精品集精品时钟PM2=?,精品时钟PM1=?,精品时钟AM2=?,精品电话=?,精品时钟AM1=?,精品名称=?,精品标志=?,精品类型=?,精品网站=?其中bountenom=J ai modifiéle nom de la bountenom最有可能的问题是您在姓名中使用了撇号(字符)。当将此值插入SQL查询时,SQL将其解释为结束引号,而字符串的其余部分将解释为SQL,这将失败。这就是为什么在将字符串插入数据库之前总是要对其进行转义。请尝试函数DatabaseUtils.sqlEscapeString(string)。
`package com.example.rpata.roxyapp;


import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;


public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Création d'une instance de ma classe BDD_Operation
    BDD_Operation bdd = new BDD_Operation(this);
    //Log.d("MainActivity", "La base de donnees est instanciee");
    // ok ca le fait

    //Création des boutique
    TableBoutique zara = new TableBoutique("Zara", "mode homme femme enfant", "www.zara.com", "9.3f", "12", "14"," 19.3f","0000000000", "logozara.jpg");

    //On ouvre la base de données pour écrire dedans
    bdd.open();
    //Log.d("MainActivity", "ouverture de la base de données");
    // ok ca le fait

    //On insère la boutique que l'on vient de créer
   // Log.d("MainActivity", "blabla");
    bdd.insertBoutique(zara);
    //Log.d("MainActivity", "bliblibli");




   // Pour vérifier que l'on a bien créé nos entités dans la BDD on les extrait de la BDD grâce au nom
    TableBoutique test = bdd.getBoutiqueWithItsName(zara.getBTQName());

    //Si une boutique est retournée
    if (test != null) {
        String TAG1 = "INSERTION";
        Log.d(TAG1, "boutique ajoutée");
        //On affiche les infos du lieux dans un Toast
        Toast.makeText(this, test.toString(), Toast.LENGTH_LONG).show();
        //On modifie la ville du lieux
        test.setBTQName("J'ai modifié le nom de la boutique");
        Log.d("MainActivity", "modification du nom de la boutique");
        //Puis on met à jour la BDD
        bdd.updateBoutiqueByKey(test.getBTQKey(), test);
        }



    bdd.close();

}
beginning of crash E/AndroidRuntime: FATAL EXCEPTION: main Process: PID: 2486         ComponentInfo{.MainActivity}: android.database.sqlite.SQLiteException: near "ai":         syntax error (code 1): 
values.put(BTK_KEY, boutiq.getBTQKey());