Нужно ли дополнительно писать запрос SELECT при использовании значений содержимого? - PullRequest
1 голос
/ 16 апреля 2019

Я работаю над фрагментом кода для выполнения операций CRUD в Sqlite DB в Android Studio. Я создал listView для хранения двух атрибутов, т. Е. Имени и задания, но во время выполнения приложения происходит сбой. Это говорит:

Исключение Sqlite: такой столбец (код 1) "name" не найден.

Я искал решение, но каждое решение, которое я проверял, является неудачным. Мой браузер БД показывает, что таблица содержит столбец. Нужно ли добавлять SELECT FROM ... запрос в мой код? Если это так, то где я должен поставить код?

enter image description here

мой код, как показано ниже:

DatabaseHelper.class

import android.content.ContentValues; импорт android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;

открытый класс DatabaseHelper расширяет SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "SQLiteDatabase.db";
public static final String TABLE_NAME = "USERS";
public static final String _ID = "_id";
public static final String DESC = "occupation";
public static final String SUBJECT = "name";
SQLiteDatabase myDb;

private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME +
        "(" + _ID  + " INTEGER  PRIMARY KEY AUTOINCREMENT,"
        + SUBJECT + "TEXT NOT NULL,"
        + DESC + "TEXT"+ ")" ;

public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL(" DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);

}

public long insert(String name, String desc) {
     myDb = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(DatabaseHelper.SUBJECT, name);
    contentValues.put(DatabaseHelper.DESC, desc);
    long id = myDb.insert(DatabaseHelper.TABLE_NAME, null, contentValues);
    myDb.close();
    return id;
}

public Cursor read(){
    SQLiteDatabase myDb = this.getWritableDatabase();
    String[] columns = new String[] {DatabaseHelper._ID,DatabaseHelper.SUBJECT,DatabaseHelper.DESC};
    Cursor cursor = myDb.query(DatabaseHelper.TABLE_NAME,columns,null,null,null,null,null);
    if(cursor!=null){
        cursor.moveToFirst();
    }
    myDb.close();
 return cursor;
}

 }

MainActivity.class

import android.content.Intent; import android.support.v7.app.AppCompatActivity; импорт android.os.Bundle; импорт android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; импорт android.widget.Button; import android.widget.ListView;

import java.util.ArrayList;

открытый класс MainActivity расширяет AppCompatActivity {

Button addUser;
ArrayList<String> list;
ArrayAdapter<String> adapter;
DatabaseHelper dbManager;


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

    addUser = findViewById(R.id.add_button);
    list = new ArrayList<>();
    adapter = new ArrayAdapter<>(this, R.layout.populate_list, R.id.name, list);
    dbManager = new DatabaseHelper(this);


    addUser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            addAccount();
        }
    });

}

public void addAccount() {
    Intent intent = new Intent(MainActivity.this, AddUser.class);
    startActivityForResult(intent, 1);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 1) {
        final String name = intent.getStringExtra("name");
        final String occupation = intent.getStringExtra("occupation");
        ListView listView = findViewById(R.id.parentLayout);

        dbManager.read();
        list.add(name);
        listView.setAdapter(adapter);
        adapter.notifyDataSetChanged();

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent i = new Intent(MainActivity.this, UpdateActivity.class);
                i.putExtra(name, "username");
                i.putExtra(occupation, "occupation");
                startActivity(i);

            }
        });
    }
}
}

AddUser.class

import android.content.Intent; import android.support.v7.app.AppCompatActivity; импорт android.os.Bundle; импорт android.view.View; импорт android.widget.Button; import android.widget.EditText;

открытый класс AddUser расширяет AppCompatActivity {

EditText userName, job;
Button submitButton, cancelButton;

DatabaseHelper dbManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_user);
    dbManager = new DatabaseHelper(this);
    userName = findViewById(R.id.userText);
    job = findViewById(R.id.occupation);
    submitButton = findViewById(R.id.submit_button);
    cancelButton = findViewById(R.id.cancel_button);

    cancelButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(AddUser.this, MainActivity.class);
            startActivity(intent);
        }
    });
    submitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = getIntent();
            String name = userName.getText().toString();
            String desc = job.getText().toString();
            intent.putExtra(name, "name");
            intent.putExtra(desc, "occupation");
            dbManager.insert(name, desc);
            setResult(1, intent);
            finish();

        }
    });
}

  }

1 Ответ

0 голосов
/ 16 апреля 2019

Вы можете попробовать использовать rawquery следующим образом:

String sql = " SELECT * FROM " + TABLE_NAME + " WHERE " + ONE_COLUMN_NAME + "=?" + " AND " + PERHAPS_ANOTHER_COLUMN + " =?";
    ArrayList<YourKindOfObject> array = new ArrayList<>();
    Cursor cursor = sqLiteDatabase.rawQuery(sql, new String[]{firstParameter, secondParameter});
    while (cursor.moveToNext()) {

        YourKindOfObject yourKindOfObject = new YourKindOfObject();
        yourKindOfObject.setOneThing(cursor.getString(cursor.getColumnIndex(ColumnName));
        yourKindOfObject.setOneOtherThing(cursor.getString(cursor.getColumnIndex(ColumnName1)));
        array.add(yourKindOfObject);
    }
    cursor.close();
    return array;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...