我的程序在Android上的sqlite数据库中找不到表

时间:2014-06-12 10:11:25

标签: java android sqlite select

我有SQLite数据库文件(我没有在这个程序中创建,它有它的表和数据),我在我的android程序中打开它,但是当我写SELECT语句程序找不到表时我得到错误:

  

错误:没有这样的表:人

这是代码:

public class SQLiteAdapter {

    private DbDatabaseHelper databaseHelper;

    private static String dbfile = "/data/data/com.example.searchpersons/databases/";

    private static String DB_NAME = "Person.db";

    static String myPath = dbfile + DB_NAME;

    private static SQLiteDatabase database;

    private static final int DATABASE_VERSION = 3;

    private static String table = "Person";

    private static Context myContext;

    public SQLiteAdapter(Context ctx) {
        SQLiteAdapter.myContext = ctx;
        databaseHelper = new DbDatabaseHelper(SQLiteAdapter.myContext);
    }

    public static class DbDatabaseHelper extends SQLiteOpenHelper {
        public DbDatabaseHelper(Context context) {
            super(context, DB_NAME, null, DATABASE_VERSION);
            dbfile = "/data/data/" + context.getPackageName() + "/databases/";
            myPath = dbfile + DB_NAME;
            //this.myContext = context;
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
        }

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

    public SQLiteDatabase open() {
        try {
            database = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
            Log.v("db log", "database exist open");
        } catch (SQLiteException e) {
            Log.v("db log", "database does't exist");
        }

        if (database != null && database.isOpen())
            return database;
        else {
            database = databaseHelper.getReadableDatabase();
            Log.v("db log", "database exist helper");
        }

        return database;
    }

    public Cursor onSelect(String firstname, String lastname) {
        Log.v("db log", "database exist select");
        Cursor c = database.rawQuery("SELECT * FROM " + table + " where Firstname='" + firstname + "' And Lastname='" + lastname + "'", null);
        c.moveToFirst();
        return c;
    }

    public void close() {
        if (database != null && database.isOpen()) {
            database.close();
        }
    }
}

这是按钮点击功能:

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      final View rootView = inflater.inflate(R.layout.fragment_main, container, false);
      Button btn1 = (Button) rootView.findViewById(R.id.button1);

      btn1.setOnClickListener(new View.OnClickListener() {

          public void onClick(View v) {
              EditText t = (EditText) rootView.findViewById(R.id.editText1);
              String name = t.getText().toString();
              EditText tt = (EditText) rootView.findViewById(R.id.editText2);
              String lastname = tt.getText().toString();

              if (name.length() == 0 || lastname.length() == 0) {
                  Toast.makeText(rootView.getContext(), "Please fill both box", Toast.LENGTH_LONG).show();
              } else {
                  GridView gridview = (GridView) rootView.findViewById(R.id.gridView1);
                  List < String > li = new ArrayList < String > ();
                  ArrayAdapter < String > adapter = new ArrayAdapter < String > (rootView.getContext(), android.R.layout.simple_gallery_item, li);

                  try {
                      SQLiteAdapter s = new SQLiteAdapter(rootView.getContext());
                      s.open();
                      Cursor c = s.onSelect(name, lastname);
                      if (c != null) {
                          if (c.moveToFirst()) {
                              do {
                                  String id = c.getString(c.getColumnIndex("ID"));
                                  String name1 = c.getString(c.getColumnIndex("Firstname"));
                                  String lastname1 = c.getString(c.getColumnIndex("Lastname"));
                                  String personal = c.getString(c.getColumnIndex("PersonalID"));
                                  li.add(id);
                                  li.add(name1);
                                  li.add(lastname1);
                                  li.add(personal);
                                  gridview.setAdapter(adapter);
                              } while (c.moveToNext());
                          }
                      } else {
                          Toast.makeText(rootView.getContext(), "There is no data", Toast.LENGTH_LONG).show();
                      }

                      c.close();
                      s.close();
                  } catch (Exception e) {
                      Toast.makeText(rootView.getContext(), "Error : " + e.getMessage(), Toast.LENGTH_LONG).show();
                  }
              }
          }
      });
      return rootView;
  }

