android SQLite 没有这样的表(代码 1)错误

标签 android database sqlite

我在我的 android 项目中导入一个 SQLite 数据库(到 Assets 文件夹中)。我想访问它并显示记录。但是当我尝试的时候。得到那个错误

my db in assets folder

my database column and fields

数据库助手类

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

SQLiteDatabase myDatabase;

final Context myContext;

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

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

    this.myContext = context;
}
//Assest dizinine koyduğumuz sql dosyasını, Android projesi içine oluşturma ve kopyalamna işlemi yapıldı..
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.");
        }
    }
}
//Sqlite veritabanı dosyasını açıp, veritabanımı kontrol ediyoruz
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;
}
///Assest dizinine koyduğumuz sql dosyasındaki verileri kopyalıyoruz
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ı.");
    }
}
//Veritabannı açma işlemi yapıldı

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) {

}

Corba1 类

public class F_corba1 extends Fragment {

View parent;
Context con;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

   // text_baslik=(TextView)parent.findViewById(R.id.text_baslik);

    parent=inflater.inflate(R.layout.corba1,container,false);
    con=inflater.getContext();

    //DatabaseHelper sınıfımızdaki CreateDataBase methodunu çağırıp , assest dizinine koymuş
    //olduğumuz veritabanını,Android projesinin içinde  oluşturup,verileri kopyalamasını sağladık...
    DatabaseHelper dbHelper=new DatabaseHelper(con);
    try
    {
        dbHelper.CreateDataBase();

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


    //Proje içine kopyalanmış olan veritabanımızdan verileri listview e yazdırdık

    SQLiteDatabase db=dbHelper.getReadableDatabase();
    String[] getColumnName={"student_name,student_surname"};
    Cursor imlec=db.query("student", getColumnName, null, null, null, null, null);
    ListView listview=(ListView)parent.findViewById(R.id.listview);
    ArrayList<String> student=new ArrayList<String>();
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(con,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();

    return parent;
}


}

错误日志

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.yeni, PID: 26479
    android.database.sqlite.SQLiteException: no such table: student (code 1): , while compiling: SELECT student_name,student_surname FROM student
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
        at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
        at com.yeni.corbalar.F_corba1.onCreateView(F_corba1.java:63)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
        at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
        at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)

行进入错误(F_corba1.java:63)

 Cursor imlec=db.query("student", getColumnName, null, null, null, null, null);

最佳答案

我认为你的数据库路径是错误的。在您的情况下,您可以像这样在 Assets 文件夹中获取数据库的路径:

DB_PATH = "file:///android_asset/School.db"

或者您可以将数据库作为 InputStream:

InputStream dbInputStream = context.getAssets().open("School.db");

关于android SQLite 没有这样的表(代码 1)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43511766/

相关文章:

android - 从 OKHTTP 下载二进制文件

python将独特的项目添加到一个巨大的表中

php - 了解并跟踪 Apache 错误 : Wordpress database

python - 覆盖用于测试的 SQLAlchemy 列

android - 间歇性 SQLiteException : not an error at dbopen

android - 按后退按钮返回 Fragments

java - 从未使用过类 'MyApplication'

Android 5 特性——自定义滑动时屏幕边缘的阴影

mysql - 如何获取postgresql中特定行的最近日期

java - 如何在Android中编写SQLite execSQL函数?