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

میشه یکی جواب بده (مشکل در خواندن دیتابیس)

الی  10 سال پیش  10 سال پیش
0 0

سلام من یه برنامه نوشتن با یه دیتابیس ازبرنامه SQLite expert براش یه دکمه گذاشتم که وقتی روش کلیک بشه دیتابیس رو نشون بده ولی وقتی روش کلیلک میکنم فورس کلوز میکنه هرچی هم میگردم نمیتونم مشکلش رو پیدا کنم .

public class ActivityDatabase extends SQLiteOpenHelper {

    public final String   path = "data/data/com.elham.app.database/databases/";

    public final String   Name = "database";

    public SQLiteDatabase mydb;

    private final Context mycontext;

    public ActivityDatabase(Context context) {

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

        mycontext = context;

    }

    @Override

    public void onCreate(SQLiteDatabase db) {

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    public void useable() {

        boolean checkdb = checkdb();

        if (checkdb) {

        } else {

            this.getReadableDatabase();

            try {

                copydatabase();

            }

            catch (IOException e) {

            }

        }

    }

    public void open() {

        mydb = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READWRITE);

    }

    public void close() {

        mydb.close();

    }

    public boolean checkdb() {

        SQLiteDatabase db = null;

        try {

            db = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READONLY);

        }

        catch (SQLException e) {}

        return db != null ? true : false;

    }

    public void copydatabase() throws IOException {

 

        OutputStream myOutput = new FileOutputStream(path + Name);

 

        byte[] buffer = new byte[1024];

        int length;

 

        InputStream myInput = mycontext.getAssets().open(Name);

        while ((length = myInput.read(buffer)) > 0) {

            myOutput.write(buffer, 0, length);

        }

 

        myInput.close();

        myOutput.flush();

        myOutput.close();

 

    }

 

 

    public String Display(int row, int field, String table) {

        Cursor cu = mydb.rawQuery("select *from " + table, null);

        cu.moveToPosition(row);

        String s = cu.getString(field);

        return s;

    }

 

}

 

0 0
تو این خط Cursor cu = mydb.rawQuery("select *from " + table, null) بین * و from فاصله نداره. البته شاید جاهای دیگه هم مشکل داشته باشه ولی داخل تگ بزارید تا قابل خواندن باشه. (10 سال پیش)
+1 0
لطفا کدتون را داخل Source Code قرار دهید (10 سال پیش)
0 0
احمد اقا متوجه نشدم دقیق باید فاصله داشته باشه یا نه ؟ در هر دو صورت کرش میکنه (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
الی  10 سال پیش
0 0

اینم کد

 public class ActivityDatabase extends SQLiteOpenHelper {

    public final String   path = "data/data/com.elham.app.chocolate/databases/";
    public final String   Name = "database";
    public SQLiteDatabase mydb;
    private final Context mycontext;


    public ActivityDatabase(Context context) {
        super(context, "database", null, 1);
        mycontext = context;
    }


    @Override
    public void onCreate(SQLiteDatabase db) {

    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }


    public void useable() {

        boolean checkdb = checkdb();

        if (checkdb) {

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

            }
        }
    }


    public void open() {

        mydb = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READWRITE);
    }


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


    public boolean checkdb() {
        SQLiteDatabase db = null;

        try {
            db = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READONLY);

        }
        catch (SQLException e) {}

        return db != null ? true : false;

    }


    public void copydatabase() throws IOException {

        OutputStream myOutput = new FileOutputStream(path + Name);

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

        InputStream myInput = mycontext.getAssets().open(Name);
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }

        myInput.close();
        myOutput.flush();
        myOutput.close();

    }


    public String Display(int row, int field, String table) {
        Cursor cu = mydb.rawQuery("select * from" + table, null);
        cu.moveToPosition(row);
        String s = cu.getString(field);
        return s;
    }

}

 

0 0
دستوری که برای اجرا نوشتین و نام دیتابیس و تیبلتون چیه؟ (10 سال پیش)
پاسخ به سوال 
الی  10 سال پیش
0 0

اینم دستورات اجرا 

 
public class ChocolateActivity extends Activity {

    private ActivityDatabase db;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btn = (Button) findViewById(R.id.button1);
        db = new ActivityDatabase(this);

        db.useable();

        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                db.open();
                String s = db.Display(0, 1, "chocolate");
                Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
                db.close();
            }

        });

    }
}
0 0
اسم دیتابیسم database اسم تیبلم chocolate (10 سال پیش)
+2 0
بعد از from" یه فاصله بزارید اینجوری from به نام table چسبیده (10 سال پیش)
0 0
اجازه دسترسی به SD Card رو در منیفست چک کنید، احتمالا دسترسی نوشتن روی SD Card رو ننوشتین ! (10 سال پیش)
0 0
اگه اشتباه نکنم شاید : در متد Display در کلاس دیتابیس مقدار row از یک شروع میشه نه صفر... (10 سال پیش)
+1 0
فهیدم مشکلش کجاست کافی بود به جای tabale + اسم تیبلم رو تویه تگ بعد از from بذارم یعنی "select * from chocolate" ممنونم از راهنمایی همه تون (10 سال پیش)

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