PDA

View Full Version : آپدیت دیتابیس



zarabela
جمعه 09 مرداد 1394, 11:18 صبح
سلام
من وقتی که دیتابیس جدید رو جایگزین قبلی میکنم و ورژن دیتابیس رو افزایش میدم برنامه این ارور رو میده:
??-?? ??:??:??.???: INFO/<unknown>(<unknown>): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.data/com.example.data.MainActivity}: android.database.sqlite.SQLiteException: near "EXIST": syntax error (code 1): , while compiling: DROP TABLE IF EXIST abyat


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

zarabela
یک شنبه 11 مرداد 1394, 19:36 عصر
ممنون از راهنماییتون:لبخندساده:
کاملا متوجه شدم:لبخندساده:

NeoFighT
یک شنبه 11 مرداد 1394, 21:37 عصر
سلام ،
توی ارور نوشته مشکل چیه فقط باید بخونیش.
میگه EXIST اشتباهه باید از EXISTS استفاده کنی.

zarabela
دوشنبه 12 مرداد 1394, 00:14 صبح
سلام ،
توی ارور نوشته مشکل چیه فقط باید بخونیش.
میگه EXIST اشتباهه باید از EXISTS استفاده کنی.

ممنونم ازتون
الان ارور نمیده ولی محتویات دیتابیس رو هم نشون نمیده

NeoFighT
دوشنبه 12 مرداد 1394, 08:03 صبح
کجا نشون نمیده؟
باید query بزنید و اطلاعات رو خودتون نشون بدید.

zarabela
دوشنبه 12 مرداد 1394, 09:58 صبح
کجا نشون نمیده؟
باید query بزنید و اطلاعات رو خودتون نشون بدید.

توی لیست ویو،قبلا نشون میداد ولی الان نه دیگه

alireza142
دوشنبه 12 مرداد 1394, 10:58 صبح
توی لیست ویو،قبلا نشون میداد ولی الان نه دیگه


شما از پایگاه sql از پیش آماده شده استفاده می کنید؟

اگر جوابتون مثبت هست، باید بگم منم این مشکل رو داشتم. پایگاه من دو تا جدول درونش داشت. من برای حل این مشکل، بانک جدید ( در نسخه جدید ) رو با یک نام جدید در همون پوشه Assets گذاشتم، و در کلاس DatabaseHandler هم اسم دیتابیس ام رو به همین جدیده تغییر دادم. مشکل حل شد و داره مثل ساعت کار میکنه... فقط بانک قبلی در سیستم کاربر بلا استفاده به زندگیش ادامه میده.. البته حجمش حدود 50kb بیشتر نیست که فکر نمی کنم مشکلی دشته باشه...

zarabela
دوشنبه 12 مرداد 1394, 11:29 صبح
شما از پایگاه sql از پیش آماده شده استفاده می کنید؟

اگر جوابتون مثبت هست، باید بگم منم این مشکل رو داشتم. پایگاه من دو تا جدول درونش داشت. من برای حل این مشکل، بانک جدید ( در نسخه جدید ) رو با یک نام جدید در همون پوشه Assets گذاشتم، و در کلاس DatabaseHandler هم اسم دیتابیس ام رو به همین جدیده تغییر دادم. مشکل حل شد و داره مثل ساعت کار میکنه... فقط بانک قبلی در سیستم کاربر بلا استفاده به زندگیش ادامه میده.. البته حجمش حدود 50kb بیشتر نیست که فکر نمی کنم مشکلی دشته باشه...

خب این کار رو هم انجام دادم ولی بازم اطلاعات رو نشون نمیده
میخواید پروژه تست رو بزارم ببینید مشکلش چیه؟

alireza142
دوشنبه 12 مرداد 1394, 11:45 صبح
خب این کار رو هم انجام دادم ولی بازم اطلاعات رو نشون نمیده
میخواید پروژه تست رو بزارم ببینید مشکلش چیه؟

من که الان دارم روی همین موضوع کار می کنم و جواب هم گرفتم.
بذارید. شاید بتونم کمکتون کنم.

zarabela
سه شنبه 13 مرداد 1394, 09:55 صبح
من که الان دارم روی همین موضوع کار می کنم و جواب هم گرفتم.
بذارید. شاید بتونم کمکتون کنم.

