-
نقل قول: آموزش : کار با دیتابیس 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 بذارید ببینید خطا دقیقا از کوئری تون هست یا قسمت های دیگه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
تشکر
فعلا فقط داخل Cursor میریزم وهیچ کاری باهاش نمی کنم ، ممکنه مشکل از اون باشه؟
اینیم که گفتین چک کردم
قبل کوئری لوگ داد
لوگ بعد کوئری رو نداد
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
پس تنها دلیلش میتونه این باشه که دیتابیس رو مقدار ندادین یا بازش نکردین
بهتره هرجایی که با دیتابیس کار دارین همونجا بازش کنین و بعد از تموم شدن کارتون اون رو ببندید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
آقا این کاری رو هم که گفتین انجام دادم نشد
مرسی از لطفتون که راهنماییم کردین
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
poorman جان اگه بخواهیم رو لیست ویو فیلتر بزاریم باید چیکار کنیم
مثلا بگیم اونایی که تو ستون favorite برابر yes هستند را نشان بده
همه را بخواهیم نشون بدیم که اینجوریه :
public void adaptList(Cursor sms) {
String[] array = new String[sms.getCount()];
int i = 0;
if (sms.moveToFirst()) {
do {
try {
array[i] = sms.getString(sms.getColumnIndex("rowid"));
i++;
} catch (Exception e) {
e.printStackTrace();
}
} while (sms.moveToNext());
}
listview = (ListView) findViewById(R.id.listpishvaz);
listview.setAdapter(new SmsListAdapter(this, array));
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
شما اگه بخوای خیلی ساده انجام بدی، این کار رو با کوئری میکنی به این صورت :
select * from yourTable where favorite = "yes"
و بعد اطلاعات رو میریزی توی آرایه و میدی به لیست
راههای سخت ترش میتونه این باشه که همین cursor که الان داری رو فیلتر کنی و بعد اطلاعاتش رو بریزی توی آرایه ( من فیلتر cursor رو کار نکردم )
راه دیگه میتونه این باشه که وقتی داری اطلاعات cursor رو میریزی توی آرایه، یک شرط بذاری که اگر مقدار cursor.getString(cursor.getColumnIndex("favorite") برابر yes بود اطلاعات رو بریزه توی آرایه
حالا دقیقا نمیدونم نیازت چیه و کجا میخوای این رو پیاده سازی کنی
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
همون روش اول که گفتی به جای کوئری زیر همونی گفتی را قرار میدیم ؟
MyDatabase myDatabase = new MyDatabase(this);
SQLiteDatabase mydb = myDatabase.getReadableDatabase();
Cursor sms = mydb.rawQuery("select rowid from sms" , null);
بعدش تو کد آرایه چیکار باید بکنیم :
public void adaptList(Cursor sms) {
String[] array = new String[sms.getCount()];
int i = 0;
if (sms.moveToFirst()) {
do {
try {
array[i] = sms.getString(sms.getColumnIndex("rowid"));
i++;
} catch (Exception e) {
e.printStackTrace();
}
} while (sms.moveToNext());
}
listview = (ListView) findViewById(R.id.listpishvaz);
listview.setAdapter(new SmsListAdapter(this, array));
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
آره کوئری رو با اون چیزی که گفتم عوض میکنی
توی کد آرایه لازم نیست چیزی رو تغییر خاصی بدی، همه چیز مثل قبل هست، فقط با این کوئری سطرهایی توی cursor ریخته میشن که favorite = "yes" باشه
البته من توی اون کوئری گفتم select * ، این یعنی تمام ستون ها رو برگردونه، اما شما هرچیزی که لازم داری رو بگو مثلا select rowid
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
آره کوئری رو با اون چیزی که گفتم عوض میکنی
توی کد آرایه لازم نیست چیزی رو تغییر خاصی بدی، همه چیز مثل قبل هست، فقط با این کوئری سطرهایی توی cursor ریخته میشن که favorite = "yes" باشه
البته من توی اون کوئری گفتم select * ، این یعنی تمام ستون ها رو برگردونه، اما شما هرچیزی که لازم داری رو بگو مثلا select rowid
دمت گرم ... حل شد
خیلی حال دادی
فدایی داری
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
میشه چندتا مورده استفاده خوب که واقعا استفاده از این خوبه رو بگید تا پروژه تون قشنگ برام جا بیوفته ؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
badname
میشه چندتا مورده استفاده خوب که واقعا استفاده از این خوبه رو بگید تا پروژه تون قشنگ برام جا بیوفته ؟
من متوجه سوالتون نشدم !!!
در مورد استفاده از چی دارید سوال میکنید ؟ دیتابیس ؟ یا لایبری SQLite asset helper ؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
من متوجه سوالتون نشدم !!!
در مورد استفاده از چی دارید سوال میکنید ؟ دیتابیس ؟ یا لایبری SQLite asset helper ؟
دقیقا دیتابیس :لبخندساده:
چون تاحالا استفاده نکردم برام جا نیوفتاده تو چه مواری استفاده میشه ازش
یسری نیاز های خاص همیشه باعث ایجاد پروژه میشن.
میخواستم موارد استفاده شو بدونم و اینکه چه نیاز هایی رو برطرف میکنه :لبخندساده:
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
دیتابیس یا به زبون خودمون پایگاه داده، واسه ذخیره اطلاعات زیاد و دسترسی بهشون و تغییر راحت اطلاعات استفاده میشه
به عنوان مثال اطلاعات کارمندان یک اداره رو میتونید توی دیتابیس ذخیره کنید که هم راحت بهش دسترسی داشته باشید و هم راحت بتونید اونا رو تغییر بدید یا حذف کنید
یا یک مثال خیلی ساده متن یک کتاب رو داخل دیتابیس بریزید، اینطوری علاوه بر نظم توی نگهداری اطلاعات، میتونید از قابلیت جستجو هم بهره ببرید
کلا فواید زیادی داره، یک پروژه بزرگ رو خیلی سخت میشه بدون دیتابیس پیاده سازی کرد
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
دیتابیس یا به زبون خودمون پایگاه داده، واسه ذخیره اطلاعات زیاد و دسترسی بهشون و تغییر راحت اطلاعات استفاده میشه
به عنوان مثال اطلاعات کارمندان یک اداره رو میتونید توی دیتابیس ذخیره کنید که هم راحت بهش دسترسی داشته باشید و هم راحت بتونید اونا رو تغییر بدید یا حذف کنید
یا یک مثال خیلی ساده متن یک کتاب رو داخل دیتابیس بریزید، اینطوری علاوه بر نظم توی نگهداری اطلاعات، میتونید از قابلیت جستجو هم بهره ببرید
کلا فواید زیادی داره، یک پروژه بزرگ رو خیلی سخت میشه بدون دیتابیس پیاده سازی کرد
خیلی جامع و کامل بود ، دیدم بازتر شد نسبت به قبل :لبخندساده:
این اطلاعات فقط از جنس متن میتونن باشن یا چیز دیگه ای ام میتونن باشن
مثلا تو همون اطلاعات کارمندان یه اداره میتونیم عکس کارمندامونم تو دیتابیس داشته باشیم ؟ یا صدا یا هر نوع ایتم دیگه ای ...
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
انواع زیادی از اطلاعات رو میشه توی دیتابیس ذخیره کرد
عکس به صورت بایت توی دیتابیس ذخیره میشه و میشه راحت ازش خوند
اطلاعات منطقی مثل true, false و بیشتر انواع داده رو میتونید توی دیتابیس ذخیره کنید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
دوستان من یه دیتابیس ساختم که 7تا تیبل داره.
میخوام هر کدوم از اونا رو داخل یه لیست ویو نمایش بدم.
میشه راهنماییم کنید از همون اول چکار کنم؟
من تازه کار هستم و با دیتابیس کار نکردم.تمام پستها رو هم خوندم اما بازم نتونستم پیاده سازی کنم.
لطفا راهنماییم کنید.متشکرم
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
narvanco
دوستان من یه دیتابیس ساختم که 7تا تیبل داره.
میخوام هر کدوم از اونا رو داخل یه لیست ویو نمایش بدم.
میشه راهنماییم کنید از همون اول چکار کنم؟
من تازه کار هستم و با دیتابیس کار نکردم.تمام پستها رو هم خوندم اما بازم نتونستم پیاده سازی کنم.
لطفا راهنماییم کنید.متشکرم
دوست عزیز شما توی کدوم قسمت مشکل دارید ؟
دیتابیستون آماده هست یا از طریق کد ساختید ؟
تا حالا با لیست ویو کار کردید ؟
اگر با لیست ویو کار کردید، توی پست اول، قسمت خواندن اطلاعات، من توضیح دادم که چطور اطلاعات رو از یک تیبل داخل آرایه بریزید، بعد از اینکه شما اطلاعات رو داخل آرایه ریختید خیلی راحت اونا رو میفرستید به آداپتر لیست ویو خودتون و نمایش میدید
میتونید از نمونه برنامه های آماده هم استفاده کنید تا کمک بگیرید برای پروژتون
https://barnamenevis.org/showthread.p...=1#post2016418
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
ممنونم از توجهتون
بله دیتابیسم آمادست
مشکل من اینه که واسه 7تا تیبل نمیدونم باید چجوری بیارم؟
بله قبل از اینکه سوالمو مطرح کنم این نمونه رو گرفتم.اما اونم فقط یک تیبل داره و نتونستم مشکلمو باهاش رفع کنم.
واسه اینکه 7تا تیبل دارم باید اونا رو چطور فراخوانی کنم؟
بله با لیست ویو کار کردم اما تا الان با آرایه لیست ویومو پر میکردم.
این هم همینطور پر میشه؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
شما میخواین اطلاعات هر 7 تا تیبل رو با هم بریزید توی لیست ویو ؟ یا اینکه هر کدوم رو توی یک اکتیویتی و یک لیست ویو جدا نمایش بدید ؟
اگر میخواین هرکدوم رو جدا نمایش بدید که کار مثل قبله و هیچ فرقی نداره، فقط باید اسم تیبل عوض شه
اگر میخواین همه رو با هم نمایش بدید، شما باید این کار رو برای هر تیبل انجام بدید اما به این دلیل که شما ممکنه ندونید چقدر اطلاعات دارید که فضای مشخصی از آرایه رو بهش اختصاص بدید
بهتره ابتدا اطلاعات رو داخل arrayList بریزید، یعنی ابتدا واسه تیبل اول کوئری مینویسید و اطلاعاتش رو داخل arrayList اضافه میکنید، بعد دوباره برای تیبل دوم همینکار رو میکنید و تا تیبل آخر
حالا arrayList شما حاوی اطلاعاتتون هست، آرایه خودتون رو براساس سایز arrayList دوباره سازی کنید و اطلاعات رو از arrayList بریزید داخل آرایه ( توسط یک حلقه )
البته اگر شما کار با کاستوم آداپتر لیست ویو رو یاد دارید میتونید با انجام یکسری تغییرات به جای اینکه ورودی آداپترتون آرایه باشه، همون arrayList رو مستقیم بفرستید به آداپتر و از انجام محاسبات اضافی پیشگیری کنید
---------------------------------------------------------------
برای توضیح بیشتر بهتره بگم که آرایه نیاز داره که فضای مشخصی داشته باشه و وقتی فضاش مشخص شد نمیتونیم بیشتر از اون مقدار بدیم بهش
اما arrayList یک نوع آرایه بدون محدودیت فضاست، ما میتونیم بدون مشخص کردن تعداد خونه ها، هر اندازه که خواستیم به اون اضافه کنیم و البته یکسری قابلیت های خوب دیگه هم داره
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
خیلی خیلی ممنونم از وقتی که میزارید.
بله هر تیبل توی یه لیست جداگانه نمایش داده میشه.
پس فقط لازمه توی هر اکتیویتی نام جدول رو تغییر بدم؟درسته؟ با توجه به اینکه ستونهای تیبلها یک نوع هستند.
انشاالله شروع میکنم و دوباره میسازم.قبلا که چندبار ساختم نشد.یه بار صفحه اومد اما اطلاعات رو از دیتابیس نخوند و بار دوم هم که اصلا تا اکتیویتی میخواد بیاد بسته میشه D:
ممنونم از وقتی که گذاشتید.
در ضمن آقا ، هم شهری هم هستیماا!!
موفق باشید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
آقا عذر میخوام یه سوال دیگه
ببخشید
این نام دیتابیس منظور چیه؟
توی ساخت دیتابیس بهش دادیم؟ یا یک نامی که تو کلاس دیتابیس میسازیم و اصلا ربطی به اون نامی که موقع ساختن دیتابیس آماده دادیم نداره؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
شما اگه از دیتابیس آماده استفاده میکنید، توی پست اول فقط از قسمت وارد کردن اطلاعات در جدول به بعد استفاده کنید
چون قبل از اون دارم ساخت دیتابیس داخل خود اکلیپس و باز کردنش رو توضیح میدم
توی دیتابیس آماده اسم فایلتون رو که با پسوند .db.zip تعریف میکنید و توی کلاس دیتابیس هم اسم رو با پسوند .db مینویسید، بعد از انجام اینکارا، شما دیگه هیچ کاری با اسم دیتابیس ندارید
فقط توی اکتیویتی میگید mydb = mydatabase.getReadable
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
ممنونم از لطفتون.بزرگواری کردید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
اگه ممکنه یه تکه کد بزارید که من چطوری اطلاعات cursor رو تو listview نشون بدم -- مثال کامل نمیخوام چون تو مثال کامل هر کسی از روش خودش همه جای برنامه رو تغییر داده و این منو گیج میکنه -- مرسی
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
ebrahim1988
اگه ممکنه یه تکه کد بزارید که من چطوری اطلاعات cursor رو تو listview نشون بدم -- مثال کامل نمیخوام چون تو مثال کامل هر کسی از روش خودش همه جای برنامه رو تغییر داده و این منو گیج میکنه -- مرسی
این چیزی که شما میخواید اگر یک لیست با یک آیتم تکس ( لیست ساده ) باشه مشکلی نیست، اما اگر مثال یک لیست ویو کاستوم رو میخواین کدهاش یک تکه نیست، 2 تا کلاس و xml هست و راهی نیست جز اینکه از مثال های آماده استفاده کنید
توی یک لیست ساده میشه با 4 تا خط کد لیست رو پیاده سازی کرد، اما توی لیست ویو کاستوم شما باید یک کلاس آداپتر داشته باشید و اونجا آیتم های لیست رو مقدار بدید
مثال های آماده رو اگر سعی کنید قشنگ آنالیز کنید گیج نمیشید، فقط باید یکم وقت بذارید دیگه
من یک مثال خیلی ساده میذارم اینجا امیدوارم کمک کنه، این مثال از جدول شما اطلاعات ستون اول رو میخونه و داخل لیست نمایش میده
import android.app.Activity;import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class mesal_list extends Activity {
ListView listView ;
SQLiteDatabase mydb;
private static String DBNAME = "PERSONS"; // اگر دیتابیس رو داخل اکلیپس ساختید اسمش رو اینجا مشخص کنید
private static String TABLE = "MY_TABLE"; // THIS IS THE TABLE NAME
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
listView = (ListView) findViewById(R.id.listView1);
// اگر دیتابیس رو داخل اکلیپس ساختید از این روش شیء دیتابیس رو مقدار بدید
mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
// اگر دیتابیستون آماده هست از روش های گفته شده در قسمت دیتابیس آماده استفاده کنید
// اینجا تمام اطلاعات رو از جدول میخونیم
// این کوئری میتونه بر اساس نیاز شما تغییر پیدا کنه
// میتونید تنها ستونهای مورد نظرتون رو انتخاب کنید یا با گذاشتن شرط فقط سطرهای واجد شرط رو انتخاب کنید
Cursor allrows = mydb.rawQuery("SELECT * FROM "+ TABLE, null);
String[] NAME = new String[allrows.getCount()];
int i = 0;
if(allrows.moveToFirst()){
do{
// اینجا فقط اطلاعات ستون اول خوانده میشود
// بر اساس نیاز شماره داخل تابع گت استرینگ را تغییر دهید
NAME[i] = allrows.getString(0);
i++;
}
while(allrows.moveToNext());
}
allrows.close();
mydb.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, NAME);
listView.setAdapter(adapter);
}
}
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
آقای poorman ؟
میشه تقاضا کنم اگه ممکنه یه نمونه برنامه از دیتابیس که 2تا جدول داره و محتویات یک ستون آنها در لیست ویو فراخوانی میکنه در دو صفحه رو معرفی کنید یا در صورت امکان خودتون لطف کنید.چند هفته است نمیتونم انجامش بدم.خیلی ضروریه.
فکر میکنم سوال خیلی از دوستان دیگمون هم باشه
خیلی ممنونم ازتون
خدا به علم شما برکت بیش از این بده
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
narvanco
آقای poorman ؟
میشه تقاضا کنم اگه ممکنه یه نمونه برنامه از دیتابیس که 2تا جدول داره و محتویات یک ستون آنها در لیست ویو فراخوانی میکنه در دو صفحه رو معرفی کنید یا در صورت امکان خودتون لطف کنید.چند هفته است نمیتونم انجامش بدم.خیلی ضروریه.
فکر میکنم سوال خیلی از دوستان دیگمون هم باشه
خیلی ممنونم ازتون
خدا به علم شما برکت بیش از این بده
والا من خیلی درگیرم، شما لطف کنید یک پروژه نمونه بسازید از چیزی که میخواین و تا جایی که تونستید پیاده سازی کنید
پروژه رو بذارید اینجا تا من اشکالاتش رو رفع کنم، هم به شما کمک بشه، هم به بقیه دوستان اگر چنین مشکلی دارن
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام poorman جان
من میخوام رو یه پروژه پیامک کار کنم
میخواستم بدونم دیتابیس را باید چطوری بسازم؟
مثلا 10 تا table (برای هر موضوع یکی)درست کنم که تو هر table یه ستون متن و یه ستون علاقه مندی ها بزارم ؟
یا اینکه باید یه table درست کنم در 20 تا ستون توش بزارم و هر دو ستون یکی موضوع پیامک و دیگری علاقه مندی برای اون موضوع؟
کدومش درسته؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
hamedjj
سلام
poorman جان
من میخوام رو یه پروژه پیامک کار کنم
میخواستم بدونم دیتابیس را باید چطوری بسازم؟
مثلا 10 تا table (برای هر موضوع یکی)درست کنم که تو هر table یه ستون متن و یه ستون علاقه مندی ها بزارم ؟
یا اینکه باید یه table درست کنم در 20 تا ستون توش بزارم و هر دو ستون یکی موضوع پیامک و دیگری علاقه مندی برای اون موضوع؟
کدومش درسته؟
سلام
اول بذار تشکر کنم که اومدی پرسیدی، چون من یک برنامه توی بازار دیدم که بنده خدا سازندش واقعا معماری خنده داری واسه دیتابیسش داشت
یک کتاب بود با 15 تا فصل، این اومده بود 15 تا ستون گذاشته بود واسه هرفصل یک ستون، بعد اینا رو مقدار داده بود و ...
البته اینو بگم من اصلا توی دیتابیس خودم رو حرفه ای نمیدونم
حالا بیخیال
آقا برنامه پیامک شما اگر تعداد رکوردهات زیاد هست، یعنی 30-40 هزار تا پیامک داری، از نظر سرعت در سرچ و ... با فرض اینکه 20 موضوع داری، بهتره که 20 تا تیبل داشته باشی
اگر تعداد کمه یا به هر دلیلی حال و حوصله نداری، شما دو تا تیبل میسازی، توی یکی از شماره 1 تا 20 موضوعات رو وارد میکنی ( دو تا ستون، یکی آیدی، یکی اسم موضوع)
توی جدول دوم که پیامک هات رو وارد میکنی، یک ستون میذاری واسه موضوع، بعد هر پیامک رو میگی موضوعش شماره چنده
توی برنامه هم خیلی راحت select میکنی رکوردهایی رو که موضوعشون شماره فلان هست
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
پس همون روش اولو درست میکنم چون 10000 تا هست.
یه سوال دیگه اینه که خوب تو صفحه اصلی یه لیست ویو داریم که نام موضوعات را توش قرار میدیم
تو کلاس دوم هم که لیست پیامک ها با کلیک روی آیتم های لیست میاد
کلاس دوم که لیست پیام ها توش هست یه کلاس arrayadapter هم کنار خودش داره
چطور باید این table ها را در این کلاس معرفی کنم
تو لیست موضوعات که خو میدونم با putExtra مقداری از اکتیویتی اول به دوم میفرستی و در دومی دریافت میکنی که اگه اولی کلیک شد اینو نشون بده یا دومی اینو و...
ولی دیتابیس ما در کلاس array adapter معرفی میشه که در لیست ویو کلاس دیگری نمایش داده میشه
متد بالا هم که گفتم مقدار داده را به کلاسی که در اینتنت معرفی میکنی میفرسته
اینو باید چیکار کنیم؟
یعنی :
Intent intent = new Intent(this, SmsList.class);
intent.putExtra("button", 101);
startActivity(intent);
و تو کلاس adapter یک table را تعریف کردیم
Cursor cur = mydb.rawQuery("SELECT rowid,matn,favorite FROM sms WHERE rowid='"+values[position]+"'", null);
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من که نفهمیدم چی سوال کردی :لبخند:
الان کل مشکلت اینه که چطور به کلاس آداپتر لیست ویو بفهمونی داره با کدوم تیبل کار میکنه ؟
یک متغیر جهانی بذار، هر آیتمی که انتخاب شد، موقعیتش رو توی اون ذخیره کن
توی کلاس آداپتر هم اون موقعیت رو بگیر
درست فهمیدم سوالت رو یا نه ؟؟؟