--masumeh 0 ارسال شده در ۱۲ تیر ۱۳۹۲ گزارش اشتراک گذاری ارسال شده در ۱۲ تیر ۱۳۹۲ من یک پایگاه با یک جدول به نام mytb در sqllite browser ساختم و سپس پایگاه را در esset کپی و دستورات زیر را برای درج یک رکورد جدید وارد کردم ولی میگه جدول را نمیشناسه؟؟!! [align=left]try[/align] { db = SQLiteDatabase.openDatabase("data/data/com.example.db1/mydb", null, SQLiteDatabase.OPEN_READWRITE); db.execSQL("insert into mytb(id,name) values(2,'sara');"); //db.close();[align=left]}[/align] catch(SQLiteException e) { Toast.makeText(this, e.getMessage(), 1).show(); } نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Farzad Sarseifi 575 ارسال شده در ۱۲ تیر ۱۳۹۲ گزارش اشتراک گذاری ارسال شده در ۱۲ تیر ۱۳۹۲ باید بدین صورت عمل کنید : ابتدا یک کلاس برای لود کردن دیتابیس تان در دیوایس باید بسازید : import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteException;import android.database.sqlite.SQLiteOpenHelper;public class DatabaseUsers extends SQLiteOpenHelper { String DB_PATH =null; private static String DB_NAME = "mydb"; private SQLiteDatabase myDataBase; private final Context myContext; /** * Constructor * Takes and keeps a reference of the passed context in order to access to the application assets and resources. * @param context */ public DatabaseUsers(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; DB_PATH="/data/data/"+context.getPackageName()+"/"+"databases/"; } /** * Creates a empty database on the system and rewrites it with your own database. * */ public void createDataBase() throws IOException{ boolean dbExist = checkDataBase(); if(dbExist){ //do nothing - database already exist }else{ //By calling this method and empty database will be created into the default system path //of your application so we are gonna be able to overwrite that database with our database. this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } /** * Check if the database already exist to avoid re-copying the file each time you open the application. * @return true if it exists, false if it doesn't */ private boolean checkDataBase(){ SQLiteDatabase checkDB = null; try{ String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); }catch(SQLiteException e){ //database does't exist yet. } if(checkDB != null){ checkDB.close(); } return checkDB != null ? true : false; } /** * Copies your database from your local assets-folder to the just created empty database in the * system folder, from where it can be accessed and handled. * This is done by transfering bytestream. * */ private void copyDataBase() throws IOException{ //Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; //Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException{ //Open the database String myPath = DB_PATH + DB_NAME; myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } @Override public synchronized void close() { if(myDataBase != null) myDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } //return cursor public Cursor query(String table,String[] columns, String selection,String[] selectionArgs,String groupBy,String having,String orderBy){ return myDataBase.query("EMP_TABLE", null, null, null, null, null, null); }} سپس در اکتیویتی که قصد دارید عملیات درج انجام شود بدین صورت عمل کنید. DatabaseUsers myDbHelper = new DatabaseUsers(this); try { myDbHelper.createDataBase(); } catch (IOException ioe) { throw new Error("Unable to create database"); } try { myDbHelper.openDataBase(); } catch (SQLException sqle) { throw sqle; }SQLiteDatabase db;db=myDbHelper.getWritableDatabase();db.execSQL("insert into mytb(id,name) values(2,'sara');"); نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
--masumeh 0 ارسال شده در ۱۲ تیر ۱۳۹۲ مالک گزارش اشتراک گذاری ارسال شده در ۱۲ تیر ۱۳۹۲ ممنون فقط یکبار دیگه هم error داد که با تغییر open_readonly به readwrite درست شد ولی وقتی پایگاه را از داخل asset به بیرون می برم و با sqlite browser باز می کنم رکورد واردش نشده؟؟ نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Farzad Sarseifi 575 ارسال شده در ۱۲ تیر ۱۳۹۲ گزارش اشتراک گذاری ارسال شده در ۱۲ تیر ۱۳۹۲ درسته وارد نمیشه.باید یکبار اپلیکیشن را حذف کنید و دوباره نصب کنید تا اطلاعات وارد شوند نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
--masumeh 0 ارسال شده در ۱۲ تیر ۱۳۹۲ مالک گزارش اشتراک گذاری ارسال شده در ۱۲ تیر ۱۳۹۲ چندین دفعه اپلیکیشن را حذف و مجدد import کردم حتی eclipse را بستم و باز کردم ولی اطلاعات در sqlite browser دیده نمیشه ولی مطمئنم که اطلاعات درج شده اند چون وقتی برنامه را با همان رکورد مجدا اجرا می کنم خطا میده چون کلید را نکراری تشخیص میده و وقتی داده کلید را عوض میکنک درست میشه نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Farzad Sarseifi 575 ارسال شده در ۱۲ تیر ۱۳۹۲ گزارش اشتراک گذاری ارسال شده در ۱۲ تیر ۱۳۹۲ احتمالا یکجایی اشتباه کردین در برنامه تون، کدتون را یکبار خط به خط دیباگ کنید و ببینید جایی مقدار خالی را نمیفرستید نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
--masumeh 0 ارسال شده در ۱۲ تیر ۱۳۹۲ مالک گزارش اشتراک گذاری ارسال شده در ۱۲ تیر ۱۳۹۲ ببخشید فکر می کنم منظورم را درست متوجه نشدید داده ها بدون هیچ مشکلی درج میشن (حتی دستور آپدیت یکی از رکوردهای قبلی با کلیدش را دادم و خزا نداد) ولی مشکل من اینه که در sqlite browser هیچ رکوردی را نشون نمیده نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
--masumeh 0 ارسال شده در ۱۳ تیر ۱۳۹۲ مالک گزارش اشتراک گذاری ارسال شده در ۱۳ تیر ۱۳۹۲ دوست محترم میشه لطف کنید و برنامه را از آدرس http://www.mediafire.com/?kyjb3zlq8k4lkr5 دانلود و ببینید اشکال از کجاست.خیلی متشکر می شوم.راستی یک سوال دیگه هم که داشتم اینه که در بخش ddms و file explorer من در مسیر data\data\ اصلا نمی تونم نام پکیجم را ببینم و فقط یکسری فولدر همگی با نام con وجود دارد؟؟ نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Farzad Sarseifi 575 ارسال شده در ۱۳ تیر ۱۳۹۲ گزارش اشتراک گذاری ارسال شده در ۱۳ تیر ۱۳۹۲ خب شما دیتابیسی که در گوشی یا امولاتور کپی میشود را نگاه میکنید یا همون دیتابسی پوشه assets ؟ چون خیلیا اول اشتباه میکنن و فکر میکنن که چرا به دیتابیس assets اضافه نمیشه اینکار امکانپذیر نیست چون نمیشود تو پکیج اطلاعات وارد پوشه و دیتایس مربوطه کرد...اگر دیتابیس خودتون رو از مسیر data/data/packageName/database ببنید اطلاعات وجود دارد. برای مشکل دوم لطفا یک اسکریت شات از اون قسمت بگیرید ، تا مشکل را ببینم. نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
--masumeh 0 ارسال شده در ۱۳ تیر ۱۳۹۲ مالک گزارش اشتراک گذاری ارسال شده در ۱۳ تیر ۱۳۹۲ اسکرین شات :http://www.mediafire.com/?bqyjkdfx4djl0bc نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Farzad Sarseifi 575 ارسال شده در ۱۳ تیر ۱۳۹۲ گزارش اشتراک گذاری ارسال شده در ۱۳ تیر ۱۳۹۲ خب شما باید اسکرول Name رو به سمت راست بکشید تا اسم ها قابل تشخیص باشد. نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
--masumeh 0 ارسال شده در ۱۳ تیر ۱۳۹۲ مالک گزارش اشتراک گذاری ارسال شده در ۱۳ تیر ۱۳۹۲ ممنون دوست محترم sqlite manager plugin را هم در اکلیپس نصب کردم تا دیگر مشکلی برای دیدن محتویات پایگاهم نباشه و همونجا محتویات را می بینم حالا برای ادامه کار در دیتابیس و کار با کوئریها و جداول مختلف باید با همان شی db کار کنم ممنون میشم اگه tutorialهای خوبی در این زمینه معرفی کنید؟ (راستی استفاده از contentvalueهابرای کار مناسب است یا همان استفاده از دستورات sql (db.execsql)? نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Farzad Sarseifi 575 ارسال شده در ۱۳ تیر ۱۳۹۲ گزارش اشتراک گذاری ارسال شده در ۱۳ تیر ۱۳۹۲ صبر کنید تا چند روز آینده آموزش های کاملی در ارتباط با دیتابیس در سایت قرار خواهند گرفت.. برنامه های زیادی برای ماه مبارک رمضان در سایت قرار خواهد گرفت فعلا منتظر سورپرایز های انجمن باشید تا اعلام گردد. اما در جواب سوالتان : برای ذخیره اطلاعات باید از ContentValues استفاده شود.در این تاپیک روش را به سادگی شرح داده آم : http://p30droid.com/Thread-%D8%AF%D8%B1%D8%AC-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AF%D8%B1-%D8%AC%D8%AF%D9%88%D9%84 نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
--masumeh 0 ارسال شده در ۱۳ تیر ۱۳۹۲ مالک گزارش اشتراک گذاری ارسال شده در ۱۳ تیر ۱۳۹۲ استفاده مستقیم از دستورات sql با db.execsql چه اشکالی را ایجاد می کند که نباید از از این روش استفاده کرد؟ نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Farzad Sarseifi 575 ارسال شده در ۱۳ تیر ۱۳۹۲ گزارش اشتراک گذاری ارسال شده در ۱۳ تیر ۱۳۹۲ روشی که شما میگین شی گرا نیست و تغییر دادنش در پروژه بزرگ سخت میشه..سعی کنید یک کلاس را یکبار فقط تعریف کنید، بعد هر چند دفعه که قصد دارید از آن استفاده کنید ، هم کد کمتری مینویسید و هم اینکه کد بهینه نوشته اید و هم زمان کمتری هم از دست میدهید. نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
b.kordtabar 0 ارسال شده در ۱۳ بهمن ۱۳۹۳ گزارش اشتراک گذاری ارسال شده در ۱۳ بهمن ۱۳۹۳ سلام بنده دیتابیسی به نام data با جدولی به نام main با فیلدها و مقادیرشان در sqlite manager ایجاد کردم و سپس فایل دیتابیس ایجاد شده را در پوشه assets ذخیره و از آنجا مقادیرشان را در اپلیکیشن مورد استفاده قرار دادم. می خواهم در برنامه خود به دیتابیسی که قبلا ایجاد کردم دو جدول دیگر با فیلدهای مورد نظر درج کنم نمی دانم برای این کار چه باید بکنم؟ import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteException;import android.database.sqlite.SQLiteOpenHelper;public class DatabaseUsers extends SQLiteOpenHelper { String DB_PATH =null; private static String DB_NAME = "mydb"; private SQLiteDatabase myDataBase; private final Context myContext; /** * Constructor * Takes and keeps a reference of the passed context in order to access to the application assets and resources. * @param context */ public DatabaseUsers(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; DB_PATH="/data/data/"+context.getPackageName()+"/"+"databases/"; } /** * Creates a empty database on the system and rewrites it with your own database. * */ public void createDataBase() throws IOException{ boolean dbExist = checkDataBase(); if(dbExist){ //do nothing - database already exist }else{ //By calling this method and empty database will be created into the default system path //of your application so we are gonna be able to overwrite that database with our database. this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } /** * Check if the database already exist to avoid re-copying the file each time you open the application. * @return true if it exists, false if it doesn't */ private boolean checkDataBase(){ SQLiteDatabase checkDB = null; try{ String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); }catch(SQLiteException e){ //database does't exist yet. } if(checkDB != null){ checkDB.close(); } return checkDB != null ? true : false; } /** * Copies your database from your local assets-folder to the just created empty database in the * system folder, from where it can be accessed and handled. * This is done by transfering bytestream. * */ private void copyDataBase() throws IOException{ //Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; //Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException{ //Open the database String myPath = DB_PATH + DB_NAME; myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } @Override public synchronized void close() { if(myDataBase != null) myDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } //return cursor public Cursor query(String table,String[] columns, String selection,String[] selectionArgs,String groupBy,String having,String orderBy){ return myDataBase.query("EMP_TABLE", null, null, null, null, null, null); }} سپس در اکتیویتی که قصد دارید عملیات درج انجام شود بدین صورت عمل کنید. DatabaseUsers myDbHelper = new DatabaseUsers(this); try { myDbHelper.createDataBase(); } catch (IOException ioe) { throw new Error("Unable to create database"); } try { myDbHelper.openDataBase(); } catch (SQLException sqle) { throw sqle; }SQLiteDatabase db;db=myDbHelper.getWritableDatabase();db.execSQL("insert into mytb(id,name) values(2,'sara');"); نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .