رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

پست های پیشنهاد شده

من یک پایگاه با یک جدول به نام 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(); }

لینک ارسال
به اشتراک گذاری در سایت های دیگر

باید بدین صورت عمل کنید :

ابتدا یک کلاس برای لود کردن دیتابیس تان در دیوایس باید بسازید :

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');");
لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون فقط یکبار دیگه هم error داد که با تغییر open_readonly به   readwrite درست شد ولی وقتی پایگاه را از داخل asset به بیرون می برم و با sqlite browser باز می کنم  رکورد واردش نشده؟؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

درسته وارد نمیشه.باید یکبار اپلیکیشن را حذف کنید و دوباره نصب کنید تا اطلاعات وارد شوند

لینک ارسال
به اشتراک گذاری در سایت های دیگر

چندین دفعه اپلیکیشن را حذف و مجدد import کردم حتی eclipse را بستم و باز کردم ولی اطلاعات در sqlite browser دیده نمیشه ولی مطمئنم که اطلاعات درج شده اند چون وقتی برنامه را با همان رکورد مجدا اجرا می کنم خطا میده چون کلید را نکراری تشخیص میده و وقتی داده کلید را عوض میکنک درست میشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

احتمالا یکجایی اشتباه کردین در برنامه تون، کدتون را یکبار خط به خط دیباگ کنید و ببینید جایی مقدار خالی را نمیفرستید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ببخشید فکر می کنم منظورم را درست متوجه نشدید داده ها بدون هیچ مشکلی درج میشن (حتی دستور آپدیت یکی از رکوردهای قبلی با کلیدش را دادم و خزا نداد)  ولی مشکل من اینه که در sqlite browser هیچ رکوردی را نشون نمیده

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دوست محترم میشه لطف کنید و برنامه را از آدرس   http://www.mediafire.com/?kyjb3zlq8k4lkr5  دانلود و ببینید اشکال از کجاست.خیلی متشکر می شوم.راستی یک سوال دیگه هم که داشتم اینه که در بخش ddms و file explorer من در مسیر data\data\ اصلا نمی تونم نام پکیجم را ببینم و فقط یکسری فولدر همگی با نام con وجود دارد؟؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خب شما دیتابیسی که در گوشی یا امولاتور کپی میشود را نگاه میکنید یا همون دیتابسی پوشه assets ؟

چون خیلیا اول اشتباه میکنن و فکر میکنن که چرا به دیتابیس assets اضافه نمیشه اینکار امکانپذیر نیست چون نمیشود تو پکیج اطلاعات وارد پوشه و دیتایس مربوطه کرد...اگر دیتابیس خودتون رو از مسیر data/data/packageName/database ببنید اطلاعات وجود دارد.

برای مشکل دوم لطفا یک اسکریت شات از اون قسمت بگیرید ، تا مشکل را ببینم.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون دوست محترم sqlite manager plugin را هم در اکلیپس نصب کردم تا دیگر مشکلی برای دیدن محتویات پایگاهم نباشه و همونجا محتویات را می بینم حالا

 برای ادامه کار در دیتابیس و کار با کوئریها و جداول مختلف باید با همان شی db کار کنم ممنون میشم اگه tutorialهای خوبی در این زمینه معرفی کنید؟

(راستی استفاده از contentvalueهابرای کار مناسب است یا همان استفاده از دستورات sql (db.execsql)?

لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

اما در جواب سوالتان :

برای ذخیره اطلاعات باید از 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
لینک ارسال
به اشتراک گذاری در سایت های دیگر

استفاده مستقیم از دستورات sql با db.execsql چه اشکالی را ایجاد می کند که نباید از از این روش استفاده کرد؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

روشی که شما میگین شی گرا نیست و تغییر دادنش در پروژه بزرگ سخت میشه..سعی کنید یک کلاس را یکبار فقط تعریف کنید، بعد هر چند دفعه که قصد دارید از آن استفاده کنید ، هم کد کمتری مینویسید و هم اینکه کد بهینه نوشته اید و هم زمان کمتری هم از دست میدهید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 1 سال بعد...

سلام

بنده دیتابیسی به نام 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');");
لینک ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...