2016-10-06 4 views
-3

У меня есть ArrayList, исходящий из API, и мой POJO (обычный старый Java-объект) имеет требуемые геттеры и сеттеры.Вставить ArrayList в базу данных SQLite

@SerializedName("staff") 
@Expose 
private List<String> staff = new ArrayList<String>(); 
@SerializedName("departments") 
@Expose 
private List<String> departments = new ArrayList<String>(); 

Хочу объявление персонала и отдел в качестве SQLite таблицы. Моя существующая таблица имеет остальные значения строк. Но я не могу добавить ArrayList в таблицу.

public static final String CREATE_TABLE_QUERY = "CREATE TABLE " + TABLE_NAME + "" + 
      " (" + ID + " TEXT PRIMARY KEY not null, " + 
      //need to change product id into String or TEXT 
      CLIENTS_NAME + " TEXT not null," + 
      CLIENTS_ADDRESS1 + " TEXT not null," + 
      CLIENTS_ADDRESS2 + " TEXT not null," + 
      CLIENTS_ADDRESS3 + " TEXT not null," + 
      CLIENTS_ADDRESS4 + " TEXT not null," + 
      TYPE + " TEXT not null," + 
      CLIENTS_CONTACT + " TEXT not null)" ; 

Как добавить Arraylist? Я пробовал this, но его не работает. Любые ссылки или подсказки будут оценены.

Это введение остального строковых значений в database.Note, я до сих пор не добавил сотрудников в таблицу базы данных еще, как я не знаю, как вставить Список_массивы в таблице.

public void addProducts(Clients_POJO products) { 
    //CRUD , adding Products 

    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(Constants.ClientsDATABASE.ID, products.getId()); 
    values.put(Constants.ClientsDATABASE.CLIENTS_NAME, products.getName()); 
    values.put(Constants.ClientsDATABASE.CLIENTS_ADDRESS1, products.getAddress1()); 
    values.put(Constants.ClientsDATABASE.CLIENTS_ADDRESS2, products.getAddress2()); 
    values.put(Constants.ClientsDATABASE.CLIENTS_ADDRESS3, products.getAddress3()); 
    values.put(Constants.ClientsDATABASE.CLIENTS_ADDRESS4, products.getAddress4()); 
    values.put(Constants.ClientsDATABASE.TYPE, products.getType()); 
    values.put(Constants.ClientsDATABASE.CLIENTS_CONTACT, products.getContact()); 

    try { 

     db.insert(Constants.ClientsDATABASE.TABLE_NAME, null, values); 
    } catch (Exception e) { 
     Log.d(TAG, e.getMessage()); 
    } 
+0

В чем проблема? Покажите код ввода базы данных. –

+2

определить 'это не работает' – njzk2

+0

Можем ли мы получить сообщение об ошибке, как ваша ссылка SO не работает? – Scrambo

ответ

0

Я нашел решение, не преобразовывая его, используя GSON. Пусть значение POJO для отдела будет ArrayList.

@SerializedName("departments") 
@Expose 
private List<String> departments = new ArrayList<String>(); 

Для создания базы данных мы будем хранить столбец в виде строки в таблице.

public static final String INPUT_DEPARTMENTS = "departments"; 
public static final String CREATE_TABLE_QUERY = "CREATE TABLE " + TABLE_NAME + "" + 
      " (" + ID + " TEXT PRIMARY KEY not null, " + 
      INPUT_DEPARTMENTS + " TEXT not null)" ; 

Теперь во время хранения и извлечения данных и из SQLite database.Storing ->

public void addProducts(Clients_POJO products) { 
    //CRUD , adding Products 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(Constants.ClientsDATABASE.INPUT_DEPARTMENTS, String.valueOf(products.getDepartments())); 
    try { 

     db.insert(Constants.ClientsDATABASE.TABLE_NAME, null, values); 
    } catch (Exception e) { 
     Log.d(TAG, e.getMessage()); 
    } 

Для получения данных, мы преобразуем его обратно в ArrayList для хранения значения в POJO.

SQLiteDatabase db = this.getWritableDatabase(); 
    final ProductFetchListener mListener = listener; 
    Cursor cursor = db.rawQuery(Constants.ClientsDATABASE.GET_PRODUCTS_QUERY,null); 
    final List<Clients_POJO> productsListDB = new ArrayList<>(); 
    if (cursor.getCount() > 0) { 
     if (cursor.moveToFirst()) { 
      do { 
       Clients_POJO products = new Clients_POJO(); 
       products.setFromDatabase(true); 

Теперь мы преобразуем его в arraylist.

String s = cursor.getString(cursor.getColumnIndex(Constants.ClientsDATABASE.INPUT_DEPARTMENTS)); 
       List<String> myList = new ArrayList<String>(Arrays.asList(s.split(","))); 
       products.setDepartments(myList);