无法将数据插入Android中的SQLite数据库

时间:2013-11-23 08:14:50

标签: android sqlite android-sqlite sql-insert

我有SQlite数据库,我保存在项目的assets文件夹中。     从assets文件夹我正在复制sqlite db到data \ data \ packagename \ MYSHOES.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;

}

}

1 个答案:

答案 0 :(得分:2)

尝试使用

SQLiteDatabase.OPEN_READWRITE而不是SQLiteDatabase.OPEN_READONLY

在打开与DB的连接时,在checkDataBase()中

。目前与DB的连接是只读的......