Проблема с вставкой данных в SQLite- android - PullRequest
0 голосов
/ 27 мая 2020

Я использую это для создания таблицы для добавления группы типов учетных записей в моем проекте

db.execSQL("CREATE TABLE tbl_groupAccount ( \n" +
        "    ID                 INTEGER PRIMARY KEY AUTOINCREMENT\n" +
        "                               NOT NULL\n" +
        "                               UNIQUE,\n" +
        "    ACCOUNT_GROUP_NAME VARCHAR,\n" +
        "    ACCOUNT_GROUP_TYPE  VARCHAR \n" +
        ");");

, и я использую это для вставки данных в таблицу

public boolean addAccountGroup(String nameAccountGroup, String groupAccountType) {
    boolean result;
    String sql = "INSERT INTO tbl_groupAccount (ACCOUNT_GROUP_NAME,ACCOUNT_GROUP_TYPE)" +
            " VALUES ('" + nameAccountGroup + "'," + groupAccountType + ")";
    try {
        SQLiteDatabase database = this.getWritableDatabase();
        database.execSQL(sql);
        database = null;
        result = true;
    } catch (Exception ex) {
        result = false;
    }
    return result;
}

во время активности, я есть это. Я пытаюсь вставить данные в таблицу, получая текст из текста редактирования

public class AddGroupAccountActivity extends AppCompatActivity {
    DatabaseForAccounting database;
    String accountNameGroup;
    String accountGroupType ;
    int idAccountGroup;

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


        database = new DatabaseForAccounting(this);
        final EditText etAddGroupAccount = findViewById(R.id.etAddGroupAccount);
        Intent intent  = getIntent();
        if (getIntent().getExtras() != null && getIntent().getExtras().containsKey("accountNameGroup")) {
            accountNameGroup =  intent.getStringExtra("accountNameGroup");
            accountGroupType = intent.getStringExtra("accountGroupType");
            idAccountGroup = intent.getIntExtra("idAccountGroup",1);
            etAddGroupAccount.setText(accountNameGroup);

        }

        ImageView img_Ok =  findViewById(R.id.image_OK);
        img_Ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

               database.addAccountGroup(etAddGroupAccount.getText().toString(),"asset");

                finish();

            }
        });

        ImageView img_cancel = findViewById(R.id.image_Cancel);
        img_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });


    }

    }

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

Спасибо

1 Ответ

1 голос
/ 27 мая 2020

Точная причина ошибки заключается в том, что второй из двух литералов в вашем предложении VALUES не заключен в одинарные кавычки. Мы могли бы исправить это напрямую, но лучшим долгосрочным решением было бы использовать подготовленный оператор:

try {
    SQLiteDatabase database = this.getWritableDatabase();
    String sql = "INSERT INTO tbl_groupAccount (ACCOUNT_GROUP_NAME, ACCOUNT_GROUP_TYPE) VALUES (?, ?)";
    SQLiteStatement stmt = database.compileStatement(sql);
    stmt.bindString(1, nameAccountGroup);
    stmt.bindString(2,  groupAccountType);
    stmt.executeInsert();
    result = true;
}
catch (Exception ex) {
    result = false;
}
...