۱۳۹۵/۰۹/۱۵, ۱۲:۲۸ ق.ظ
سلام خدمت همه اعضای گل کلیدستان بخصوص مدیر عزیز که همیشه راهنمایی می کنن
تو پروژم می خوام از دیتابیس خارجی استفاده کنم ولی به مشکل می خورم
کدهای برنام اینا هستن
تو کلاس دیگم که از کلاس بالا استفاده میکنه این تابع ها رو دارم
حالا به محض رسیدن به Cursor ینی خط هفتم یه همچین خطایی رو میده
stackoverflow رو زیر و رو کردم ولی چیزی دستگیرم نشد خواهشا هرکی می تونه کمک کنه دو روزه نتونستم ی خط کد بزنم
تو پروژم می خوام از دیتابیس خارجی استفاده کنم ولی به مشکل می خورم
کدهای برنام اینا هستن
کد پیاچپی:
package BaseClass;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.example.Saadi.BaseClass;
import com.example.Saadi.R;
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 DataBase extends SQLiteOpenHelper {
String DB_PATH = null;
public static String DB_NAME ;
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 DataBase(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
this.DB_NAME=this.myContext.getResources().getString(R.string.DB_Name);
if(android.os.Build.VERSION.SDK_INT >= 17) {
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
} else {
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
}
}
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
SQLiteDatabase db_Read = null;
if (dbExist) {
// do nothing - database already exist
} else {
// By calling this method and empty database will be created into
// the default system path
// of your application so we are gonna be able to overwrite that
// 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) {
// database does\'t exist yet.
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
/**
* Copies your database from your local assets-folder to the just created
* empty database in the system folder, from where it can be accessed and
* handled. This is done by transfering bytestream.
* */
private void copyDataBase() throws IOException {
// Open your local db as the input stream
InputStream myInput = myContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outFileName = DB_PATH + DB_NAME;
File f = new File( DB_PATH);
if (!f.exists()){
f.mkdir();
f.createNewFile();
}
// 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 String[][] DataBase_Operation(int ColumnDBCount)
{
Load_Database();
String[][] AllRowQuery = null;
db = myDbHelper.getReadableDatabase();
Cursor c = db.rawQuery("SELECT * FROM tblHeader, null);
AllRowQuery=new String[ColumnDBCount][c.getCount()];
if(c.moveToFirst()){
int counter=0;
do{
for(int i=0;i<ColumnDBCount;i++)
{
AllRowQuery[i][counter]=c.getString(i);
}
counter++;
}
while(c.moveToNext());
}
return AllRowQuery;
}
public void Load_Database() throws Error {
myDbHelper =new DataBase(_context);
try {
myDbHelper.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
try {
myDbHelper.openDataBase();
} catch (SQLException sqle) {
throw sqle;
}
}
حالا به محض رسیدن به Cursor ینی خط هفتم یه همچین خطایی رو میده
کد پیاچپی:
android.database.sqlite.SQLiteException: no such table:
stackoverflow رو زیر و رو کردم ولی چیزی دستگیرم نشد خواهشا هرکی می تونه کمک کنه دو روزه نتونستم ی خط کد بزنم