لینک دانلود برنامه تست (http://s3.picofile.com/file/8204159284/Data.zip.html)
ممنون میشم کمکم کنید،خیلی ضروریه:خجالت:

alireza142
سه شنبه 13 مرداد 1394, 12:30 عصر
کدهای لایوت اکتیویتی اصلی:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="vertical"
tools:context=".MainActivity" >


<EditText
android:id="@+id/eDitText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:ems="10"
android:gravity="right"
android:hint="درج عبارت..." >
</EditText>


<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</ListView>


</LinearLayout>


کد های اکتیویتی اصلی:

package com.example.data;

import android.os.Bundle;
import android.app.ListActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.EditText;


public class MainActivity extends ListActivity {


private DatabaseHandler db;


private EditText et;
private String[] list_beyt;


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


db = new DatabaseHandler(this);
db.useable();


et = (EditText) findViewById(R.id.eDitText1);


db.open();
list_beyt = db.getFirstList();
db.close();


tazeSazi();


et.addTextChangedListener(new TextWatcher() {


@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub


}


@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub


}


@Override
public void afterTextChanged(Editable s) {
String keyword = et.getText().toString().trim();
db.open();
list_beyt = db.getNewList(keyword);
db.close();
tazeSazi();


}
});


}


public void tazeSazi() {


setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, list_beyt));


}


}


کد های کلاس ( جدید) DatabaseHandler :
package com.example.data;

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 DatabaseHandler extends SQLiteOpenHelper {


public final String path = "data/data/com.example.data/databases/"; // / نام پکیج رو در صورت نیاز اصلاح کنید
public SQLiteDatabase mydb;
private final Context mycontext;
private static final String DATABASE_NAME = "laki"; // /// نام فایل پایگاه داده. در نسخه جدید فقط این نام رو به روز کنید. البته نام فایل جدید رو
// هم همینطور. در حقیقت این دو نام باید یکی باشن با هم.
public final String table = "abyat"; // / نام جدول


// /////نام ستون های جداول///////
public final String id = "_id";
public final String beyt = "beyt";


public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, 1);
mycontext = context;
}


@Override
public void onCreate(SQLiteDatabase arg0) {
}


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


}


public void useable() {
boolean checkdb = checkdb();
if (checkdb) {


} else {
this.getReadableDatabase();
try {
copydatabase();
} catch (IOException e) {


}
}
}


public void open() throws SQLException {
mydb = SQLiteDatabase.openDatabase(path + DATABASE_NAME, null,
SQLiteDatabase.OPEN_READWRITE);
}


@Override
public void close() {
mydb.close();
}


public boolean checkdb() {
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(path + DATABASE_NAME, null,
SQLiteDatabase.OPEN_READWRITE);
} catch (SQLException e) {


}


return db != null ? true : false;
}


public void copydatabase() throws IOException {


OutputStream myOutput = new FileOutputStream(path + DATABASE_NAME);
byte[] buffer = new byte[1024];
int lenght;
InputStream myInput = mycontext.getAssets().open(DATABASE_NAME);
while ((lenght = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, lenght);
}
myInput.close();
myOutput.flush();
myOutput.close();
}


// ///////////// از این جا به بعد هر متدی رو که خواستین مینویسین.


// //////////// مثلا این متد که لیست اولیه بیت ها رو میاره
public String[] getFirstList() {
String[] list;


Cursor c = mydb.rawQuery("select * from " + table + " ORDER BY " + id,
null);


list = new String[c.getCount()];
c.moveToFirst();


for (int i = 0; i < c.getCount(); i++) {
list[i] = c.getString(c.getColumnIndex(beyt));
c.moveToNext();
}


c.close();
return list;
}




public String[] getNewList(String keyword) {


String[] list;


Cursor c = mydb.rawQuery("select * from " + table + " where " + beyt
+ " LIKE '%" + keyword + "%' ORDER BY " + id, null);


list = new String[c.getCount()];
c.moveToFirst();


for (int i = 0; i < c.getCount(); i++) {
list[i] = c.getString(c.getColumnIndex(beyt));
c.moveToNext();
}


c.close();
return list;
}


}


بقیه لایوت ها و کلاس ها رو هم حذف کردم.

zarabela
سه شنبه 13 مرداد 1394, 21:13 عصر
واااااقعا ممنون از شما