Android: SQLite istifadəsi


Bu məqaləmizdə biz aşağıdakı şəkildə göstərilmiş məlumatların SQLite bazasında saxlanması üçün kod yazacağıq.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bunun uçun ilk olaraq bir android proyekt yaradırıq, onun içində  com.valeh.dao adlı paket , onun içində isə MySQLiteHelper adlı class yaradırıq.

Bu class bazanın yaradılmasına cavab verir. onUpdate() medodu isə butun məlumatları silərək yenidən cədvəli yaradır. Buradaə həmçinin cədvəl adı və sütnları konstantlar kimi təyin olunub.

package com.valeh.dao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class MySQLiteHelper extends SQLiteOpenHelper {

	public static final String TABLE_PERSONS = "persons";
	public static final String COLUMN_ID = "_id";
	public static final String COLUMN_USERNAME = "username";
	public static final String COLUMN_NAME = "name";
	public static final String COLUMN_SURNAME = "surname";
	public static final String COLUMN_PASSWORD = "password";
	public static final String COLUMN_EMAIL = "email";
	public static final String COLUMN_ACTIVE = "active";

	private static final String DATABASE_NAME = "common.db";
	private static final int DATABASE_VERSION = 1;

	// Verilenler bazasinin yaradilmasinin sql ifadesi
	private static final String DATABASE_CREATE = "create table "
			+ TABLE_PERSONS + "( " + COLUMN_ID
			+ " integer primary key autoincrement, " + COLUMN_USERNAME
			+ " text not null, " + COLUMN_NAME + " text not null, "
			+ COLUMN_SURNAME + " text not null, " + COLUMN_PASSWORD
			+ " text not null, " + COLUMN_EMAIL + " text not null, "
			+ COLUMN_ACTIVE + " text not null );";

	public MySQLiteHelper(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase database) {
		database.execSQL(DATABASE_CREATE);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		Log.w(MySQLiteHelper.class.getName(),
				"Upgrading database from version " + oldVersion + " to "
						+ newVersion + ", which will destroy all old data");
		db.execSQL("DROP TABLE IF EXISTS " + TABLE_PERSONS);
		onCreate(db);
	}

}

Daha sonra PersonModel.class sinfini yaradırıq. Bu sinif bizim modelimiz olur və bizim bazada saxlamaq istədiyimiz və istifadəçi interfeysinə çıxarmaq istədiyimiz bütün məlumatları özündə cəmləyir.


package com.valeh.dao;

public class PersonModel {
	private long id;
	private String username;
	private String name;
	private String surname;
	private String password;
	private String email;
	private String active;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSurname() {
		return surname;
	}

	public void setSurname(String surname) {
		this.surname = surname;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getActive() {
		return active;
	}

	public void setActive(String active) {
		this.active = active;
	}

	// ArrayAdapter ListView da bu metoddan istifade ede biler
	@Override
	public String toString() {
		return "PersonModel [id=" + id + ", username=" + username + ", name="
				+ name + ", surname=" + surname + ", password=" + password
				+ ", email=" + email + ", active=" + active + "]";
	}

}

 

Daha sonra isə PersonDataSource sinfini yardırıq . Bu sinif bizim DAO olur. Bu verilənlər bazası bağlantısını yaradır və yeni yazıların elavə olunması və çıxarılmasını təmin edir .


package com.valeh.dao;

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

public class PersonDataSource {
	// Database fieldleri
	private SQLiteDatabase database;
	private MySQLiteHelper dbHelper;
	private String[] allColumns = { MySQLiteHelper.COLUMN_ID,
			MySQLiteHelper.COLUMN_USERNAME, MySQLiteHelper.COLUMN_NAME,
			MySQLiteHelper.COLUMN_SURNAME, MySQLiteHelper.COLUMN_PASSWORD,
			MySQLiteHelper.COLUMN_EMAIL, MySQLiteHelper.COLUMN_ACTIVE };

	public PersonDataSource(Context context) {
		dbHelper = new MySQLiteHelper(context);
	}

	public void open() throws SQLException {
		database = dbHelper.getWritableDatabase();
	}

	public void close() {
		dbHelper.close();
	}

	public PersonModel createPerson(String username, String name,
			String surname, String password, String email, String active) {
		ContentValues values = new ContentValues();
		values.put(MySQLiteHelper.COLUMN_USERNAME, username);
		values.put(MySQLiteHelper.COLUMN_NAME, name);
		values.put(MySQLiteHelper.COLUMN_SURNAME, surname);
		values.put(MySQLiteHelper.COLUMN_PASSWORD, password);
		values.put(MySQLiteHelper.COLUMN_EMAIL, email);
		values.put(MySQLiteHelper.COLUMN_ACTIVE, active);

		long insertId = database.insert(MySQLiteHelper.TABLE_PERSONS, null,
				values);

		Cursor cursor = database.query(MySQLiteHelper.TABLE_PERSONS,
				allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
				null, null, null);
		cursor.moveToFirst();
		PersonModel newPerson = cursorToPerson(cursor);
		cursor.close();
		return newPerson;
	}

