ورود

View Full Version : عدم وجود تیبل ساخته شده با SQLite در دیتابیسش پس از نمایش در YouWave



meysam jahedi
چهارشنبه 23 مهر 1393, 17:29 عصر
سلام
با SQLite یه تیبل ساختم و تو Eclipse هم با چند خط کد این تیبل رو میخوام کپی کنم .، دیتابیس توی فولدر Data کپی میشه و میاد ، اما توی دیتابیسش خالی و مینویسه no table found
نمیدونم چرا تو دیتابیسش جدول نمیاد
:گریه:

package com.example.dbtest2;

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

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

public class database extends SQLiteOpenHelper{
private Context mycontext;
public SQLiteDatabase mydb;
public final String path="data/data/com.example.dbtest2/databases/";
public final String Name="dbtest";
public database(Context context) {
super(context,"dbtest",null,1);
mycontext=context;
}

public void onCreate(SQLiteDatabase arg0) {

}

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


}

public boolean chekdb(){
SQLiteDatabase db=null;
try{
db=SQLiteDatabase.openDatabase(path+Name,null,SQLi teDatabase.OPEN_READONLY);
}catch(SQLException e){

}
return db!=null? true:false;
}

public void datatbase(){
boolean check=chekdb();
if(check){

}else{
this.getReadableDatabase();
try{
copydatabase();
}catch(IOException e){

}
}
}


public void open(){
mydb=SQLiteDatabase.openDatabase(path+Name,null,SQ LiteDatabase.OPEN_READWRITE);
}
public void close(){
mydb.close();
}

public void copydatabase() throws IOException{
OutputStream myoutput=new FileOutputStream(path+Name);
byte buffer[]=new byte[1024];
int length = 0;

InputStream myinput=mycontext.getAssets().open("dbtest");
while ((length-myinput.read(buffer))>0){
myoutput.write(buffer,0,length);
}
myinput.close();
myoutput.flush();
myoutput.close();
}

}

delta7
چهارشنبه 23 مهر 1393, 18:49 عصر
شما یه دیتابیس با دیتا دارین میخواین کپی کنید توی فایل هاتون؟ یا کلا میخواین از اول یه دیتابیس درست کنین؟

saeed_g21
چهارشنبه 23 مهر 1393, 19:24 عصر
ببینید اگه دیتابیس رو دستی ساختین و در برنامه برای استفاده قراردادین طبیعتا نباید مشکلی داشته باشید چون مثل همان دیتابیس در ماشین کپی خواهد شد
مگر اینکه :
مثلا شما قبلا دیتابیسی رو بدون تیبیل کپی کرده باشید بعدا دیتابیس رو ویرایش کرده و مواردی براش اضافه کرده باشید و مجددا برای استفاده در سورس برنامه قرار داده باشید تا در ماشین کپی بشه این عمل صورت نمیگیرد تا زمانی که شما ورژن دیتابیس رو تغییر بدید

چرا ؟
چون قبلا دیتابیس با نسخه 1 در ماشین کپی شده و نیازی نیست مجددا کپی بشه برای همین تغییرات اعمالی شما صورت نگرفته است

بله میتوانید بودن تغییر نسخه نیز نسخه جدید دیتابیس رو کپی کنید وقتی که :
بانک اطلاعاتی برنامه رو در بخش تنظیمات برنامه حذف کنید در این صورت نسخه جدید کپی خواهد شد که در این حالت کلیه اصلاعات قبلی حذف خواهد شد!!!!!!!!

همینطور میتوانید با تغییر نسخه دیتابیس بدون حذف نیز عمل فوق را انجام دهید :

super(context,"dbtest",null,1);

super(context,"dbtest",null,2);

super(context,"dbtest",null,3);

super(context,"dbtest",null,4);

نکته : شماره نسخه جدید دیتابیس باید بزرگتر از نسخه قدیمی باشد در غیر اینصورت با خطا مواجه می شوید


