Ошибка многопользовательской базы данных SQL в Android - PullRequest
0 голосов
/ 04 марта 2012

Привет друзья.Я пытаюсь сохранить некоторые данные в базе данных с 2 таблицами.Вот его определение:

public class SQLManager  {

public static String KEY_ROWID = "_id";
public static final String KEY_PRODUCT = "product";
public static final String KEY_QUANTITY = "quantity";
public static final String KEY_PRICE = "price";

public static final String KEY_DATA = "user data";

private static final String DATABASE_NAME = "PedidoDc";
private static final String DATABASE_TABLE1 = "PedidoTable";
private static final String DATABASE_TABLE2 = "DatosTable";

private static final int DATABASE_VERSION = 1;

private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;

private static class DbHelper extends SQLiteOpenHelper{

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null,  DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL("CREATE TABLE " + DATABASE_TABLE1 + " (" + 
                KEY_ROWID + " INTEGER PRIMARY KEY, " + 
                KEY_PRODUCT + " TEXT NOT NULL, " +
                KEY_QUANTITY + " TEXT NOT NULL, " +
                KEY_PRICE + " TEXT NOT NULL);"

        );

        db.execSQL("CREATE TABLE " + DATABASE_TABLE2 + " (" + 
                KEY_ROWID + " INTEGER PRIMARY KEY, " + 
                KEY_DATA + " TEXT NOT NULL);"

        );

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE1);
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE2);
        onCreate(db);

    }


}

public SQLManager(Context c){

    ourContext = c;

}

public SQLManager open() throws SQLException{

    ourHelper = new DbHelper(ourContext);
    ourDatabase = ourHelper.getWritableDatabase();
    return this;
}

    public void close(){

    ourHelper.close();

}

     public long createEntry(String product, String quantity, String price) {
// TODO Auto-generated method stub
ContentValues cv = new ContentValues();
cv.put(KEY_PRODUCT, product);
cv.put(KEY_QUANTITY, quantity);
cv.put(KEY_PRICE, price);

return ourDatabase.insert(DATABASE_TABLE1, null, cv);
  }

   public long createEntry2(String data) {
// TODO Auto-generated method stub
ContentValues cv = new ContentValues();
cv.put(KEY_DATA, data);
return ourDatabase.insert(DATABASE_TABLE2, null, cv);
   }



    public String getData() {
// TODO Auto-generated method stub
String[] columns = new String[]{ KEY_ROWID, KEY_PRODUCT, KEY_QUANTITY, KEY_PRICE};
Cursor c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null);
String result = "";

int iRow =  c.getColumnIndex(KEY_ROWID);
int iProduct =  c.getColumnIndex(KEY_PRODUCT);
int iQuantity =  c.getColumnIndex(KEY_QUANTITY);
int iPrice =  c.getColumnIndex(KEY_PRICE);

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
    result = result  + " " + c.getString(iQuantity) + "    " + c.getString(iProduct) + "                        " + c.getString(iPrice) + "\n";
}

return result;
    }

    public String getUserData() {
// TODO Auto-generated method stub
String[] columns = new String[]{ KEY_ROWID, KEY_DATA};
Cursor c = ourDatabase.query(DATABASE_TABLE2, columns, null, null, null, null, null);
String result = "";

int iRow =  c.getColumnIndex(KEY_ROWID);
int iData =  c.getColumnIndex(KEY_DATA);

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
    result = result  + " " + c.getString(iData) + "\n";
}

return result;
    }
    public void deleteEntry(long l) {
// TODO Auto-generated method stub

ourDatabase.delete(DATABASE_TABLE1, null, null);


    }

     public String getQuantity(long l) {
// TODO Auto-generated method stub
String[] columns = new String[]{KEY_ROWID, KEY_QUANTITY, KEY_PRODUCT ,KEY_PRICE};
Cursor c = ourDatabase.query(DATABASE_TABLE1, columns, KEY_ROWID + "=" + l, null, null, null, null);
if (c != null){
    c.moveToFirst();
    String quantity = c.getString(1);
    c.close();
    return quantity;



}
return null;
    }

    public String getProduct(long l) {
// TODO Auto-generated method stub
String[] columns = new String[]{KEY_ROWID, KEY_QUANTITY, KEY_PRODUCT ,KEY_PRICE};
Cursor c = ourDatabase.query(DATABASE_TABLE1, columns, KEY_ROWID + "=" + l, null, null, null, null);
if (c != null){
    c.moveToFirst();
    String product = c.getString(2);
    c.close();
    return product;
}
return null;

    }

    public String getPrice(long l) {
// TODO Auto-generated method stub

String[] columns = new String[]{KEY_ROWID, KEY_QUANTITY, KEY_PRODUCT ,KEY_PRICE};
Cursor c = ourDatabase.query(DATABASE_TABLE1, columns, KEY_ROWID + "=" + l, null, null, null, null);
if (c != null){
    c.moveToFirst();
    String price = c.getString(3);
    c.close();
    return price;
}
return null;
    }


    }

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

            SQLManager entry = new SQLManager(ConfirmaData.this);
            entry.open();
            entry.createEntry2(tlf);
            entry.close();

Где tlf - строковая переменная.

Я получаю эту ошибку:

E / Database (27790): android.database.sqlite.SQLiteException: рядом с «data»: синтаксическая ошибка:, при компиляции: INSERT INTO DatosTable (пользовательские данные) ЗНАЧЕНИЯ (?);

Есть идеи?

Спасибо!

Ответы [ 3 ]

1 голос
/ 04 марта 2012

Я считаю, что ошибка связана с именем столбца, содержащим пробел

public static final String KEY_DATA = "user data";

Удалить пробел между user и data

0 голосов
/ 04 марта 2012

Вы не указываете KEY_ROWID в методе 'createEntry2'.

Вы можете сделать KEY_ROWID как автоинкрементное значение

db.execSQL("CREATE TABLE " + DATABASE_TABLE2 + " (" + 
    KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
    KEY_DATA + " TEXT NOT NULL);"
)
0 голосов
/ 04 марта 2012

У меня нет большого опыта работы с SQL, но вы пытались установить идентификатор AUTOINCREMENT? Так как вы не добавляете его вручную?

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