	public void deletePerson(PersonModel comment) {
		long id = comment.getId();
		System.out.println("Person deleted with id: " + id);
		database.delete(MySQLiteHelper.TABLE_PERSONS, MySQLiteHelper.COLUMN_ID
				+ " = " + id, null);
	}

	private PersonModel cursorToPerson(Cursor cursor) {
		PersonModel person = new PersonModel();
		person.setId(cursor.getLong(0));
		person.setUsername(cursor.getString(1));
		person.setName(cursor.getString(2));
		person.setSurname(cursor.getString(3));
		person.setPassword(cursor.getString(4));
		person.setEmail(cursor.getString(5));
		person.setActive(cursor.getString(6));
		return person;
	}
}

 

İndi isə bizim ən başda göstərdiyimiz Reg.xml faylının Reg.java adlı activity-sinə aşağıdakı lazımı dəyişiklikləri yazdırıq ki yadda saxla düyməsinə vurduqda uyğun xanalar bazaya yazılsın.


package com.valeh.ariqla;

import com.valeh.dao.PersonDataSource;
import com.valeh.dao.PersonModel;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.app.Activity;

public class Reg extends Activity {
	private PersonDataSource datasource;
	public static String username = "";
	public static String name = "";
	public static String surname = "";
	public static String password = "";
	public static String email = "";
	public static String active = "";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.reg);
		datasource = new PersonDataSource(this);
		datasource.open();

		Button Save = (Button) findViewById(R.id.saveUserButton);
		Save.setOnClickListener(new View.OnClickListener() {

			public void onClick(View view) {

				PersonModel person = null;

				final EditText UserName = (EditText) findViewById(R.id.UserEditText);
				final EditText Name = (EditText) findViewById(R.id.nameEditText);
				final EditText Surname = (EditText) findViewById(R.id.SurnameEditText);
				final EditText Password = (EditText) findViewById(R.id.passwordEditText);
				final EditText Email = (EditText) findViewById(R.id.emailEditText);

				username = UserName.getText().toString();
				name = Name.getText().toString();
				surname = Surname.getText().toString();
				password = Password.getText().toString();
				email = Email.getText().toString();
				active = "1";
				person = datasource.createPerson(username, name, surname,
						password, email, active);

			}
		});
	}

	@Override
	protected void onResume() {
		datasource.open();
		super.onResume();
	}

	@Override
	protected void onPause() {
		datasource.close();
		super.onPause();
	}

}

 

Məlumatlarımızın bazaya düşüb düşmədiyini yoxlamaq üçün. Firefox brauzeri üçün olan SQLite addonunu yükləyirik daha sonra Eclipsden DDMS bölməsinə keçirik. Həmin bölmədən qurğunu seçib File Explorer-ə giririk. Oradan isə Data->Data->yazıqımız.program.adi oradan isə dtabase-ni seçib kompyuterdə yadda saxlayırıq və onu daha SQLite addonu vasitəsi ilə aşağıdakı şəkillərdə göstərildiyi kimi açıb yoxlaya bilərik.

Android tətbiqetmə yazarkən onun əlfəcinin(shortcut) əsas ekrana əlavə olunması və silinməsi


“Shortcut”-ın əlavə olunması üçün metod.

private void addShortcut(){
Intent shortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");

// Shortcut adı
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
shortcutIntent.putExtra("duplicate", false);

// Shortcut obyekti ola bilecek cari activiti-nin təyin olunması
ComponentName comp = new ComponentName(this.getPackageName(), "."+this.getLocalClassName());
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp));

// Shortcut üçün iconun təyin olunması
ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);

sendBroadcast(shortcutIntent);
}

“Shortcut”-ın silinməsi üçün metod.

private void delShortcut(){
Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");

// Shortcut adı
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));

String appClass = this.getPackageName() + "." +this.getLocalClassName();
ComponentName comp = new ComponentName(this.getPackageName(), appClass);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp));

sendBroadcast(shortcut);
}

Daha sonra bu yuxarıdakı metodları onCreate metodunun içində çağırırıq.

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
delShortcut();
addShortcut();

Manifest falına isə aşağıdakı sətrlər əlavə olunmalıdır ki, uyğun olaraq shutcat əlavə edilə və silinə bilsin.

    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"></uses-permission>
    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />