Я создаю sqlite с помощью C # .net следующим образом
SQLiteConnection m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
if (!File.Exists("MyDatabase.sqlite"))
{
SQLiteConnection.CreateFile("MyDatabase.sqlite");
m_dbConnection.Open();
string sql = "CREATE TABLE IF NOT EXISTS farmakology(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,tabaghe TEXT,name TEXT,enname TEXT,img TEXT,farmaco TEXT,amal TEXT,balin TEXT,masraf TEXT,tadakhol TEXT,amozesh TEXT,avarez TEXT);";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
}
Затем я сохраняю некоторые данные на этом sqlite и копирую их в папку assets моего проекта Android, а затем использую этот код для чтения:
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "MyDatabase.sqlite";
private static final int DATABASE_VERSION = 3;
private static final String ENNAME="enname";
private static final String POSES_TABLE="farmakology";
public MyDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public ArrayList<Poses> getPoses(){
SQLiteDatabase db=getWritableDatabase();
String[] columns={MyDatabase.ENNAME};
Cursor cursor=db.rawQuery("SELECT * FROM farmakology" , null);
ArrayList<Poses> questionsArrayList=new ArrayList<>();
while(cursor.moveToNext()){
Poses questions=new Poses();
questions.enname=cursor.getString(cursor.getColumnIndex(MyDatabase.ENNAME));
questionsArrayList.add(questions);
}
return questionsArrayList;
}
}
Однако logcat показывает эту ошибку (такой таблицы нет)
java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.toolha.pharmacology/ir.toolha.pharmacology.asli}: android.database.sqlite.SQLiteException: no such table: farmakology (code 1): , while compiling: SELECT * FROM farmakology
где проблема?как это исправить?
EDITED
Я также использую SQLiteOpenHelper, но все равно не помог и не работал для меня
public class SqlLiteDataBaseHelper extends SQLiteOpenHelper {
private static final String TAG = SqlLiteDataBaseHelper.class.getSimpleName();
private static final int DATABASE_VERSION = 3;
private static final String DATABASE_PATH = "/data/data/ir.toolha.pharmacology/databases/";
private static final String DATABASE_NAME = "MyDatabase.sqlite";
private static final String TABLE_NAME = "farmakology";
private static final String COL_Name = "enname";
private Context context;
private SQLiteDatabase db;
public SqlLiteDataBaseHelper(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
//This method is just retuning total no of recode in your table Getting single contact count
public int getDataCount() {
String userRollNo = null;
String query = "SELECT * FROM " + TABLE_NAME ;
Cursor cursor = db.rawQuery(query, null);
return cursor.getCount();
}
public void openDataBase () throws SQLException {
String path = DATABASE_PATH+DATABASE_NAME;
db = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
}
public void CopyDataBaseFromAsset() throws IOException {
InputStream in = context.getAssets().open(DATABASE_NAME);
Log.e("sample", "Starting copying");
String outputFileName = DATABASE_PATH+DATABASE_NAME;
File databaseFile = new File( "/data/data/ir.toolha.pharmacology/databases");
// check if databases folder exists, if not create one and its subfolders
if (!databaseFile.exists()){
databaseFile.mkdir();
}
OutputStream out = new FileOutputStream(outputFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer))>0){
out.write(buffer,0,length);
}
Log.e("sample", "Completed" );
out.flush();
out.close();
in.close();
}
public void deleteDb() {
File file = new File(DATABASE_PATH);
if(file.exists()) {
file.delete();
Log.d(TAG, "Database deleted.");
}
}
public boolean checkDataBase() {
boolean checkDB = false;
try {
File file = new File(DATABASE_PATH);
checkDB = file.exists();
} catch(SQLiteException e) {
Log.d(TAG, e.getMessage());
}
return checkDB;
}
}