آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

استفاده از دیتابیس sqlite

General  9 سال پیش  9 سال پیش
0 0

سلام خدمت دوستان

روشی که استاد برای استفاده از دیتابیس گفتن درمواردی وقتی استفاده میکنم ارور can not open or create database رو میده

یه روش دیگه ای هم وجود داره روش استفاده از sqliteOpenHelper منتها توی این روش ادرس دیتابیس بصورت پیشفرض هیت

میخواستم بدونم کدوم روش روش بهتر واصولی تری هست؟ممنون میشم دوستانی که تجربه دارن بگن از چه روشی استفاده میکنند واینکه اگه بخوایم دیتابیس اماده رو از توی assets کپی کنیم بازم sqliteOpenHelper جوابگو هست یا خیر

با تشکر

0 0
دوستان کسی نظری نداشت؟؟!! (9 سال پیش)
+1 0
ما که از همین روش ها استفاده میکنم مشکلی نبوده در صورت درست بودن کدها...برای کپی دیتابیس به گوشی هم بخش 19 آموزش های قدیم رو ببینید مشکلت حل میشه (9 سال پیش)
0 0
ممنونم میشه بگید کدوم قسمت؟عنوانش چیه؟یه توضیحی درمورد اون قسمت بدید پیداش بکنم (9 سال پیش)
0 0
من همچنان منتظرم بگید منظورتون کدوم اموزشه یا لینکی رو معرفی کنید (9 سال پیش)
+1 0
من تا به حال با مشکلی که فرمودید مواجه نشدم . permission های لازم مثل نوشتن بر حافظه رو چک کنید و روی حافظه ی داخلی دیتابیس رو ذخیره کنید و همچنین مطمئن شوید که فایلی که می خواهید دیتابیس رو داخلش ذخیره کنید قبلاً ایجاد شده باشد. (9 سال پیش)
0 0
این مشکل زمانی اتفاق میفته که دیتابیس اماده از assets کپی میشه ...اون موقه مشکل ایجاد میشه نمیدونم ایراد چیه یعنی ممکنه ایراد از کد کپی باشه؟هرچند کدش ساده است ولی نمیدونم چی میشه که همچین مشکلی پیش میاد (9 سال پیش)
0 0
کد های مربوط به کلاس SQLiteOpenHelper رو بذارید، شاید تونستیم کمک کنیم. من یکم با دیتابیس اماده کار کردم . (9 سال پیش)
0 0
با SQLiteOpenHelper میشه یه ادرس خاص رو خوند؟من با اموزش استاد زمان استفاده از دیتابیس اماده مشکل دارم (9 سال پیش)
0 0
منظورتونو درست متوجه نشدم. منظورتون خوندن یه رکورد از دیتابیسه؟ (9 سال پیش)
0 0
من یک بار به این مشکی خوردم ودلیلش هم این بود که توی اسم دیتا بیس توی asset همه حروف کوچیک بود ولی برای قسمت کپی از asset اسم دیتابیس رو با حرف بزرگ نوشته بودم وکپی انجام میشد ولی ستون های دیتا بیس توی فایل کپی شده روی گوشی نبودن ! (9 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
M.heydari  9 سال پیش
0 0

سلام .
من تجربه بالایی ندارم و تا جایی که دیدم تو سایتای مختلف، از روش SQLiteOpenHelper استفاده کردن.

این هم یه قطعه کد. فک کنم کمکتون کنه.

 
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

/**
* Created by Masoud on 7/3/2017.
*/

public class DatabaseHandler extends SQLiteOpenHelper {

private static String DB_NAME = "contacts.sqlite";
private static String TBL_NAME = "tbl_books";
private static String DB_PATH = "";
private static String TAG = "DB";

private Context context;
private SQLiteDatabase database;

public DatabaseHandler(Context context) {
super(context, DB_NAME, null, 1);
this.context = context;

if ((Build.VERSION.SDK_INT) > 15) {
DB_PATH = context.getApplicationInfo().dataDir + "/";
} else {
DB_PATH = Environment.getDataDirectory() + "/data/" + context.getPackageName() + "/";
}

DB_PATH += DB_NAME;


}


@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
/* do nothing in this block */

}

private boolean dbExist() {
File file = new File(DB_PATH);
if (file.exists()) {
Log.i(TAG, "Database already exist");
return true;
} else
return false;

}

private boolean copyDB() {

Log.i(TAG, "Path of data is : " + DB_PATH);
try {
String path = DB_PATH;
Log.i(TAG, "path : " + path);

OutputStream outputStream = new FileOutputStream(path);
InputStream inputStream = context.getAssets().open(DB_NAME);

byte[] buffer = new byte[1024];
int length = 0;

while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}

outputStream.flush();
outputStream.close();
inputStream.close();
Toast.makeText(context, "Database Copied", Toast.LENGTH_SHORT).show();
return true;


} catch (Exception e) {
/* do no thing in this block */
Log.i(TAG, "There is a problem in copy of data base from copyDB method ... Check it");
return false;
}
}

public void openDB() {
if (dbExist()) {
try {

File file = new File(DB_PATH);
Log.i(TAG, "file pah: " + file.getAbsolutePath());
database = SQLiteDatabase.openDatabase(file.getAbsolutePath(), null, SQLiteDatabase.OPEN_READWRITE);
Toast.makeText(context, "Data Base Already Exist", Toast.LENGTH_SHORT).show();

} catch (Exception e) {
/* do n thing in tis block */
}
} else {
if (copyDB()) {
openDB();
}
}
}


@Override
public synchronized void close() {
database.close();
Toast.makeText(context, "DataBase Closed", Toast.LENGTH_SHORT).show();
}
}
0 0
خیلی ممنون از لطف شما دوست بزرگوار (9 سال پیش)
0 0
این روش از روش استاد داخل آموزشهای قدیمی یک مقداری بهتر و مرتب تر هست. (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .