【问题标题】:failing to connect to database (SQLite on android)无法连接到数据库(Android 上的 SQLite)
【发布时间】:2010-06-23 11:45:15
【问题描述】:

我以这种方式使用 java 制作了 db:

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 数据浏览器打开它时,它工作正常,但是在将它添加到我的名为 databases/test1.db 的 android 项目中的新目录之后

我在使用它时遇到问题

我使用数据库的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;
    }

existInDataBase() 函数的光标中没有任何信息 更具体地说,即使我的查询只是选择而没有任何东西,我总是对 cursor.moveToFirst() 错误

有人可以请: 1.告诉我他认为什么是错的 2.我如何调试并查看数据库中有什么(我调试但我看不出有什么奇怪的,如果我说“你没有数据库”)

注意“当我第一次构建应用程序时,应用程序是构建数据库的人,正如您在中看到的那样

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

我的问题似乎是清单文件:

当一个人获取一个 db 文件并将其导入他的 android 项目时,他应该怎么做?请分步解释我应该怎么做,谢谢 yoav。

【问题讨论】:

    标签: java android sqlite


    【解决方案1】:

    你读过this 教程吗?

    要查看设备上的数据库中的内容,请使用“adb shell”命令。在 adb shell 中,您可以使用 sqlite3 命令连接到数据库。更多信息可以找到here

    【讨论】:

    • 是的,我做到了,当我从 java 项目添加数据库以产生我自己的问题时,问题似乎出在 b 上。我导入数据库的原因是因为它需要很长时间(对于 dalvik 来说,每次应用程序开始工作时将 6 MB 之类的 somthig 插入 db 文件是一项巨大的努力)。所以我设定了在我的项目之外做一个的目标,它也将帮助我以后在谷歌云上构建我的应用程序。
    • android_metadata?我不熟悉我应该在那里做的更改,请您深入探讨该主题,它可能是我一直在寻找的百搭牌...
    • 您的数据库必须包含 android_metadata 表 CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US')
    • 你能在anwser中展示它吗? 1.我应该在哪里写“android_metadata”(“locale”TEXT DEFAULT 'en_US') 2.当我在我的项目中添加一个数据库时,我应该做什么只是抓住并放到他的 Eclipse 目录中,或者我应该做更多的 thnku 我很长一段时间都遇到了麻烦,我认识的人都不知道这个平台的事情,通过完成那个错误我想我会完成这个应用程序
    • 这里已经解释了reigndesign.com/blog/…如果您还有其他问题,请随时提出。
    【解决方案2】:

    我认为使用 SQLiteOpenHelper 在 android 中使用 SQLite 数据库是最简单的方法。你可以阅读this tutorial来了解和应用。很有帮助,我关注了,效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 2021-01-05
      • 2021-10-19
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      相关资源
      最近更新 更多