не удается подключиться к базе данных (SQLite на Android) - PullRequest
0 голосов
/ 23 июня 2010

Я сделал БД, используя java следующим образом:

public static void main(String[] args) throws Exception {
      String CITIES[] = city.split(",");
      Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");

       String V[][] = {COUNTRIES,CITIES,occupations}; 
       String []TypeNames = {"country","city","occupation"};
        Statement stat = conn.createStatement();
    stat.executeUpdate("drop table if exists "+TABLE_NAME+";");
    //stat.executeUpdate("create table "+TABLE_NAME+" (name, occupation);");
    stat.executeUpdate("create table "+TABLE_NAME+" ("+VALUE+","+TYPE+","+LETTER+");");
    PreparedStatement prep = conn.prepareStatement(
      "insert into "+TABLE_NAME+" values (?, ?,?);");

    //private void insertToTalble();
    for(int j = 0 ;j < V.length; j++)
        for (int i = 0 ;i < V[j].length ; i++)
        {
        Character c = V[j][i].charAt(0);
        prep.setString(1, V[j][i]+"\n");
        prep.setString(2, TypeNames[j]);
        prep.setString(3, c.toString());

        prep.addBatch();
        }

    conn.setAutoCommit(false);
    prep.executeBatch();
    conn.setAutoCommit(true);

    rs.close();
    conn.close();
  }
}

, когда я открываю его с помощью браузера данных sqllight, он работает нормально, но после добавления его в новую директорию в моем проекте Android под названием database / test1.db

У меня проблемы с его использованием

Мой класс Android, который работает с базой данных:

     private static final String DB_PATH = "/data/data/com.countryCityGame/databases/test.db";
    private static final String DATABASE_NAME = "test1.db";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_NAME = "GameTable";
    private static final String VALUE = "value";
    private static final String TYPE = "type";
    private static final String LETTER = "letter";


    public countryCityGameLogic(EditText[] myEditTextArr , Context context){

        this.context = context;
        openHelper = new OpenHelper(context);
        gameList = new CharSequence [myEditTextArr.length];
        for (int i = 0 ; i < myEditTextArr.length; i++){
            gameList[i] = myEditTextArr[i].getText();
        }
        this.db = openHelper.getWritableDatabase();

        try{
            String myPath = DB_PATH ;
            SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

        }catch(SQLiteException e){

            //database does't exist yet.
            //insertValus(COUNTRIES,0);

        }
        //insertValus(COUNTRIES,0);
    }
    public void setGameVar(EditText[] myEditTextArr) {
        for (int i = 0 ; i < myEditTextArr.length ;i++)
        gameList[i] = myEditTextArr[i].getText();
    }
    private void insertValus(String []typeInserted , int num) {
        ContentValues initialValues = new ContentValues();
          for (int i = 0 ; i < typeInserted.length ; i++){
              Character tmp = (Character)typeInserted[i].charAt(0);
              initialValues.put(VALUE, typeInserted[i]);
              initialValues.put(TYPE, TYPESNAMES[num]);
              initialValues.put(LETTER,tmp.toString(tmp));

          db.insert(TABLE_NAME, null, initialValues);
          }
    }



    private static class OpenHelper extends SQLiteOpenHelper {

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

          @Override
          public void onCreate(SQLiteDatabase db) {
             db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ( "+ VALUE +" TEXT,"+ TYPE +" TEXT, "+ LETTER + " TEXT)");
          }

          @Override
          public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
             db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
             onCreate(db);
          }
       }


    public boolean existInDataBase() {
        boolean returnval = true;


        String s = asUpperCaseFirstChar(gameList[0].toString());
        Cursor cursor = db.query(TABLE_NAME, new String[] {VALUE}
        ,VALUE+" like " + "'%" + s +"%'", null, null, null, null);

        if ( cursor.moveToFirst() == false)
            returnval = false;

        return returnval;
    }

Я не получаю никакой информации в курсоре в thereInDataBase ()функция, чтобы быть более конкретной, я всегда получаю false для cursor.moveToFirst (), даже когда мой запрос просто для выбора без какой-либо вещи

Может кто-то, пожалуйста: 1. Скажите мне, что он думает неправильно 2. КакМогу ли я отладить и посмотреть, что есть в БД (я отлаживаю, но не вижу ничего странного, если бы у меня было «если у вас нет базы данных»)

note », когда я собрал приложение в первый разприложение было тем, кто создавал БД, как вы можете видеть в

 private void insertValus(String []typeInserted , int num);

, моя проблема, кажется, в файле манифеста:

, когда кто-то берет файл БД и импортирует его в свой файл.Android-проект, что должноон делает? пожалуйста, объясните в шагах, что я должен делать, спасибо, yoav.

Ответы [ 2 ]

0 голосов
/ 17 июня 2013

Я думаю, что работа с базой данных SQLite в Android с использованием SQLiteOpenHelper - самый простой способ.Вы можете прочитать этот учебник , чтобы понять и применить.Это очень полезно, я следил за этим, и это хорошо работает.

0 голосов
/ 23 июня 2010

Вы прочитали этот учебник?

Чтобы увидеть, что в вашей базе данных на устройстве, используйте команду "adb shell"Из оболочки adb вы можете подключиться к базе данных с помощью команды sqlite3.Дополнительную информацию можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...