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

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

[shcode=java][/shcode]

سلام

کدتونو بذارین تست کنیم

این کد منه

لطف بزرگی میکنین

فایل زیپ پروژه هم گداشتم.

package com.example.database;

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.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseManager extends SQLiteOpenHelper {
   String DB_PATH = null;
   public static String DB_NAME = "newdb";
   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 DatabaseManager(Context context) {

       super(context, DB_NAME, null, 2);
       this.myContext = context;
       DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/";
   }

   public void createDataBase() throws IOException {

       boolean dbExist = checkDataBase();

       if (dbExist) {
          
       } else {

           
           // database with our database.
           this.getReadableDatabase();

           try {

               copyDataBase();

           } catch (IOException e) {

               throw new Error("Error copying database");

           }
       }

   }
    
   private boolean checkDataBase() {

       SQLiteDatabase checkDB = null;

       try {
           String myPath = DB_PATH + DB_NAME;
           checkDB = SQLiteDatabase.openDatabase(myPath, null,
                   SQLiteDatabase.OPEN_READONLY);

       } catch (SQLiteException e) {

           

       }

       if (checkDB != null) {

           checkDB.close();

       }

       return checkDB != null ? true : false;
   }
   private void copyDataBase() throws IOException {

       
       InputStream myInput = myContext.getAssets().open("mydb");

       // 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;
       // SQLiteDatabase.NO_LOCALIZED_COLLATORS
       myDataBase = SQLiteDatabase.openDatabase(myPath, null,
               SQLiteDatabase.OPEN_READONLY
                       | SQLiteDatabase.NO_LOCALIZED_COLLATORS
                       | SQLiteDatabase.CREATE_IF_NECESSARY);

   }

   @Override
   public synchronized void close() {

       if (myDataBase != null)
           myDataBase.close();

       super.close();

   }

   // return cursor
   public Cursor query(String table, String[] columns, String selection,
           String[] selectionArgs, String groupBy, String having,
           String orderBy) {
       return myDataBase.query("pwp_singers", null, null, null, null, null,
               null);

   }

   @Override
   public void onCreate(SQLiteDatabase arg0) {
       // TODO Auto-generated method stub
        
   }

   @Override
   public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
       // TODO Auto-generated method stub
        
   }
   public Neveshte getMatn(int id)
   {
   	Neveshte neveshte =new Neveshte();
   	
   	try
   	{
   	String query="SELECT * FROM tbl1 WHERE id = " + id;
   	SQLiteDatabase db = this.getReadableDatabase();
   	Cursor cursor=db.rawQuery(query, null);
   	if(cursor.moveToFirst()==true)
   	{
   		neveshte.matn=cursor.getString(1);
   		
   	}
   }
   	catch (Exception ex) {
		neveshte =null;
	}
   		return neveshte;
   	
   	}

}


Database.zip

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • پاسخ 80
  • ایجاد شد
  • آخرین پاسخ

بهترین ارسال کنندگان این موضوع

بهترین ارسال کنندگان این موضوع

پست های محبوب

توی این پست میخوایم طریقه کار با دیتابیس خارجی رو اموزش بدیم. برای این کار با نرم افزار SQLite Expert Personal یا هر نرم افزاری که راحت بودین دیتابیس و درست می کنیم. توی این برنامه دیتابیس E

تصاویر ارسال شده

والا من گیج شدم اسم دیتابیستون چیه؟!

توی خط پایین یه اسم گفتین

   public static String DB_NAME = "newdb";

این قسمت یه چیز دیگه open کردین

InputStream myInput = myContext.getAssets().open("mydb");

فایل اصلی رو بگیرین فقط اسم دیتابیس خودتونو بذارین بقیه ش لازم نیست تغییر کنه

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

والا من گیج شدم اسم دیتابیستون چیه؟!

توی خط پایین یه اسم گفتین

   public static String DB_NAME = "newdb";

این قسمت یه چیز دیگه open کردین

InputStream myInput = myContext.getAssets().open("mydb");

فایل اصلی رو بگیرین فقط اسم دیتابیس خودتونو بذارین بقیه ش لازم نیست تغییر کنه

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

بازم ارور runtime میده.

اگه میشه شما فایل پروژه رو دانلود کنید ببینید.

ممنون

Database.zip

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

سلام من میخوام واسه نرم افزارم یک منو تنظیمات بنویسم.

یک اکتیویتی واسش ساختم و یک سیک بار واسه تغییر اندازه فونت.

میخوام هر بار که فونت تغییر میکنه مقدار فونت با زدن یه دگمه در

