2013-11-23 185 views
2

我有SQlite數據庫,我將其保存在我的項目的assets文件夾中。 來自assets文件夾我正在做sqlite數據庫的副本到data \ data \ packagename \ MYSHOES.sqlite。 我成功地從這個數據庫中檢索數據,但是當我試圖插入數據時,它沒有做任何事情。沒有錯誤消息。 以下是我的代碼。無法在Android中的SQLite數據庫中插入數據

public class Shoedb extends SQLiteOpenHelper { 
private SQLiteDatabase myDataBase; 
private final Context myContext; 

private static String DB_DIR = "/data/data/com.customlistview/"; 
private static String DB_NAME = "MYSHOES.sqlite"; 
private static String DB_PATH = DB_DIR + DB_NAME; 
boolean dbfnd; 
Cursor chk; 
private String TAG = "Database Helper"; 

public Shoedb(Context context) { 

    super(context, Shoedb.DB_NAME, null, 1); 
    this.myContext = context; 
    // DB_PATH=myContext.getDatabasePath(DB_NAME).getAbsolutePath(); 
    System.out.println("My DataBase Path: " + DB_PATH); 
    try { 
     copyDataBase(); 
     openDataBase(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public void createDataBase() throws IOException { 

    Log.e("createDataBase1", "+++++++++++++"); 
    boolean dbExist = checkDataBase(); 

    if (dbExist) { 
     Log.e("createDataBase2", "++++++ database already exist"); 
     // do nothing - database already exist 
    } else { 

     // this.getReadableDatabase(); 

     try { 

      copyDataBase(); 

     } catch (IOException e) { 

      throw new Error("Error copying database"); 

     } 
    } 

} 

private boolean checkDataBase() { 

    SQLiteDatabase checkDB = null; 

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

    } catch (SQLiteException e) { 
     // database does't exist yet. 
    } 
    if (checkDB != null) { 
     checkDB.close(); 
    } 

    return checkDB != null ? true : false; 

} 

private void copyDataBase() throws IOException { 

    // Open your local db as the input stream 
    InputStream myInput = myContext.getAssets().open(DB_NAME); 

    // Path to the just created empty db 
    String outFileName = DB_PATH; 

    // Open the empty db as the output stream 
    OutputStream myOutput = new FileOutputStream(outFileName); 

    // transfer bytes from the inputfile to the outputfile 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = myInput.read(buffer)) > 0) { 
     myOutput.write(buffer, 0, length); 
    } 
    // Close the streams 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 

} 

public static void copyFile(InputStream fromFile, OutputStream toFile) 
     throws IOException { 
    // transfer bytes from the inputfile to the outputfile 
    System.out.println("In copying....."); 
    byte[] buffer = new byte[1024]; 
    int length; 

    try { 
     while ((length = fromFile.read(buffer)) > 0) { 
      toFile.write(buffer, 0, length); 
      System.out.println("Reading & writing the file...."); 
     } 
    } catch (Exception e) { 
     System.out.println("Error in copy1 file :" + e.toString()); 
    } 
    // Close the streams 
    finally { 
     try { 
      if (toFile != null) { 
       try { 
        toFile.flush(); 
       } finally { 
        toFile.close(); 
       } 
      } 
     } catch (Exception e) { 
      System.out.println("Error in copy2 file :" + e.toString()); 
     } finally { 
      if (fromFile != null) { 
       fromFile.close(); 
       System.out.println("File copied successfully....."); 
      } 
     } 
    } 
} 

public static void copyFile(String fromFile, String toFile) 
     throws IOException { 
    copyFile(new FileInputStream(fromFile), new FileOutputStream(toFile)); 
} 

// Open the database 
public void openDataBase() { 

    String myPath = DB_PATH; 
    try { 

     myDataBase = SQLiteDatabase.openDatabase(myPath, null, 
       SQLiteDatabase.OPEN_READWRITE); 
     System.out.println(myDataBase.toString() 
       + " Database found....................!!!!!!!"); 
     dbfnd = true; 
    } catch (Exception e) { 
     System.out.println("Database not found....................!!!!!!!"); 
     // TODO: handle exception 
     dbfnd = false; 
    } 
} 

public SQLiteDatabase getReadableDatabase() { 
    myDataBase = SQLiteDatabase.openDatabase(DB_PATH, null, 

    SQLiteDatabase.OPEN_READONLY); 
    return myDataBase; 
} 

public SQLiteDatabase getWritableDatabase() { 
    myDataBase = SQLiteDatabase.openDatabase(DB_PATH, null, 

    SQLiteDatabase.OPEN_READWRITE); 

    return myDataBase; 
} 

@Override 
public synchronized void close() { 

    if (myDataBase != null) 
     myDataBase.close(); 
    super.close(); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 

} 

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

} 

public Cursor get_Data(String selCat) { 
    chk = null; 

    try { 

     chk = myDataBase.rawQuery(
       "select Image,Price,Category from shoe_info where Category='" 
         + selCat + "'", null); 

    } catch (Exception e) { 
     Log.e(TAG, "Error in getshoeinfo"); 
     e.printStackTrace(); 
     return null; 
    } 
    return chk; 

} 

public Cursor get_DataImage(String pImage) { 
    // TODO Auto-generated method stub 
    chk = null; 

    try { 

     chk = myDataBase.rawQuery(
       "select Image,Price,Category from shoe_info where Image='" 
         + pImage + "'", null); 

    } catch (Exception e) { 
     Log.e(TAG, "Error in getshoeinfo"); 
     e.printStackTrace(); 
     return null; 
    } 
    return chk; 
} 
    //This code is not working 
public void put_DataImage(String pImage, String price, String id) { 
    // TODO Auto-generated method stub 
    chk = null; 

    try { 
     System.out 
       .println("insert into shoe_info(Image,Price,Category) values('" 
         + pImage + "','" + price + "','" + id + "');"); 
     myDataBase 
       .execSQL("insert into shoe_info(Image,Price,Category) values('" 
         + pImage + "','" + price + "','" + id + "');"); 

    } catch (Exception e) { 
     Log.e(TAG, "Error in getshoeinfo"); 
     e.printStackTrace(); 
    } 
} 

public void put_DataToCart(String image, String price, String pCat) { 
    // TODO Auto-generated method stub 
    Log.i(TAG, "Insert to mycarttttttttttttttttttt"); 
    try { 
     System.out 
       .println("insert into mycart (Image,Price,category) values('" 
         + image + "','" + price + "','" + pCat + "');"); 

     myDataBase 
       .execSQL("insert into mycart(Image,Price,category) values('" 
         + image + "','" + price + "','" + pCat + "')"); 

    } catch (Exception e) { 
     Log.e(TAG, "Error in put_DataToCart"); 
     e.printStackTrace(); 
    } 
} 

public Cursor get_DataFromCart() { 
    chk = null; 

    try { 
     System.out.println("select Image,Price,category from mycart"); 
     chk = myDataBase.rawQuery(
       "select Image,Price,category from mycart", null); 

    } catch (Exception e) { 
     Log.e(TAG, "Error in getshoeinfo"); 
     e.printStackTrace(); 
     return null; 
    } 
    return chk; 

} 

}

回答

2

嘗試使用

SQLiteDatabase.OPEN_READWRITE代替SQLiteDatabase.OPEN_READONLY

在checkDataBase(),同時打開連接到數據庫。目前連接到數據庫是隻讀的...

+0

我做了這一個,但它不工作... –

+0

你要調用什麼方法插入數據......如果可能的話,還可以提供異常堆棧跟蹤,如果有...這將有所幫助 –

相關問題