PDA

View Full Version : سوال درباره sqlite



reza4000
سه شنبه 29 تیر 1395, 17:37 عصر
سلام دوستان من یه سوال ازتون دارم درباره استفاده از دیتابیس در eclipse .
من کار با sqlite و queryهای insert , update ,... رو کامل بلدم ولی یه سوال دارم اونم اینه که وقتی که توی یک نرم افزاری مثلا sqlite expert دیتابیس درست میکنم و یه خروجی که ازش میگیرم . چجوری میشه از اون توی eclipse استفاده کنم .
ما با یک متد سازنده super دیتابیس رو توی eclipse درست میکنیم اما چجوری میشه گفت که مقادیرو از فلان فایل دیتابیس بگیره؟؟؟؟
لطفا بگیددددددددددد

JYasProgramer
چهارشنبه 30 تیر 1395, 08:48 صبح
سلام شما اون فایلی که از sqlite expert خروجی گرفتی درسته که یه دیتابیسه اما در اصل فقط یه فایله
شما باید اونو از DDMS در اکلیپس بریزی تووی sd کارت و در هنگام ران شدن اپ چک کنی ببینی که آیا کپی شده یا نه، اگه آره که هیچ اگه نه کپی کنی در دایرکتوری "/data/data/yourpackagename/databases" بعد که کپی کردی با اون فایل کپی شده در دارکتوی مذکور مثل یه دستورات دیتابیس رفتار میکنی

package yourpackagename;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

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

public class DatabaseHelper extends SQLiteOpenHelper {

private static String DB_PATH = "";

private static final String DATABASE_NAME = "dbname";

private static final Integer DATABASE_VERSION = 1;

private File dbFile;

private Context mContext;

public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
if(android.os.Build.VERSION.SDK_INT >= 4.2){
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
} else {
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
}

this.mContext = context;
}

public void createDataBase() throws IOException {
boolean mDataBaseExist = checkDataBase();
if(!mDataBaseExist) {
this.getReadableDatabase();
copyDataBase();
this.close();
}
}

private boolean checkDataBase() {
dbFile = new File(DB_PATH + DATABASE_NAME);
return dbFile.exists();
}

private void copyDataBase() throws IOException {

InputStream mInput = null;
mInput = mContext.getAssets().open("db_in_asset_folder");

String outFileName = DB_PATH + DATABASE_NAME;
File f = new File(outFileName);
f.mkdirs();
OutputStream mOutput = new FileOutputStream(f);
byte[] mBuffer = new byte[1024];
int mLength;
while ((mLength = mInput.read(mBuffer))>0) {
mOutput.write(mBuffer, 0, mLength);
}
mOutput.flush();
mOutput.close();
mInput.close();
}

@Override
public void onCreate(SQLiteDatabase db) {
}

@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}

}




در این نمونه کد دیتابیس رو ریختم در asset و یک نمونه از این کلاس میسازم و createDataBase فراخونی میکنم

reza4000
شنبه 02 مرداد 1395, 09:35 صبح
سلام شما اون فایلی که از sqlite expert خروجی گرفتی درسته که یه دیتابیسه اما در اصل فقط یه فایله
شما باید اونو از DDMS در اکلیپس بریزی تووی sd کارت و در هنگام ران شدن اپ چک کنی ببینی که آیا کپی شده یا نه، اگه آره که هیچ اگه نه کپی کنی در دایرکتوری "/data/data/yourpackagename/databases" بعد که کپی کردی با اون فایل کپی شده در دارکتوی مذکور مثل یه دستورات دیتابیس رفتار میکنی

package yourpackagename;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

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

public class DatabaseHelper extends SQLiteOpenHelper {

private static String DB_PATH = "";

private static final String DATABASE_NAME = "dbname";

private static final Integer DATABASE_VERSION = 1;

private File dbFile;

private Context mContext;

public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
if(android.os.Build.VERSION.SDK_INT >= 4.2){
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
} else {
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
}

this.mContext = context;
}

public void createDataBase() throws IOException {
boolean mDataBaseExist = checkDataBase();
if(!mDataBaseExist) {
this.getReadableDatabase();
copyDataBase();
this.close();
}
}

private boolean checkDataBase() {
dbFile = new File(DB_PATH + DATABASE_NAME);
return dbFile.exists();
}

private void copyDataBase() throws IOException {

InputStream mInput = null;
mInput = mContext.getAssets().open("db_in_asset_folder");

String outFileName = DB_PATH + DATABASE_NAME;
File f = new File(outFileName);
f.mkdirs();
OutputStream mOutput = new FileOutputStream(f);
byte[] mBuffer = new byte[1024];
int mLength;
while ((mLength = mInput.read(mBuffer))>0) {
mOutput.write(mBuffer, 0, mLength);
}
mOutput.flush();
mOutput.close();
mInput.close();
}

@Override
public void onCreate(SQLiteDatabase db) {
}

@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}

}




در این نمونه کد دیتابیس رو ریختم در asset و یک نمونه از این کلاس میسازم و createDataBase فراخونی میکنم

سلام ممنون به خاطر پاسختون . امکانش هست یکم توضیح بدید که کدوم قسمت ها مهم هستن و باید ویرایش بشن و چجوری در کلاس تعریفش کنیم

JYasProgramer
شنبه 02 مرداد 1395, 17:41 عصر
یه کلاس ایجاد کنین به همون نامی که نام این کلاس هست، نام پکیج رو همنام پکیج خودتون قرار بدین
فرض میکنم شما یه کلاس MainActivity دارین که باید دستورات دیتابیس رو انجام بده خب در اون این کلاست یه نمونه از DatabaseHelper بساز و بعد متد createDataBase رو فراخونی کن تا دیتابیس مورد نظرتو از asset folder بریزه داخل دایرکتوری که مربوط به دیتابیس هست
update, insert, delete, select رو خودت باید بنویسی

reza4000
شنبه 02 مرداد 1395, 20:06 عصر
یه کلاس ایجاد کنین به همون نامی که نام این کلاس هست، نام پکیج رو همنام پکیج خودتون قرار بدین
فرض میکنم شما یه کلاس MainActivity دارین که باید دستورات دیتابیس رو انجام بده خب در اون این کلاست یه نمونه از DatabaseHelper بساز و بعد متد createDataBase رو فراخونی کن تا دیتابیس مورد نظرتو از asset folder بریزه داخل دایرکتوری که مربوط به دیتابیس هست
update, insert, delete, select رو خودت باید بنویسی

اینا رو میدونم اما یه مشکلاتی دارم.
در کل 3 تا متد باید توی اکتیویتی صدا بزنیم
creatdatabase
opendatabase
closedatabase
تا اینجا درست؟
خب بعدش هم باید کد های insert , select , delete , update که توی کلاس دیتابیس صدا زدیم رو بنویسیم.
اینا رو جدیدا دیدم اگر میشه لطفا یک نمونه کد بهم بدید و یکمی جاهای لازمشو توضیح بدید. خیلی ممنون.

JYasProgramer
شنبه 02 مرداد 1395, 21:53 عصر
بقیه رو خودت انجام بده فوقش خواهی پرسیدی
تلگرام اگه داری که بهتره

reza4000
شنبه 02 مرداد 1395, 22:03 عصر
بقیه رو خودت انجام بده فوقش خواهی پرسیدی
تلگرام اگه داری که بهتره

اومدم خصوصی