SharedPreferences ذخیره شه

باید چیکار کنم؟

اگه کد بذارین ممنون میشم

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

سلام دوستان خسته نباشید

من طبق این آموزش پیش رفتم و تونستم مطالب دیتابیسمو نمایش بده ولی مشکلم اینجاست داخل این آموزش یه تکست ویو هست که مطالب یک کوئری رو نمایش میده ولی من میخوام دوتا تکست ویو کنار هم دیگه باشن که هرکدوم مطالب کوئریهای متفاوتی رو نشون بده 

سوالم اینه برای اینکار باید گوئری دوم رو کجا تعریف کنم و چگونه با تکست ویو ست کنم؟

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

سلام دوستان خسته نباشید

من طبق این آموزش پیش رفتم و تونستم مطالب دیتابیسمو نمایش بده ولی مشکلم اینجاست داخل این آموزش یه تکست ویو هست که مطالب یک کوئری رو نمایش میده ولی من میخوام دوتا تکست ویو کنار هم دیگه باشن که هرکدوم مطالب کوئریهای متفاوتی رو نشون بده 

سوالم اینه برای اینکار باید گوئری دوم رو کجا تعریف کنم و چگونه با تکست ویو ست کنم؟

خب شما تو کلاس database هر کوئری رو به صورت یک funcation مینویسید.پس یه تابع دیگه واسه کوئری دوم بسازید.


از این نمونه کد استفاده کنید.

 اینجا کلیک کنید

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

سلام دوستان خسته نباشید

من طبق این آموزش پیش رفتم و تونستم مطالب دیتابیسمو نمایش بده ولی مشکلم اینجاست داخل این آموزش یه تکست ویو هست که مطالب یک کوئری رو نمایش میده ولی من میخوام دوتا تکست ویو کنار هم دیگه باشن که هرکدوم مطالب کوئریهای متفاوتی رو نشون بده 

سوالم اینه برای اینکار باید گوئری دوم رو کجا تعریف کنم و چگونه با تکست ویو ست کنم؟

کسی نبود جواب این سوالو بده؟؟؟؟:S

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

باید از کاستوم لیست ویو استفاده کنی.خودت یادش بگیری مفهمی چه کنی

منم از کاستوم لیست ویو استفاده میکنم

ولی میخوام یه تکست ویو ی کوئری بخونه و تکست ویو بعدیم کوئری دیگه ای رو بخونه

ولی نمیدونم که کوئری دوم رو کجا تعریف کنم

ممنون میشم کمکم کنید

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

سلام من میخوام واسه نرم افزارم یک منو تنظیمات بنویسم.

یک اکتیویتی واسش ساختم و یک سیک بار واسه تغییر اندازه فونت.

میخوام هر بار که فونت تغییر میکنه مقدار فونت با زدن یه دگمه در

SharedPreferences ذخیره شه

باید چیکار کنم؟

اگه کد بذارین ممنون میشم

بهتره که از کلاس sharedpreferences استفاده کنی. آموزشش تو این تاپیکه: آموزش استفاده از کلاس sharedpreferences

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

همونجا بعد از گرفتن اطلاعات کوئری اول بنوبسید

ممنون میشم اگه نمونه سورسی دارین بزارین

والا سورس به این صورت ندارم.اما چرا همون یک بار که کویری میزنی پر نمی کنی لیست رو.حتما ایتم ها مرتبط اند که در یک ایتم لیست نمایش داده می شوند.خوب توی یک تیبل بنویسشون و خودتو راحت کن . البته هرکدوم توی ستون خودش و برای یک رکورد خاص.

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

اتصال دیتابیس خارجی در اندروید استودیو دقیقا مشابه ایکلیپسه. آموزشش تو انجمن هست.

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

اتصال دیتابیس خارجی در اندروید استودیو دقیقا مشابه ایکلیپسه. آموزشش تو انجمن هست.

میشه لینک اموزشش رو برام بفرستید ، من پیدا نکردم .

همینم سعی کردم در اندروید استادیو پیاده سازی کنم اما نشد.

و یه سوال دیگه دوستان : پسوند دیتابیسمون که در پوشه assest  قرار می دهیم باید .db  باشه دیگه ؟

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

همین تاپیک بهترین آموزش انجمنه. اگه آموزش رو درست پیاده کنید حتما به نتیجه می رسید.

در مورد دیتابیس هم نیازی به پسوند نیست. خود sqlite موقع ایجاد دیتابیس، براش پسوند لحاظ می کنه.

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

همین تاپیک بهترین آموزش انجمنه. اگه آموزش رو درست پیاده کنید حتما به نتیجه می رسید.