بهترین روش برای کار با بانک اطلاعاتی از طریق کد نویسی هست چون در این حالت بهتر میشه کنترل کرد و مدیریت آن آسانتر می باشد

meysam jahedi
چهارشنبه 23 مهر 1393, 19:24 عصر
شما یه دیتابیس با دیتا دارین میخواین کپی کنید توی فایل هاتون؟ یا کلا میخواین از اول یه دیتابیس درست کنین؟

من یه دیتابیس از قبل دارم (با sqlite ساختم) که توی فوادر assets پروژه اضافه کردم ، حالا میخوام کپی کنم تو برنامه ، اما وقتی تو دیوایس مجازی (YouWave) مسیر رو چک میکنم دیتابیس تو اون مسیر کپی میشه (یعنی تا اینجا درسته ) ، اما تو این دیتابیسم تیبل نمیاد ! (دیتابیسی که از قبل ساختم توش جدول هم ساختم)

saeed_g21
چهارشنبه 23 مهر 1393, 19:35 عصر
من یه دیتابیس از قبل دارم (با sqlite ساختم) که توی فوادر assets پروژه اضافه کردم ، حالا میخوام کپی کنم تو برنامه ، اما وقتی تو دیوایس مجازی (YouWave) مسیر رو چک میکنم دیتابیس تو اون مسیر کپی میشه (یعنی تا اینجا درسته ) ، اما تو این دیتابیسم تیبل نمیاد ! (دیتابیسی که از قبل ساختم توش جدول هم ساختم)

خوب همان دیتابیس رو بکش بیرون بعد بازش کن ببین همونی هست که شما در فولدر assets قراردادین

meysam jahedi
چهارشنبه 23 مهر 1393, 19:43 عصر
خوب همان دیتابیس رو بکش بیرون بعد بازش کن ببین همونی هست که شما در فولدر assets قراردادین
بله همون دیتابیس هستش

meysam jahedi
چهارشنبه 23 مهر 1393, 19:45 عصر
این که نمیشه دیتابیس بیاد جداولش نیاد

کلا یا کپی میشه یا نمیشه

از کجا میگین که تیبلش نمیاد ؟؟؟؟؟؟

دوتا عکس گذاشتم ، عکس اول دیتابیس نشون میده تو ماشین و عکس دوم دیتابیس خالی .(توش تیبل ساختم از قبل ولی اینجا نمیاد!)

saeed_g21
چهارشنبه 23 مهر 1393, 19:56 عصر
لطفا اسپم نکنید میتوانید پست قبلی خود رو ویرایش نمایید

این که نمیشه دیتابیس بیاد جداولش نیاد

کلا یا کپی میشه یا نمیشه

از کجا میگین که تیبلش نمیاد ؟؟؟؟؟؟

saeed_g21
چهارشنبه 23 مهر 1393, 20:26 عصر
به احتمال زیاد دیتابیس صحیح کپی نمیشه

در بخش " این هم کد " صفحه آخرش یک کد گذاشتم به نام پشتیبانگیری و بازیابی شما از قسمت بازیابیش امتحان کنید ببینید حل میشه

meysam jahedi
چهارشنبه 23 مهر 1393, 20:46 عصر
نمیفهمم مشکلش کجاست

majnoon110
پنج شنبه 24 مهر 1393, 09:16 صبح
من فکر میکنم مشکل شما این هست که ادرس یا نام دیتابیسی که باید در پوشه ی asset باشه رو اشتباه به برنامه دادید!!
باید دیتابیسی که با برنامه های sqlite editor ساختین رو در پوشه ی asset بگذارید و به نام اون دقت داشته باشید.
اگر همه ی کارها درست انجام شده.
شما باید ورژن دیتابیس رو بعد از هر تغییر عوض کنید.
یا برنامتون رو از روی youwave حذف کنید و دوباره اجرا کنید.