Soru & Cevap

Dışarıdan Sqlite ile veri çekerken sıkıntı yaşıyorum(yardım)

19.01.2016 - 03:18

Dışarıdan oluşturuduğum veritabanını listview de yazdırmak istiyorum, E/SQLiteLog: (1) no such table:student hatası alıyorum.

public class DatabaseHelper  extends SQLiteOpenHelper
{
    static String DB_PATH;
    //Veritabanı ismini veriyoruz
    static String DB_NAME = "School";

    SQLiteDatabase myDatabase;

    final Context myContext;

    public DatabaseHelper(Context context)
    {
        super(context, DB_NAME, null, 1);

        DB_PATH = context.getFilesDir().getParent() + "/databases/";

        this.myContext = context;
    }
   
    public void CreateDataBase()
    {
        boolean dbExists = checkDataBase();

        if (!dbExists)
        {
            this.getReadableDatabase();

            try
            {
                copyDataBase();
            }
            catch (Exception ex)
            {
                Log.w("hata","Veritabanı kopyalanamıyor");
                throw new Error("Veritabanı kopyalanamıyor.");
            }
        }
    }
  
    boolean checkDataBase()
    {
        SQLiteDatabase checkDB = null;

        try
        {
            String myPath = DB_PATH + DB_NAME;

            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
        }
        catch (Exception ex)
        {
            Log.w("hata","Veritabanı açılamadı");
        }

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

        return checkDB != null ? true : false;
    }
   
    void copyDataBase()
    {
        try
        {
            InputStream myInput = myContext.getAssets().open(DB_NAME);

            String outFileName = DB_PATH + DB_NAME;

            OutputStream myOutput = new FileOutputStream(outFileName);

            byte[] buffer = new byte[1024];

            int length;

            while ((length = myInput.read(buffer)) > 0)
            {
                myOutput.write(buffer, 0, length);
            }

            myOutput.flush();

            myInput.close();
            myOutput.close();
        }
        catch (Exception ex)
        {
            Log.w("hata", "Kopya oluşturma hatası.");
        }
    }
    

    void openDataBase()
    {
        String myPath = DB_PATH + DB_NAME;

        myDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    }

    @Override
    public synchronized void close()
    {
        if (myDatabase != null && myDatabase.isOpen())
            myDatabase.close();

        super.close();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

 

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       
        DatabaseHelper dbHelper=new DatabaseHelper(this);
        try
        {
            dbHelper.CreateDataBase();

        }
        catch (Exception ex)
        {
            Log.w("hata","Veritabanı oluşturulamadı ve kopyalanamadı!");
        }



        SQLiteDatabase db=dbHelper.getReadableDatabase();
        String[] getColumnName={"student_name,student_surname"};
        Cursor imlec=db.query("student", getColumnName, null, null, null, null, null);
        ListView listview=(ListView)findViewById(R.id.listview);
        ArrayList<String> student=new ArrayList<String>();
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,student);

        while(imlec.moveToNext()){
            String student_name=imlec.getString(imlec.getColumnIndex("student_name"));
            String student_surname=imlec.getString(imlec.getColumnIndex("student_surname"));
            String name_surname= student_name+ " "+student_surname;
            student.add(name_surname);

        }
        listview.setAdapter(adapter);
        imlec.close();
        db.close();

    }


}

 

140 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-10101-1474638815.jpg
erdema
19.01.2016 - 08:32

Paylaştığın kodda herhangi bir "CREATE TABLE" komutu göremedim. Tabloyu oluşturduğuna emin misin ?

DatabaseHelper classındaki onCreate methoduna

db.execSQL("CREATE TABLE TABLOADI(COLON_1 TYPE, COLON_2 TYPE,..., COLON_N TYPE)"); 

satırını gerekli düzenlemeleri yaparak eklemen yeterli oalcaktır. Bu arada bu satırı try/catch bloğu içerisine almanı da tavsiye ederim.

picture-35351-1469628490.jpg
cbaldemir
19.01.2016 - 12:57

Dediğinizi yaptım ancak aynı hatayı almaya devam ediyorum.

picture-25822-1406167971.jpg
mumin.gok.16
19.01.2016 - 07:43

MainActivity sınıfında oluşturduğun database açmamışsın bu şekilde açman lazım o yüzden tabloyu bulamıyor

DatabaseHelper dbHelper=new DatabaseHelper(this);

try {

dbHelper.CreateDataBase();

dbHelper.openDataBase();

}

catch (Exception ex) { Log.w("hata","Veritabanı oluşturulamadı ve kopyalanamadı!"); }