در مورد دیتابیس هم نیازی به پسوند نیست. خود sqlite موقع ایجاد دیتابیس، براش پسوند لحاظ می کنه.

من همین کد رو در اندروید استادیو تست کردم جواب نداد؟

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

من برنامه ای نوشتم هر چی که توی این تاپیک گفته شد رو انجام دادم

ولی وقتی به ص مورد نظر می رم فورس کلوز میشه چکارکنم؟

فکر کنم خطای برنامه اینجاست : 

        Cursor    c = db.rawQuery("select * from listplayer", null);
           data = new ArrayList>();

 یعنی دیتا بیس برنامه کپی نشده؟

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

سلام من یک دیتابیس خارجی دارم با این فیلدها:

do.php?img=791

در کلاس دیتابیس هم برای گرفتن عکسها از این متد استفاده کردم:

[shcode=java]public byte[] getpic(int id) {

        Cursor cu = mydb.rawQuery("select * from content where ID= " + id, null);

        cu.moveToFirst();

        byte s[] = cu.getBlob(5);

        return s;

    }[/shcode]

و در کلاس نمایش متن و عکس هم :

[shcode=java]package com;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.widget.ImageView;

import android.widget.TextView;

public class main_matn extends Activity {

    private database  db;

    private String    sea;

    private String    name;

    private int       id;

    private TextView  matn;

    private ImageView img;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main_matn);

        db = new database(this);

        matn = (TextView) findViewById(R.id.main_matn_matn);

        img = (ImageView) findViewById(R.id.imageView1);

        Bundle ex = getIntent().getExtras();

        sea = ex.getString("sea");

        name = ex.getString("name");

        load(sea, name, id);

    }

    private void load(String sea, String Name, int id) {

        db.open();

        matn.setText(db.main_display("content", sea, Name, id + ""));

        byte[] p = db.getpic(id);

        Bitmap bm = BitmapFactory.decodeByteArray(p, 0, p.length);

        img.setImageBitmap(bm);

        db.close();

    }

}

[/shcode]

ولی نمیدونم id عکس رو چظور وارد کنم؟ اگر ممکنه راهنماییم کنید.

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

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.SQLiteOpenHelper;

public class database extends SQLiteOpenHelper{

public String path="data/data/com.example.book/databases/";
public final String Name="database";
public SQLiteDatabase mydb;
private final Context mycontext;

public database(Context context){
	super(context,"databases",null,1);
	mycontext=context;
}
@Override
public void onCreate(SQLiteDatabase arg0){

}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2){

}

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_READONLY);
}
@Override
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 namayesh(int raw,int fild,String table){

	android.database.Cursor cursor=mydb.rawQuery(" select * from  "+table, null);
	cursor.moveToPosition(raw);

	String str=cursor.getString(fild);

	return str;


}



}

سلام

این کد یه کلاس مربوط به دیتا بیس خارجی هست

ولی متاسفانه برای من همش ارور میده!

دوستان اگه کدو بررسی کنن و عیبشو بگن ممنون میشم....

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

عجبا

حتی سورس پست شماره یک هم که وارد اکلیپس کردم ارور در زمان اجرا میده! (فایل زیپ رو دانلود کردم و سورس رو ایمپورت کردم)

یعنی مشکل از کجاس؟؟؟؟

unfortunately ExternalDatabase has stoped

اکلیپسم خرابه؟ شبیه ساز خرابه؟ یا...؟؟؟؟

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

عجبا

حتی سورس پست شماره یک هم که وارد اکلیپس کردم ارور در زمان اجرا میده! (فایل زیپ رو دانلود کردم و سورس رو ایمپورت کردم)

یعنی مشکل از کجاس؟؟؟؟

unfortunately ExternalDatabase has stoped

اکلیپسم خرابه؟ شبیه ساز خرابه؟ یا...؟؟؟؟

چ راهنمایی هایی!!!!!!!

خودم فهمیدم ایراد از کجاس، راه حلو اینجا میگم اگ در اینده یکی مث من گیر افتاد ...

مشکل از اینجاس که در استفاده از دیتابیس خارجی، ابتدا فایل دیتا بیس از پوشه aaset  به پوشه root/data/data/packagename/databases  کپی میشه

یعنی به محض اجرای برنامه این عملیات کپی پیست اجرا میشه

