-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
ممنون
درست کردم و زمانی که فایل zip میکردم خطا میداد
بعد با حالت معمولی گذاشتم درست شد
اما حالا بعد ریختن اطلاعات از طریق برنامه میخوام با sqlitebrowser محتویات ببینم
الان که محتویاتش نگاه میکنم میبینم اطلاعاتی درونش درج نشده
باید چیکار کنم؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
بعد از اینکه دیتابیس رو ساختید حتما باید ذخیره کنید تا اطلاعات داخلش ثبت بشه
دیتابیس رو که ذخیره کردید، اگر بعدا خواستید اطلاعات رو ببینید یا تغییر بدید open database میزنید و فایل دیتابیس رو انتخاب میکنید تا دیتابیس باز بشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من دیتابیس با این برنامه ساختم
بعد در پوشه و مسیرهایی که شما گفتین کپی کردم
و از طریق برنامه اندروید داخلش اطلاعات ذخیره کردم
حالا میخوام همون اطلاعات از طریقsqlitebrowser ببینم
الان کلاسی که گفتین گذاشتم این کدها قرار دادم
SQLiteDatabase mydb; MyDataBase = new MyDatabase(this);
mydb = MyDataBase.getWritableDatabase();
mydb.execSQL("insert into ramz (name,pass) values ('3','3' ) ");
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
آها شما میخواین بعد از انجام تغییرات توی برنامه دیتابیس رو ببینید
برای این کار باید برید به همون DDMS و پوشه دیتا و باز دیتا و بعد پوشه برنامه تون
توی اون تاپیک دیگه گفتید که اونجا نتونستید پیدا کنید، در حالت عادی باید همین جا باشه، مگر اینکه جا به جا کرده باشید ( جای دیگه اش رو اطلاع ندارم الان )
بالاخره فایل دیتابیس برنامه رو باید از طریق همون DDMS بگردید و پیدا کنید، بعد از اینکه پیدا کردید فایل رو انتخاب میکنید، یک آیکون اون بالا هست شبیه save که با اون فایل دیتابیس رو توی کامپیوتر ذخیره میکنید و با نرم افزار بازش میکنید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام استاد.
چطور میتونم اطلاعات رو از دیتابیس با do و while بگیرم؟
میخوام اطلاعات رو بریزیم توی یک arrayAdapter بعد به یک لیست ویو لینکش کنم.
میشه راهنمایی کنید ؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
davoodi
سلام استاد.
چطور میتونم اطلاعات رو از دیتابیس با do و while بگیرم؟
میخوام اطلاعات رو بریزیم توی یک arrayAdapter بعد به یک لیست ویو لینکش کنم.
میشه راهنمایی کنید ؟
سلام
بابا به خدا من دانشجوام :لبخند: انقد نگو استاد
این کاری که شما میخواین انجام بدید آموزشش توی پست اول همین تاپیک وجود داره
همچنین این نمونه برنامه که گذاشتم میتونه کمکتون کنه توی این کار
باز هم من سعی میکنم یک پروژه کامل واسه کار با دیتابیس تا آخر این هفته بذارم
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
poorman جان تو پروژه افزودن به علاقه مندی ها یه اشکال هست که نتونستم برطرف کنم
اگر داده ها زیاد باشه و اولیین ستاره را لمس کنی و روشن بشه مقدار برابر با yes میشه اما اگه یه اسکرول به پایین کنی و دوباره بالا بیای ستاره خود به خود خاموش میشه (اما مقدار هنوز yes هست)
اگر از او اکتیویتی بیرون بیای و دوباره واردش بشی درست میشه و مشکلی نداره
مشکل اینه چطور باید کار کنیم همون موقع داده ها از رو دیتابیس خوانده بشه؟
http://upir.ir/1393.2/listdata.gif
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
همونجا که داده ها رو توی دیتابیس آپدیت میکنیم ، آرایه رو هم تغییر بده
یعنی :
likes[position] = "yes";
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
اون مشکلی که در بالا گفتم خود تو پروژه شما که از arrayadapter اکستندز شده با کدی که در بالا گذاشتید برطرف میشه.
ولی تو کلاسی که از CursorAdapter گرفته شده اینطور نیست .. منم هر کاریش کردم نتونستم اینو درست کنم
کد کلاس را در زیر قرار میدم
فکر کنم باید me را مانند likes[position] مساوی yes یا no قرار بدم که باز هم نمیشه
public class MyAdapter extends CursorAdapter {
Context b;
LayoutInflater inflater;
@SuppressWarnings("deprecation")
public MyAdapter(Context context, Cursor c) {
super(context, c);
inflater = LayoutInflater.from(context);
b= (Context) context;
}
@SuppressWarnings("unused")
@Override
public void bindView(View view, Context context, final Cursor cursor) {
// TODO Auto-generated method stub
TextView tv1 = (TextView)view.findViewById(R.id.txt_name);
TextView tv2 = (TextView)view.findViewById(R.id.txt_numer);
tv1.setText(cursor.getString(2));
tv2.setText(cursor.getString(3));
final int pos = cursor.getPosition();
final Button favorite_check= (Button)view.findViewById(R.id.favorite_check);
final CheckBox repeatChkBx = (CheckBox)view.findViewById(R.id.favorite_check);
String me = cursor.getString(cursor.getColumnIndex("like"));
if (me.equals("yes")) {
repeatChkBx.setChecked(true);
} else {
repeatChkBx.setChecked(false);
}
repeatChkBx.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
MyDatabase MyDatabase = new MyDatabase(b);
SQLiteDatabase mydb = MyDatabase.getWritableDatabase();
cursor.moveToPosition(pos);
if (repeatChkBx.isChecked()) {
mydb.execSQL("update list set like = 'yes' where id = " + cursor.getString(1));
}else{
mydb.execSQL("update list set like = 'no' where id = " + cursor.getString(1));
}
}
});
}
protected Context getActivity() {
// TODO Auto-generated method stub
return null;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(R.layout.item, parent, false);
}
}
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
حامد جان چیزی که من پیدا کردم اینه که نمیشه اطلاعات cursor رو مستقیما تغییر داد
شما باید بعد از اینکه دیتابیس رو آپدیت کردی cursor رو requery() کنی ( دیگه تاثیرش روی سرعت رو نمیدونم )
ولی حالا چه اصراری که از CursorAdapter استفاده کنی ؟ مگه آرایه چه مشکلی داره ؟ دست آدم بازتره برای کار با لیست ویو
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
آره راست میگی بهتره از آرایه استفاده کرد
من دارم برای آموزش و یادگیری این پروژه ها را انجام میدم
با آرایه که خوب پروژه شما هست
می خواستم بدونم با cursorAdapter چطور میشه انجام داد
بازم دمت گرم که جواب سوال هام را دادی
شاید یه تاپیک زدم ببینم بچه ها چی میگن
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
البته منم قبل اینکه این پروژه رو بهم بدی اصلا نمیدونستم با cursor میشه آداپتر رو ساخت :لبخند:
و به نظرم راه جالبی اومد برای افزایش سرعت
یک راه حل به ذهنم رسید، بیا علاوه بر cursor که میفرستی، آرایه likes رو هم بفرست، اینطوری هم سرعت کم نمیشه هم کار درست میشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
یعنی چطوری این کارو بکنیم؟ :متفکر:
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
کاری نداره که دیگه
توی آداپتر مقادیر ورودی رو علاوه بر cursor یک آرایه هم بگیر ( که همون آرایه لایک هست و قبلا باید پر بشه )
Context b;
String likes[];
LayoutInflater inflater;
@SuppressWarnings("deprecation")
public MyAdapter(Context context, Cursor c, String likes[]) {
super(context, c);
inflater = LayoutInflater.from(context);
b= (Context) context;
this.likes = likes;
}
این قسمت باید اینطوری تغییر کنه
بعدش هم خواستی چک باکس رو مقدار بدی از cursor مقدار نده، از این آرایه مقدار بده
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
الان curser مثل datatable در سی شارپ عمل میکنه؟
چطر میتونیم یک کلاس بنویسیم که اطلاعات در کرسر بریزه و به صورت استاتیک به بقیه صفحات پاس بدیم
یعنی میخوام برای همه پروزه فقط یک کلاس نوشته بشه هر بار همون فراخونی بشه و فقط دستور اسکیول به عنوان ورودی داده بشه و خروجی اون هم بصورت استاتیک به هر فرمی خواستیم داده بشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من C# کار نکردم ( VB.NET ) کار کردم، اما فک میکنم آره مثل همون دیتا تیبل باشه
اینکه شما یک کلاس برای پاس دادن cursor بنویسید کار خاصی نداره!!! شما وقتی یک متغیر cursor پابلیک داشته باشی، از تمام اکتیویتی ها و کلاس های دیگه میتونی بهش دسترسی داشته باشی
شما بر فرض توی اکتیویتی اول این cursor عمومی رو مقدار بدین، بعد توی اکتیویتی های دیگه اطلاعاتش رو بخونین
ولی در کل به نظر من این کار لازم نیست، مگر اینکه شما فقط یک یا دو کوئری داشته باشید
چون اگر هر بار بخواین اطلاعات دیتابیس رو توی cursor نگه دارید، فضای زیادی مصرف میشه و چون پابلیک هست این فضا آزاد نمیشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
بله فضای زیادی اشغال میکنه
اما دستوری نیست که بعد استفاده از کرسر خالیش کنیم تا فضا ازاد بشه؟
چون به نظر من جالب نیست ما در هر فرمی این تابع بنویسیم فراخونی کنیم اگر در یک کلاس باشه و یکبار نوشته بشه خیلی بهتره
نظرتون چیه؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام استاد :لبخندساده:.
من باید توی پروژه از join استفاده میکنم.
فارین کی ها رو با sqlitestudio-2.1.5 در دیتابیسم ساختم.
اما به محض اینکه از دستور inner join استفاده میکنم برنامه خطا میده.
این هم کدهام هستن :
Cursor row = mydb.rawQuery("SELECT table2.* FROM table1 "
+ "INNER JOIN table2 ON table1.a = table2.b", null);
ممنونم.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
davoodi
سلام استاد :لبخندساده:.
من باید توی پروژه از join استفاده میکنم.
فارین کی ها رو با sqlitestudio-2.1.5 در دیتابیسم ساختم.
اما به محض اینکه از دستور inner join استفاده میکنم برنامه خطا میده.
این هم کدهام هستن :
Cursor row = mydb.rawQuery("SELECT table2.* FROM table1 "
+ "INNER JOIN table2 ON table1.a = table2.b", null);
ممنونم.
مشکل بخاطر رعایت نکردن فاصله ها در کوئری بود که حل شد.
ممنون.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
sara_traveler
بله فضای زیادی اشغال میکنه
اما دستوری نیست که بعد استفاده از کرسر خالیش کنیم تا فضا ازاد بشه؟
چون به نظر من جالب نیست ما در هر فرمی این تابع بنویسیم فراخونی کنیم اگر در یک کلاس باشه و یکبار نوشته بشه خیلی بهتره
نظرتون چیه؟
ببینید کار شما دو تا حالت داره، یکی اینکه کلا دو تا کوئری دارید و روند خواندن اطلاعات از cursor توی تمام صفحات یکسان هست
تو این حالت حرف شما عملی میشه، شما یک تابع پابلیک میذارید و بعد از فراخوانی اطلاعات رو برمیگردونید ( دست خودتونه از چه نوع باشه )
حالت دیگه اینه که کوئری های شما شکل یکسان نداره
توی این حالت تنها میشه کوئری فرستاد و cursor رو دریافت کرد، که تاثیری توی خلاصه سازی نداره به نظر من !!!
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
کاری نداره که دیگه
توی آداپتر مقادیر ورودی رو علاوه بر cursor یک آرایه هم بگیر ( که همون آرایه لایک هست و قبلا باید پر بشه )
Context b;
String likes[];
LayoutInflater inflater;
@SuppressWarnings("deprecation")
public MyAdapter(Context context, Cursor c, String likes[]) {
super(context, c);
inflater = LayoutInflater.from(context);
b= (Context) context;
this.likes = likes;
}
این قسمت باید اینطوری تغییر کنه
بعدش هم خواستی چک باکس رو مقدار بدی از cursor مقدار نده، از این آرایه مقدار بده
خوب اینجوری از همون آرایه بریم کارش راحت تره که
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
دیگه چیزی که من توی بساطم داشتم همین بود :لبخند:
حالا بازم سرچ بزن اگه راه دیگه ای پیدا شد که جواب بده ما رو بی خبر نذار :لبخندساده:
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
آقای poorman راست میگن اما اگه میشه وقتی به راه حلی رسیدین یه سورس بزارید تا همه استفاده کنند.
من هم از این روش استفاده میکنم و به مشکل برخوردم.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
باسلام
این برنامه خطادر بازکردن بانک میذه من تو چه مسیری دنبال بانک باشم؟؟؟
public class myDB {
//SQLite database
private SQLiteDatabase moDB;
private final static String CONST_DB_PATH="/SMART-BUS";
private final static String CONST_DB_NAME="/Database.db3";
private String mstrCurDBPath;
protected void onDestroy()
{
CloseDatabase();
}
public SQLiteDatabase GetDB()
{
return moDB;
}
public void CloseDatabase()
{
if(moDB!=null)
{
if (moDB.isOpen())
{
moDB.close();
}
}
}
public String GetDBPath()
{
//String strDBPath ;
//strDBPath= android.os.Environment
// .getExternalStorageDirectory().getAbsolutePath()
// + CONST_DB_PATH+CONST_DB_NAME;
//strDBPath = android.os.Environment.getExternalStorageDirectory ().getAbsolutePath()
// + CONST_DB_PATH+CONST_DB_NAME;
return mstrCurDBPath;
}
public SQLiteDatabase OpenDatabase()
{
String strDBPath,strRoot ;
File oDir;
try
{
moDB=null;
strDBPath = android.os.Environment.getExternalStorageDirectory ().getAbsolutePath()
+ CONST_DB_PATH+CONST_DB_NAME;
oDir = new File(strDBPath);
if (oDir.exists()==false)
{
strDBPath="/sdcard"+CONST_DB_PATH+CONST_DB_NAME;
oDir = new File(strDBPath);
if (oDir.exists()==false)
{
strDBPath ="/flash"+CONST_DB_PATH+CONST_DB_NAME;
oDir = new File(strDBPath);
if (oDir.exists()==false)
{
strDBPath = "/mnt/sdcard" + CONST_DB_PATH+CONST_DB_NAME;
oDir = new File(strDBPath);
if (oDir.exists()==false)
{
strDBPath = "/LocalDisk" + CONST_DB_PATH+CONST_DB_NAME;
if (oDir.exists()==false)
{
strDBPath = "/local" + CONST_DB_PATH+CONST_DB_NAME;
}
}
}
}
}
mstrCurDBPath=strDBPath;
moDB = SQLiteDatabase.openOrCreateDatabase(strDBPath, null);
}catch (Exception e)
{
}
return moDB;
}
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
کدتون خیلی قاطی پاتیه !!! بهتر بود کدهاتون رو توی تگ جاوا بذارید تا بشه راحت خوند
خطایی رو هم که میده بذارید شاید کمک کنه توی فهمیدن مشکلتون
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام ،
کلا کلاسوفرستادم،من نمیدونم کجا باید دنبال فایل دیتابیسم بگردم یا دستی کجا بزارمش؟؟؟
درزمان اجرا در DDMS دیتابیسمو پیدا نمیکنه در مسیر لوکال در داخل کد... strDBPath = "/local" + CONST_DB_PATH+CONST_DB_NAME
مشکل سرهمین مسیره من نمیدونم این از کدوم روشی که شما گفتین استفاده کرده......
package com.smartbus.automation.database;
import java.io.File;
import android.content.Context;
import android.content.ContextWrapper;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;
public class myDB {
//SQLite database
private SQLiteDatabase moDB;
private final static String CONST_DB_PATH="/SMART-BUS";
private final static String CONST_DB_NAME="/Database.db3";
private String mstrCurDBPath;
protected void onDestroy()
{
CloseDatabase();
}
public SQLiteDatabase GetDB()
{
return moDB;
}
public void CloseDatabase()
{
if(moDB!=null)
{
if (moDB.isOpen())
{
moDB.close();
}
}
}
public String GetDBPath()
{
//String strDBPath ;
//strDBPath= android.os.Environment
// .getExternalStorageDirectory().getAbsolutePath()
// + CONST_DB_PATH+CONST_DB_NAME;
//strDBPath = android.os.Environment.getExternalStorageDirectory ().getAbsolutePath()
// + CONST_DB_PATH+CONST_DB_NAME;
return mstrCurDBPath;
}
public SQLiteDatabase OpenDatabase()
{
String strDBPath,strRoot ;
File oDir;
try
{
moDB=null;
strDBPath = android.os.Environment.getExternalStorageDirectory ().getAbsolutePath()
+ CONST_DB_PATH+CONST_DB_NAME;
oDir = new File(strDBPath);
if (oDir.exists()==false)
{
strDBPath="/sdcard"+CONST_DB_PATH+CONST_DB_NAME;
oDir = new File(strDBPath);
if (oDir.exists()==false)
{
strDBPath ="/flash"+CONST_DB_PATH+CONST_DB_NAME;
oDir = new File(strDBPath);
if (oDir.exists()==false)
{
strDBPath = "/mnt/sdcard" + CONST_DB_PATH+CONST_DB_NAME;
oDir = new File(strDBPath);
if (oDir.exists()==false)
{
strDBPath = "/LocalDisk" + CONST_DB_PATH+CONST_DB_NAME;
if (oDir.exists()==false)
{
strDBPath = "/local" + CONST_DB_PATH+CONST_DB_NAME;
}
}
}
}
}
mstrCurDBPath=strDBPath;
moDB = SQLiteDatabase.openOrCreateDatabase(strDBPath, null);
}catch (Exception e)
{
}
return moDB;
}
/*
* execute SQL
*/
public boolean ExecSQL(SQLiteDatabase DB,String strSql)
{
boolean blnFlag = false;
try
{
DB.execSQL(strSql);
blnFlag = true;
}
catch(Exception e)
{
}
return blnFlag;
}
/*
* Query SQL
*/
public Cursor GetCursor(SQLiteDatabase DB,String strTableName,String[] arraystrColsName,String strWhere,
String[] arraystrReplacementChar,String strGroupBy,String strHaving,String strOderby)
{
Cursor ocursor=null;
try
{
ocursor = DB.query(strTableName, arraystrColsName,
strWhere, arraystrReplacementChar, strGroupBy, strHaving, strOderby);
}
catch(Exception e)
{
}
return ocursor;
}
}
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
الان این کد شما در زمان اجرا میاد تمام مسیرهایی که ممکن هست دیتابیس اونجا باشه رو چک میکنه، اگر دیتابیس رو پیدا کنه، برمیگردونه
اگر دیتابیس رو پیدا نکنه خودش توی مسیر local میسازه دیتابیستون رو
شما که میگی پیدا نمیکنه، چون دیتابیس رو قبلا نساختی یا توی اون مسیر کپی نکردی
اگر دیتابیستون آماده ست، از لایبری SQLite Asset Helper استفاده کنید که آموزشش توی همین تاپیک هست
اگر میخواین دیتابیس رو خودتون توی برنامه بسازید، با همین کلاس خب دیتابیس رو میسازه، اما مسیرش رو طوری تنظیم کنین که اگر آخرین شرط ( یعنی local ) هم برقرار نبود، بره توی پوشه data/data/package/database بسازه مثلا
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
مرسی که بررسی کردین،من دیتابیسم آماده هس الان طبق این برنامه کجا برم بزارمش؟؟که بر نامه بتونه پیداش کنه من از این مسیرش سردرنمیارم....من یه پوشه درس کردم و اسمشو smart-bus گداشتم و داخلش دیتابیسمو کپی کردم بازم نشد......
local و localdisk یعنی کجا؟؟
من دقیقا درمسیری که پوشه res و src و... هسن یه پوشه درس کردم و اسمشو smart-bus گداشتم و داخلش دیتابیسمو کپی کردم. و توی یکی از اون شرطایی که میره میگرده گفتم توی اون مسر بگرده اما بازم نشد ببینید بدای دسترسی بع اون پوشه که درریشه هس اینجوری اشتباهه که بازم پیداش نمیکنه....
if (oDir.exists()==false)
{
strDBPath = CONST_DB_PATH+CONST_DB_NAME;
oDir = new File(strDBPath);
SQLite Asset Helper که آموزش دادین رو دیدم شماخوب توضیح داده بودید اما من زیاد بااندروید و کار با دیتابیس تازه واردم نمیتونم تمام توابع این کلاسو که برای یه برنامه بزرگه با این SQLite Asset Helper دوباره بنویسم.آخه این کلاسو که بقیه ازش استفاده میکنن فقط برای اجرای دستورات sql یه تابع داره شما گفته بودین خونون و نوشتن فرق میکنه...
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
ببینین شما دیتابیس آماده دارید، برای دیتابیس آماده خدایی من یک هفته هرچی روش توی اینترنت پیدا کردم رو امتحان کردم، هیچی ساده تر و بی اشکال تر از لایبری SQLite Asset Helper نبود
این کدهایی که نوشتید برای کار با دیتابیسی هست که توسط خود برنامه بسازید، این دیتابیس ساخته شده توی گوشی و در آدرسهایی که توی کدتون هست میتونه ذخیره بشه
اگر شما میخواین از این کدها برای دیتابیس آمادتون استفاده کنین، باید یک تابع بنویسید که اگر دیتابیستون توی این مسیرها نبود، دیتابیستون رو از توی پوشه asset کپی کنه توی این مسیرها ( که داخل گوشی هست )
ولی بازهم راحت ترین و بهترین کار استفاده از همون لایبری هست که آموزشش رو گذاشتم، لازم نیست تمام توابع رو دوباره نویسی کنید!!!
خوندن و نوشتن و تمام کارهای دیتابیس به همون صورت قبلی هست، تنها تفاوت توی مقدار دادن دیتابیس هست، شما همین رو تغییر بدید دیگه نیازی به تغییر بقیه جاها نیست که
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
اوکی بازم تشکر که جواب دادین،تلاشمو میکنم ببینم چی میشه...
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
برنامه من واسه cursor.getInt خطا میگیره چیکار کنم؟؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
antimat
برنامه من واسه cursor.getInt خطا میگیره چیکار کنم؟؟
لطفا کدتون و خطایی رو که میده بذارید، من اینطوری غیب گویی که نمیتونم بکنم
شاید اون داده ای که میخواین بگیرید از نوع int نیست یا توی ایندکس دادن دارید اشتباه میکنید
-
نقل قول: کار با دیتابیس آماده به آسانی با استفاده از لایبری sqlite asset helper
نقل قول:
نوشته شده توسط
poorman
آموزش کار با دیتابیس آماده SQLite
برای ساخت یک دیتابیس خارجی و آماده نرم افزار
SQLite Database Browser رو پیشنهاد میکنم
نمونه کار با دیتابیس آماده و نمایش و آپدیت اطلاعات دیتابیس رو از
این پست دریافت کنید
-----------------------------------------------------------------------------------------------
بالاخره من دیشب تونستم تمام مشکلات مربوط به دیتابیس آماده رو حل کنم و ارتباط خوبی برقرار کنم با لایبری
sqlite asset helper
( با تشکر از hamedjj به خاطر پافشاری روی استفاده از این لایبری )
ولی خب استفاده از این لایبری هم یکم برام گیج کننده بود که خدا رو شکر تونستم آخرش راه بندازمش
من یه توضیح میدم واسه کسایی که میخوان با دیتابیس آماده کار کنن و مثل من به مشکل خوردن
انصافا استفاده از sqlite asset helper راحته و بسیار کارا
یکی از مشکلاتی که من برخورد کردم توی استفاده از کلاس های دیگه، این بود که توی اندروید 10 به پایین دیتابیس رو ایجاد نمیکرد ولی این لایبری مشکل رو حل کرد
خب دوستانی که با اکلیپس کار میکنن این فایل jar رو دانلود کنن و توی پروژه مورد نظر در پوشه libs قرار بدن
لینک فایل jar
توی پوشهassets یک پوشه به اسم databases بسازید
بعد دیتابیس خودتون رو zip کنید ( فایل دیتابیس به تنهایی باید پسوند .db داشته باشه )
فایل زیپ شده رو با فرمت اسم ( DataBaseName.db.zip ) توی پوشه databases بذارید. ( دقت کنید باید هم پسوند db هم پسوند zip داشته باشه )
یعنی نمایش فایل زیپ توی ویندوز به صورت DataBaseName.db و نمایش توی اکلیپس به شکل DataBaseName.db.zip باشه
بعدش این کلاس رو ایجاد کنین
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "DataBaseName.db";
private static final int DATABASE_VERSION = 1;
public MyDatabase (Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}
توی کلاسی که ایجاد کردین اسم دیتابیس خودتون رو با پسوند db وارد کنین
بعدش توی اکتیویتی توی متغیرهای عمومی یک نمونه از این کلاس تعریف کنید، به این صورت :
private MyDatabase MyDataBase;
و بعد توی متد onCreate این خط کد رو بنویسین :
MyDataBase = new MyDatabase(this);
حالا هر جایی که خواستین دیتابیس رو باز کنین، میتونین از دو تا حالت getWritableDatabase() و getReadableDatabase() که برای خوندن و نوشتن هست استفاده کنین
به صورت زیر مثلا :
mydb = MyDataBase.getReadableDatabase();
وقتی getReadableDatabase استفاده میکنید، فقط عملیات خواندن رو میتونید انجام بدید
پس برای نوشتن یا آپدیت و دیلت باید از getWritableDatabase استفاده کنید
به همین سادگی، فقط باید تمام این مراحل رو به ترتیب و همینطور که گفتم انجام بدید که به مشکل نخورید
( zip کردن دیتابیس برای اینه که توی اندروید 10 به پایین خطا نگیرید )
آموزش کار با دیتابیس ( خواندن، نوشتن، آپدیت و دیلت ) توی همین تاپیک قرار داده شده
لطفا بعد از مطالعه درصورت وجود مشکل سوال بپرسید در خدمتم
----------------------------------------------------------------------------------------------
برای آپدیت کردن اطلاعات دیتابیس آماده به این پست مراجعه کنید
اگر مفید واقع شد، دکمه تشکر این پایینه :لبخند:
ممنون از آموزشتون، نسبت به اون چیزایه دیگه ای که دیدم خیلی ساده تر به نظر می رسه،
وقتی کد ها رو می نویسم به Sqlite assethelper گیر میده، فک کنم باید کلاسش ساخته بشه، و اگه باید ساخته بشه سوپرکلسش باید چی باشه؟
خیلی ممنون
-
نقل قول: کار با دیتابیس آماده به آسانی با استفاده از لایبری sqlite asset helper
نقل قول:
نوشته شده توسط
Pam.goudarzi
ممنون از آموزشتون، نسبت به اون چیزایه دیگه ای که دیدم خیلی ساده تر به نظر می رسه،
وقتی کد ها رو می نویسم به Sqlite assethelper گیر میده، فک کنم باید کلاسش ساخته بشه، و اگه باید ساخته بشه سوپرکلسش باید چی باشه؟
خیلی ممنون
خواهش میکنم، باید لایبری SQLite Asset Helper رو توی پوشه libs بریزید
تا کلاس از اون لایبری extend بشه
-
نقل قول: کار با دیتابیس آماده به آسانی با استفاده از لایبری sqlite asset helper
نقل قول:
نوشته شده توسط
poorman
توی کلاسی که ایجاد کردین اسم دیتابیس خودتون رو با پسوند db وارد کنین
بعدش توی اکتیویتی توی متغیرهای عمومی یک نمونه از این کلاس تعریف کنید، به این صورت :
private MyDatabase MyDataBase;
و بعد توی متد onCreate این خط کد رو بنویسین :
MyDataBase = new MyDatabase(this);
حالا هر جایی که خواستین دیتابیس رو باز کنین، میتونین از دو تا حالت getWritableDatabase() و getReadableDatabase() که برای خوندن و نوشتن هست استفاده کنین
به صورت زیر مثلا :
mydb = MyDataBase.getReadableDatabase();
وقتی getReadableDatabase استفاده میکنید، فقط عملیات خواندن رو میتونید انجام بدید
پس برای نوشتن یا آپدیت و دیلت باید از getWritableDatabase استفاده کنید
به همین سادگی، فقط باید تمام این مراحل رو به ترتیب و همینطور که گفتم انجام بدید که به مشکل نخورید
( zip کردن دیتابیس برای اینه که توی اندروید 10 به پایین خطا نگیرید )
آموزش کار با دیتابیس ( خواندن، نوشتن، آپدیت و دیلت ) توی همین تاپیک قرار داده شده
لطفا بعد از مطالعه درصورت وجود مشکل سوال بپرسید در خدمتم
----------------------------------------------------------------------------------------------
برای آپدیت کردن اطلاعات دیتابیس آماده به این پست مراجعه کنید
اگر مفید واقع شد، دکمه تشکر این پایینه :لبخند:
ببخشید ما تازه واردیم! اون جا که گفتین کلس رو ساختیم اسم دیتابیس رو تعریف کنم همین کلسیه که دیتابیس رو توش تعریف کردیم؟ چون که وقتی میخوام oncreate رو بزارم با ctrl+space متد نمیاد
(Bundle saved istance)
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
منظور سوالتون رو شاید درست متوجه نشده باشم
اسم دیتابیس رو توی کلاس MyDatabase بذارید، همون کلاسی که کدش رو گذاشتم
بعدش توی اکتیویتی تون از اون کلاس یک متغیر تعریف میکنید و دیتابیستون رو باهاش مقدار میدین
-
1 ضمیمه
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام من میخوام اطلاعات رو از جدولم بگیرم بریزم تو یه Cursor منتها ایراد میگیره
می تونید کمکم کنید با تشکر
Button btnsearch =(Button) findViewById(R.id.btnsearchs);
btnsearch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
EditText searchbtn =(EditText) findViewById(R.id.searchtxt);
String mean=DataBase.COLUMN_MEANS;
String table=DataBase.TABLE_DIC;
String word=DataBase.COLUMN_WORDS;
String txtword=searchbtn.getText().toString();
c = dbase.rawQuery("SELECT "+mean+" FROM "+ table +" WHERE "+word+" ='"+txtword+"'", null);
البته اینم خطاهای لوگ کت
ضمیمه 119456
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من الان متوجه نمیشم خطا از کجای کدتون هست، اما چیزی که مشخصه خطا از دیتابیستون نیست
اگر هم خطا از دیتابیستون باشه شاید قبلش دیتابیس رو مقدار ندادید و باز نکردید
احتمالات دیگه رو امتحان کنید، به جای اینکه مقدار رو از تکست ویو بگیرید و اسم ستون ها و جداول رو از کلاس database بگیرید، اینا رو خودتون توی کوئری تایپ کنید ببینید درست کار میکنه؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
با تشکر
اینکاری که گفتین انجام دادم
قبل کد هم دیتابیس رو باز کرده بودم و هم مقدار رو قبلش بهش داده بودم
منتها اررو میده
کد اپدیت هم همین ارور رو میده
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
بعد از اینکه اطلاعات رو میریزید داخل cursor چه کار میکنید ؟ کد اون قسمت مشکلی نداره ؟
قبل و بعد از کوئری توی یک logCat بذارید ببینید خطا دقیقا از کوئری تون هست یا قسمت های دیگه