» Программирование Android

Хранение данных в БД SQLite

Операционная система Android в качестве базы данных использует встраиваемую SQLite. Это весьма быстрая БД, благодаря чему её использование в мобильных устройствах не приводит к снижению производительности. В данном небольшом материале мы разберемся с написанием кода для хранения данных в SQLite.

Итак, компания Google изначально позаботилась о нервах своих пользователей и, в частности, разработчиков, так что существует класс SQLiteOpenHelper:

            public class DbOpenHelper extends SQLiteOpenHelper{

  private static final int DB_VERSION = 1;

  private static final String DB_NAME = "test";

  public static final String TABLE_NAME = "users";

  public static final String LOGIN = "login";

  public static final String PASSW = "passw";

  private static final String CREATE_TABLE = "create table " + TABLE_NAME + " ( _id integer primary key autoincrement, "

      + LOGIN + " TEXT, " + PASSW + " TEXT)";

  public DbOpenHelper(Context context) {

    super(context, DB_NAME, null,DB_VERSION);

  }

  @Override

  public void onCreate(SQLiteDatabase sqLiteDatabase) {

    sqLiteDatabase.execSQL(CREATE_TABLE);

  }

  @Override

  public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

  }

}

Во время создания экземпляра класса DbOpenHelper проводится проверка, существует ли база данных с именем «test», и если да – то вызывается метод onUpgrade, а если нет – onCreate, в котором создается таблица users. В этом методе зачастую создаются таблицы и производится инициализация их значениями по умолчанию. Класс SQLiteOpenHelper имеет методы getReadableDatabase и getWritableDatabase. Они возвращают экземпляр класса SQLiteDatabase. При помощи последнего и будет производится работа с базой данных. Данный класс имеет все необходимые для этого методы: insert, update, query, delete и так далее.

Вот небольшой код приложения, которое производит сохранение логина и пароля в базу данных:

            public class TestActivity extends Activity {

  EditText loginEditText = null;

  EditText passEditText = null;

  Button saveButton = null;

  @Override

  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    loginEditText = (EditText) findViewById(R.id.login);

    passEditText = (EditText) findViewById(R.id.passw);

    saveButton = (Button) findViewById(R.id.btn1);

    saveButton.setOnClickListener(new View.OnClickListener() {

      public void onClick(View view) {

        DbOpenHelper dbOpenHelper = new DbOpenHelper(TestActivity.this);

        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

        ContentValues cv = new ContentValues();

        cv.put(DbOpenHelper.LOGIN,loginEditText.getText().toString());

        cv.put(DbOpenHelper.PASSW,passEditText.getText().toString());

        db.insert(DbOpenHelper.TABLE_NAME,null,cv);

        db.close();

        loginEditText.setText("");

        passEditText.setText("");

      }

    });

  }

}

В приведенном примере имеется окно с двумя полями ввода, и кнопка, по нажатию которой и происходит сохранение. Для начала создается экземпляр класс DbOpenHelper – он создает саму базу данных и таблицы. После этого создается объект SQLiteDatabase, при помощи метода insert которого происходит запись. ContentValues – некая обертка над данными, которые будут записываться в базу данных. В методе put первый аргумент – имя столбца, второй – данные, которые будут записаны в столбец. Например, на SQL это выглядит следующим образом:

INSERT INTO users ( 'login','passw') VALUES ('testlogin','testpass')