در اپدیتهای بعدی، اگه دیتا بیس رو دستکاری کنید، {سطری یا ستونی تغییر کنه یا اضافه بشه} چون بمحض اجرای کلاس دیتابیس، اول مسیر چک میشه و اگه دیتا بیس با اسم مورد نظر موجود نبود،سپس کپی میکنه، و چون دیتا بیس قبلی هستش، لذا عملیات کپی اتفاق نمی افته و همین اپدیت نشدن فایل دیتا بیس در حافظه گوشی، با عملیاتهای کلاس دیتا بیس که تغییرش دادیم باعث ناهماهنگی میشه و ارور میده!

چند راه حل وجود داره:

1-هربار برنامه رو تست میکنید یا اپدیت براش تولید میکنید ابتدا باید ورژن قبلی رو پاک کنید و سپس ورژن جدید رو نصب کنید.

2-استفاده از توابع فایلینگ برای بررسی مسیر فایل دیتا بیس، که اگه ورژن قبلی موجود بود پاک بشه سپس ورژن جدید کپی بشه!

3-استفاده از نام جدید برای دیتا بیس، اما این روش بهینه نیست، چون باعث تکثر میشه! {یعنی با هراپدیت برنامه،یه فایل جدید در پوشه بوجود میادو این باعث هدررفت فضا میشه!}

بهترین راه حل،استفاده از توابع فایلینگ هستش...

موفق باشید

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

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

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

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

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

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

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

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

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

  • مطالب مشابه

    • توسط razzagh2826
      بببخشید شما یه اموزش تو انجمن گذاشته بودید برای دیتا بیس این قسمت اخرش رو ننوشته بودن میتونید یه راهنمایی کنید
      تو عکس زیر ببینید
       


    • توسط mohammadreza2012
      سلام دوستان .
      من میخوام یه برنامه خبری بنویسم .
      مثلا پست بذارم که شامل عکس و اینچیزا باشه .
      و میخوام دیتابیس رو سرور باشه و از طریق گوشی بهش دسترسی داشته باشم .
      لطفا کمک کنید که چجوری میشه ساختش .
      این اموزشای توی اینترنت هم که نفهمیدم چی شد .
      خواهش میکنم کمک کنید
       
    • توسط Majid Ebrahimi
      برای اینکار دو روش وجود دارد:
      1- اینکه عکس را در دیتابیس ذخیره وسپس در برنامه نمایش دهیم.
      2-اینکه نام عکس را در دیتابیس ذخیره و خود تصاویر را در پوشه ریسورس برنامه مثلا در drawable ذخیره و سپس با توجه به نام آن تصویر را در ایمیج ویو لود کنیم.
      ما روش دوم را در این اموزش بررسی خواهیم کرد.
      به کد زیر توجه کنید: ImageView img; Database myDbHelper; SQLiteDatabase db; img = (ImageView) findViewById(R.id.imageView1); db = myDbHelper.getWritableDatabase(); String s = getIntent().getStringExtra("id"); Cursor c = db.rawQuery("select * from student where stu_id = " + id, null); if (c.moveToNext()) { img_name = c.getString(c.getColumnIndex("img")); Log.d("img", img_name); String uri = "drawable/" + img_name; // int imageResource = R.drawable.icon; int imageResource = getResources().getIdentifier(uri, null, getPackageName()); Drawable image = getResources().getDrawable(imageResource); img.setImageDrawable(image); } همانطور که مشخص است بعد از زدن یک کوئری در دیتابیس نام تصویر مربوط به دانشجوی مورد نظر را گرفته و سپس id ایمیج مورد نظر را در ریسورس های برنامه به دست آورده و آن را در ایمیج ویو نشان می دهد.
      امیدوارم این آموزش مقبول افتد.
    • توسط Farzad Sarseifi
      در این تاپیک بنا به درخواستی از کاربران محترم انجمن پی سی دروید که خواستار ، قرار دادن لینک دانلود برنامه SqliteAdmin میباشد،را قرار میدهیم.

       
      sqliteadmin.zip
      sqliteadmin.zip
       
       
    • توسط Farzad Sarseifi
      یکی از کارهایی که برای مدیریت دیتابیس برای برنامه نویسان اندروید الزام میباشد تبدیل دیتابیس ها به دیگر دیتابیس های دیگر میباشد مثلا mysql به sqlite و ....
      برای تبدیل دیتابیس های دیگر به sqlite که نیاز برنامه نویسان میباشد ابزاری را معرفی میکنیم که توانایی این را دارد که دیتابیس های mysql، Oracle،Postgresql را به Sqlite تبدیل کند.
      برای دریافت این نرم افزار به آدرس زیر مراجعه نمایید:
      http://www.sqlabs.com/sqliteconverter.php    

       
       

       
       
       
  • فایل


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