我在SQLite数据库浏览器中检查数据库,一切正常(有表和数据),但程序仍然无法找到它们。

我在eclipse中添加了sqlitemanager,它也看不到表: enter image description here 只有一个表android_metadata,没有我的表。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

我想了大约一个星期,答案很简单。我解决了这个问题: 来自 sqlitemanager enter image description here

我从该按钮添加了数据库。 现在一切正常;)

答案 1 :(得分:-1)

In oncreate you have to create your db. I am sending you my db class.



import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DbAdapter extends SQLiteOpenHelper {

    private static DbAdapter mDbHelper;

    public static final String DATABASE_NAME = "demoDb";


    public static final String TABLE_Coin= "coin_table";
    public static final String TABLE_Inbox= "inbox";
    public static final String TABLE_Feature= "feature";
    public static final String TABLE_Time= "time";
    public static final String TABLE_Deduct_money= "deduct_time";
    public static final String TABLE_Unread_message= "unread_message";



    public static final String COLUMN_Email= "email";
    public static final String COLUMN_Appearence= "appearence";
    public static final String COLUMN_Drivability= "drivability";
    public static final String COLUMN_Fuel= "fuel";
    public static final String COLUMN_Insurance= "insurance";

    public static final String COLUMN_Wow= "wow";
    public static final String COLUMN_CurrentValue= "current_value";
    public static final String COLUMN_coin = "name";
    public static final String COLUMN_seenTime = "seen";
    public static final String COLUMN_number_of_times = "number_of_times";
    public static final String COLUMN_name = "name";

    public static final String COLUMN_type = "type";
    public static final String COLUMN_text = "text";
    public static final String COLUMN_image = "image";
    public static final String COLUMN_created_time = "created_time";

    public static final String COLUMN_unread = "unread";

    // ****************************************

    private static final int DATABASE_VERSION = 1;


    private final String DATABASE_CREATE_BOOKMARK = "CREATE TABLE "
            + TABLE_Coin + "(" + COLUMN_coin
            + " Varchar,"+COLUMN_Email +" Varchar, UNIQUE("
            + COLUMN_Email + ") ON CONFLICT REPLACE)";


    private final String DATABASE_CREATE_BOOKMARK1 = "CREATE TABLE "
            + TABLE_Feature + "(" + COLUMN_Appearence
            + " Integer,"+COLUMN_Email +" Varchar ,"+COLUMN_name +" Varchar ,"+COLUMN_Drivability +" Integer ,"+COLUMN_Wow +" Integer,"+COLUMN_CurrentValue +" Integer,"+COLUMN_Fuel +" Integer,"+COLUMN_Insurance +" Integer, UNIQUE("
            + COLUMN_Email + ") ON CONFLICT REPLACE)";


    private final String DATABASE_CREATE_BOOKMARK2 = "CREATE TABLE "
            + TABLE_Time + "(" + COLUMN_Email +" Varchar ,"+COLUMN_seenTime +" Integer,"+COLUMN_number_of_times +" Integer, UNIQUE("
            + COLUMN_Email + ") ON CONFLICT REPLACE)";



    private final String DATABASE_CREATE_BOOKMARK3 = "CREATE TABLE "
            + TABLE_Deduct_money + "(" + COLUMN_seenTime
            + " Varchar,"+ COLUMN_number_of_times
            + " Integer,"+COLUMN_Email +" Varchar, UNIQUE("
            + COLUMN_Email + ") ON CONFLICT REPLACE)";


    private final String DATABASE_CREATE_BOOKMARK4 = "CREATE TABLE "
            + TABLE_Inbox + "(" + COLUMN_created_time
            + " DATETIME,"+ COLUMN_image
            + " Varchar,"
            + COLUMN_type
            + " Varchar,"+ COLUMN_name
            + " Varchar,"+ COLUMN_text
            + " Varchar,"+COLUMN_Email +" Varchar)";


    private final String DATABASE_CREATE_BOOKMARK5 = "CREATE TABLE "
            + TABLE_Unread_message + "(" + COLUMN_unread
            + " Varchar,"+COLUMN_Email +" Varchar, UNIQUE("
            + COLUMN_Email + ") ON CONFLICT REPLACE)";

    private DbAdapter(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public static synchronized DbAdapter getInstance(Context context) {
        if (mDbHelper == null) {
            mDbHelper = new DbAdapter(context);
        }

        return mDbHelper;
    }

    /**
     * Tries to insert data into table
     * 
     * @param contentValues
     * @param tablename
     * @throws SQLException
     *             on insert error
     */
    public void insertQuery(ContentValues contentValues, String tablename)
            throws SQLException {

        try {
            final SQLiteDatabase writableDatabase = getWritableDatabase();
            writableDatabase.insert(tablename, null, contentValues);
            // writableDatabase.insertWithOnConflict(tablename, null,
            // contentValues,SQLiteDatabase.CONFLICT_REPLACE);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //  public void insertReplaceQuery(ContentValues contentValues, String tablename)
    //          throws SQLException {
    //
    //      try {
    //          final SQLiteDatabase writableDatabase = getWritableDatabase();
    //          writableDatabase.insertOrThrow(tablename, null, contentValues);
    //
    //      } catch (Exception e) {
    //          e.printStackTrace();
    //      }
    //  }
    //
    //  /**
    //   * Update record by ID with contentValues
    //   * 
    //   * @param id
    //   * @param contentValues
    //   * @param tableName
    //   * @param whereclause
    //   * @param whereargs
    //   */
        public void updateQuery(ContentValues contentValues, String tableName,
                String whereclause, String[] whereargs) {

            try {
                final SQLiteDatabase writableDatabase = getWritableDatabase();
                writableDatabase.update(tableName, contentValues, whereclause,
                        whereargs);

            } catch (Exception e) {
                e.printStackTrace();

            }
        }

    public Cursor fetchQuery(String query) {
        final SQLiteDatabase readableDatabase = getReadableDatabase();
        final Cursor cursor = readableDatabase.rawQuery(query, null);
        if (cursor != null) {
            cursor.moveToFirst();
        }
        return cursor;
    }

    public Cursor fetchQuery(String query, String[] selectionArgs) {
        final SQLiteDatabase readableDatabase = getReadableDatabase();
        final Cursor cursor = readableDatabase.rawQuery(query, selectionArgs);

        if (cursor != null) {
            cursor.moveToFirst();
        }
        return cursor;
    }

    public void delete(String table) {
        final SQLiteDatabase writableDatabase = getWritableDatabase();
        writableDatabase.delete(table, null, null);
    }

    public void delete(String table, String whereClause, String[] selectionArgs) {
        final SQLiteDatabase writableDatabase = getWritableDatabase();
        writableDatabase.delete(table, whereClause, selectionArgs);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(DATABASE_CREATE_BOOKMARK);
        db.execSQL(DATABASE_CREATE_BOOKMARK1);
        db.execSQL(DATABASE_CREATE_BOOKMARK2);
        db.execSQL(DATABASE_CREATE_BOOKMARK3);
        db.execSQL(DATABASE_CREATE_BOOKMARK4);
        db.execSQL(DATABASE_CREATE_BOOKMARK5);

    }

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

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_Coin);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_Feature);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_Time);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_Deduct_money);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_Inbox);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_Unread_message);

        onCreate(db);

    }
}

答案 2 :(得分:-2)

你正在弄乱路径。

请清除对dbfilemyPath的每个定义或引用。您正在定义中使用某些值(可能是复制粘贴)初始化它们,然后在{{{{{{{ 1}}构造函数。并且帮助程序不会使用这些路径,它只会在默认目录中创建数据库。

然后,在DbDatabaseHelper方法中,您使用预期路径调用open。请使用帮助程序中的getReadableDatabasegetWritableDatabase