2010-06-23 143 views
0

我已經分貝用java這樣做(在Android的SQLite):無法連接到數據庫

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將其添加到新的diractory後打開項目叫做數據庫/ 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; 
    } 

我不是existInDataBase得到任何信息,光標()函數 更具體,我總是cursor.moveToFirst得到假的(),即使我的查詢僅僅是沒有任何東西選擇

能有人請: 1.tell我什麼他認爲是錯誤的 2. how我可以調試,看看有什麼在數據庫中(我調試,但我不能看到奇怪的事情,如果我應該說如果說「你沒有數據庫」 )

記「時,我所建造的應用程序中的第一次應用是誰建的數據庫,你可以在

0123中看到的

我的問題似乎是清單文件:

當一個人需要一個數據庫文件,並將其導入到自己的Android項目他該怎麼辦,請在步驟我應該怎麼辦謝謝約阿夫解釋?

回答

0

您是否看過this教程?

要查看設備上的數據庫中使用「adb shell」命令。在adb shell中,您可以使用sqlite3命令連接到數據庫。其他信息可以發現here

+0

是的,我做了,問題似乎是當我從java項目添加數據庫到我自己的問題累積。 之所以我導入數據庫是因爲它需要很長一段時間(對於dalvik來說,每次應用程序開始工作時,將6MB的somthig插入數據庫文件是一項巨大的工作)。 所以我設定了一個目標,讓我的項目之外的一個,它也將幫助我以後在谷歌雲上構建我的應用程序。 – 2010-06-23 12:04:23

+0

那麼android_metadata在哪裏? – 2010-06-23 12:42:49

+0

android_metadata?我不熟悉我應該做的更改,可以請您在該主題上鑽取它可能是我一直在尋找的小丑卡... – 2010-06-23 13:03:54

0

我認爲在Android中使用SQLiteOpenHelper與SQLite數據庫是最簡單的方法。您可以閱讀this tutorial以瞭解和應用。這是非常有益的,我遵循它,它的工作很好。