Mir Usmanov Ответов: 2

Ошибка вставки в android studio


Пожалуйста, ребята, нужна помощь. Я не могу вставить данные в базу данных вот мой logcat:
03-04 13:40:03.727 25642-25687/com.a00003454.tyreshopapp E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab12ca40
03-04 13:40:11.269 25642-25642/com.a00003454.tyreshopapp E/SQLiteLog: (1) near "table": syntax error
03-04 13:40:11.270 25642-25642/com.a00003454.tyreshopapp E/SQLiteDatabase: Error inserting Size=dvdvdvdvdv Cost=dvdv TyreBrand=dvdvdv
android.database.sqlite.SQLiteException: near "table": syntax error (code 1): , while compiling: INSERT INTO Tyre.table(Size,Cost,TyreBrand) VALUES (?,?,?)
   at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
   at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
   at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
   at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
   at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
   at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
   at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
   at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
   at com.a00003454.tyreshopapp.TyreDatabaseHelper.addTyre(TyreDatabaseHelper.java:43)
   at com.a00003454.tyreshopapp.AddTyreActivity.AddData(AddTyreActivity.java:56)
   at com.a00003454.tyreshopapp.AddTyreActivity$2.onClick(AddTyreActivity.java:45)
   at android.view.View.performClick(View.java:5198)
   at android.view.View$PerformClick.run(View.java:21147)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:148)
   at android.app.ActivityThread.main(ActivityThread.java:5417)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
03-04 13:40:11.358 25642-25687/com
И мои коды:
package com.a00003454.tyreshopapp;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by user on 04.03.2017.
 */
public class TyreDatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME="Tyre.db";
    public static final String TABLE_NAME="Tyre.table";
    public static final String COL_1="ID";
    public static final String COL_2="TyreBrand";
    public static final String COL_3="Size";
    public static final String COL_4="Cost";

    public TyreDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = ("CREATE TABLE Tyre (ID INTEGER PRIMARY KEY AUTOINCREMENT, TyreBrand TEXT Size INTEGER Cost INTEGER )");

        db.execSQL(sql);

    }

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

    public boolean addTyre(String tyreBrand, String size, String cost ) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_2, tyreBrand);
        contentValues.put(COL_3, size);
        contentValues.put(COL_4, cost);
        long result = db.insert(TABLE_NAME, null, contentValues);

        if (result == -1) {
            return false;
        } else {
           return true;
        }
    }

    public Cursor select() {
        SQLiteDatabase db =this.getWritableDatabase();
        Cursor data = db.rawQuery("SELECT * FROM Tyre",null);
        return data;

    }
}


Что я уже пробовал:

Я думаю, что у меня есть проблемы с SQL-операторами, и я пытался изменить их много раз, но безрезультатно

Graeme_Grant

переехал

2 Ответов

Рейтинг:
9

Graeme_Grant

Вот в чем ошибка:

03-04 13:40:11.270 25642-25642/com.a00003454.tyreshopapp E/SQLiteDatabase: Error inserting Size=dvdvdvdvdv Cost=dvdv TyreBrand=dvdvdv
android.database.sqlite.SQLiteException: near "table": syntax error (code 1): , while compiling: INSERT INTO Tyre.table(Size,Cost,TyreBrand) VALUES (?,?,?)
Я предполагаю, что ваш тест на вставку поля стоимости в виде строки "dvdv" вместо целочисленного значения (стоимость должна допускать десятичные дроби, такие как тип валюты) приведет к ошибке. То же самое с полем размера. Вы должны проверить данные перед вставкой в БД.


Рейтинг:
2

Peter Leow

Во-первых, ваш это создание таблицы SQL-это не правильно:

String sql = ("CREATE TABLE Tyre (ID INTEGER PRIMARY KEY AUTOINCREMENT, TyreBrand TEXT Size INTEGER Cost INTEGER )");
Так и должно быть:
String sql = "CREATE TABLE Tyre (ID INTEGER PRIMARY KEY AUTOINCREMENT, TyreBrand TEXT, Size INTEGER, Cost INTEGER)";
Вы бы столкнулись с ошибкой здесь, не говоря уже о вставке.


Mir Usmanov

Да, Питер, я изменил заявление, как вы сказали, но я столкнулся с той же проблемой со вставкой, я не знаю, в чем еще может быть проблема.=(

Graeme_Grant

Сообщение об ошибке хорошо описывает проблему. Взгляните на Решение 2.