синтаксическая ошибка (Sqlite code 1 SQLITE_ERROR) - PullRequest
0 голосов
/ 03 мая 2020

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

Ошибка в этой строке в классе: Cursor data = db.rawQuery(query, null);

Мой класс:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mushroom);

        dbhp = new DatabaseHelper(this);

        NS = getIntent().getStringExtra("name_s");

        txtName = (TextView)findViewById(R.id.textName);
        txtType = (TextView)findViewById(R.id.textType);
        txtName_s = (TextView)findViewById(R.id.textName_s);
        txtFeature = (TextView)findViewById(R.id.textFeature);
        txtProperties = (TextView)findViewById(R.id.textProperties);
        imageV = (ImageView) findViewById(R.id.imageV);

        SQLiteDatabase db = dbhp.getWritableDatabase();
        String query = "SELECT * FROM " + dbhp.TABLE_NAME + " where " + dbhp.KEY_NAME_S + " = " + NS ;
        Cursor data = db.rawQuery(query, null);
        m_name = data.getString(data.getColumnIndex(DatabaseHelper.KEY_NAME));
        m_name_s = data.getString(data.getColumnIndex(DatabaseHelper.KEY_NAME_S));
        m_type = data.getString(data.getColumnIndex(DatabaseHelper.KEY_TYPE));
        m_feature = data.getString(data.getColumnIndex(DatabaseHelper.KEY_FEATURE));
        m_properties = data.getString(data.getColumnIndex(DatabaseHelper.KEY_PROPERTIES));
        m_image = data.getBlob(data.getColumnIndex(DatabaseHelper.KEY_IMAGE));



        Bitmap bitmap = BitmapFactory.decodeByteArray(m_image, 0, m_image.length);

        txtName.setText(m_name);
        txtType.setText(m_type);
        txtName_s.setText(m_name_s);
        txtFeature.setText(m_feature);
        txtProperties.setText(m_properties);
        imageV.setImageBitmap(bitmap);

Ответы [ 2 ]

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

В SQL при запросе значения строки необходимо заключить строку в кавычки. Так что в вашем случае код должен быть:

String query = "SELECT * FROM " + dbhp.TABLE_NAME + " where " + dbhp.KEY_NAME_S + " = '" + NS + "'";

Но для того, чтобы облегчить себе жизнь и предотвратить подобные проблемы с запросами в будущем, вы можете захотеть взглянуть на Постоянство комнаты . Хорошая статья для начала это эта статья .

0 голосов
/ 03 мая 2020

Вы должны использовать одинарные кавычки вокруг строки NS, но даже если это устранит ошибку, это не будет рекомендуемым и безопасным способом построения запроса. Используйте ? заполнители для каждого из параметров, которые вы передаете в операторе sql, и передайте параметры как строковый массив во втором аргументе rawQuery():

String query = "SELECT * FROM " + dbhp.TABLE_NAME + " where " + dbhp.KEY_NAME_S + " = ?";
Cursor data = db.rawQuery(query, new String[] {NS});

Таким образом, параметры Заботясь о rawQuery(), вам не нужно объединять одинарные кавычки, и ваш код в безопасности и без риска sql -инъекции .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...