sqlite创建的时候没问题,插入的时候没有反应,能运行,也不报错。
在DDMS里导出那个db文件查看,里面有创建的表,但是没有插入的数据。创建表public void onCreate(SQLiteDatabase db){
String sql="Create table "+TABLE_NAME+"("+BaseColumns._ID+" integer primary key autoincrement,"
+FIRM_NAME+" char(50),"+FIRM_TIME+" char(50),"+FIRM_ADDRESS+" char(100), "+FIRM_CONTROLLER+" char(50),"+CONTROLLER_PHONE+" char(50),"+CONTACT_PEOPLE+" char(50),"+CONTACT_PHONE+" char(50));";
//String sql="Create table "+TABLE_NAME+"("+BaseColumns._ID+" integer primary key autoincrement,"
// + FIRM_NAME + " text );";
db.execSQL(sql);
// initDatabase(db);
}
insert
public static void InsertFirmInfo()
{
//String name="FIRM_INFO";
//String f_id="firm_id";
try
{
//String sql="insert into firm_info values('"+"null',"+"'"+PeActivity.firm_name+"','"+PeActivity.firm_time+"'," +
// "'"+PeActivity.firm_address+"','"+PeActivity.firm_controller+"','"+PeActivity.controller_phone+"'," +
// "'"+PeActivity.contact_people+"','"+PeActivity.contact_phone+"');";
dbUtil.getWritableDatabase();
ContentValues v = new ContentValues();
v.put("firm_name", PeActivity.firm_name);
v.put("firm_time", PeActivity.firm_time);
v.put("firm_address", PeActivity.firm_address);
v.put("firm_controller", PeActivity.firm_controller);
v.put("controller_phone", PeActivity.controller_phone);
v.put("contact_people", PeActivity.contact_people);
v.put("contact_phone", PeActivity.contact_phone);
db.insertOrThrow("firm_info",null,v);
// String sql= "insert into firm_info(firm_name,firm_time,firm_address,firm_controller,controller_phone,contact_people,contact_phone) values(?,?,?,?,?,?,?)";
// db.execSQL(sql, new Object[]{mFirm_info.getName(),FIRM_INFO.getTime(),FIRM_INFO.getAdd(),FIRM_INFO.getController(),FIRM_INFO.getControllerPhone(),FIRM_INFO.getContactPeople(),FIRM_INFO.getContactPhone()});
}
catch(Exception e)
{
e.printStackTrace();
}
}
在DDMS里导出那个db文件查看,里面有创建的表,但是没有插入的数据。创建表public void onCreate(SQLiteDatabase db){
String sql="Create table "+TABLE_NAME+"("+BaseColumns._ID+" integer primary key autoincrement,"
+FIRM_NAME+" char(50),"+FIRM_TIME+" char(50),"+FIRM_ADDRESS+" char(100), "+FIRM_CONTROLLER+" char(50),"+CONTROLLER_PHONE+" char(50),"+CONTACT_PEOPLE+" char(50),"+CONTACT_PHONE+" char(50));";
//String sql="Create table "+TABLE_NAME+"("+BaseColumns._ID+" integer primary key autoincrement,"
// + FIRM_NAME + " text );";
db.execSQL(sql);
// initDatabase(db);
}
insert
public static void InsertFirmInfo()
{
//String name="FIRM_INFO";
//String f_id="firm_id";
try
{
//String sql="insert into firm_info values('"+"null',"+"'"+PeActivity.firm_name+"','"+PeActivity.firm_time+"'," +
// "'"+PeActivity.firm_address+"','"+PeActivity.firm_controller+"','"+PeActivity.controller_phone+"'," +
// "'"+PeActivity.contact_people+"','"+PeActivity.contact_phone+"');";
dbUtil.getWritableDatabase();
ContentValues v = new ContentValues();
v.put("firm_name", PeActivity.firm_name);
v.put("firm_time", PeActivity.firm_time);
v.put("firm_address", PeActivity.firm_address);
v.put("firm_controller", PeActivity.firm_controller);
v.put("controller_phone", PeActivity.controller_phone);
v.put("contact_people", PeActivity.contact_people);
v.put("contact_phone", PeActivity.contact_phone);
db.insertOrThrow("firm_info",null,v);
// String sql= "insert into firm_info(firm_name,firm_time,firm_address,firm_controller,controller_phone,contact_people,contact_phone) values(?,?,?,?,?,?,?)";
// db.execSQL(sql, new Object[]{mFirm_info.getName(),FIRM_INFO.getTime(),FIRM_INFO.getAdd(),FIRM_INFO.getController(),FIRM_INFO.getControllerPhone(),FIRM_INFO.getContactPeople(),FIRM_INFO.getContactPhone()});
}
catch(Exception e)
{
e.printStackTrace();
}
}
或者你用SQL语句插入试下。我一般都写sql语句插入String sql = "insert into tableName (periodNumber) values( '123' ) ";
db.execSQL(sql);
嗯,我后来有改成db = dbUtil.getWritableDatabase();也没有反应。
一开始我也是用sql语句的,你看我注释里面的那些,也没有反应。
所以就感觉很诡异,完全不知道哪里出问题了
05-04 02:24:55.090: I/System.out(538): mCursor = android.database.sqlite.SQLiteCursor@40fa63e8
05-04 02:24:55.101: I/System.out(538): c = android.database.sqlite.SQLiteCursor@40fa63e8
05-04 02:24:55.140: D/dalvikvm(538): GC_CONCURRENT freed 375K, 10% free 6062K/6727K, paused 4ms+11ms
05-04 02:24:55.201: E/SQLiteDatabase(538): close() was never explicitly called on database '/data/data/ezpe.pe/databases/pe.db'
05-04 02:24:55.201: E/SQLiteDatabase(538): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1943)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1007)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1051)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:770)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157)
05-04 02:24:55.201: E/SQLiteDatabase(538): at ezpe.pe.DatabaseService.getAllItems(DatabaseService.java:115)
05-04 02:24:55.201: E/SQLiteDatabase(538): at ezpe.pe.Firm_List.onCreate(Firm_List.java:41)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.app.Activity.performCreate(Activity.java:4465)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.os.Handler.dispatchMessage(Handler.java:99)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.os.Looper.loop(Looper.java:137)
05-04 02:24:55.201: E/SQLiteDatabase(538): at android.app.ActivityThread.main(ActivityThread.java:4424)
05-04 02:24:55.201: E/SQLiteDatabase(538): at java.lang.reflect.Method.invokeNative(Native Method)
05-04 02:24:55.201: E/SQLiteDatabase(538): at java.lang.reflect.Method.invoke(Method.java:511)
05-04 02:24:55.201: E/SQLiteDatabase(538): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-04 02:24:55.201: E/SQLiteDatabase(538): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-04 02:24:55.201: E/SQLiteDatabase(538): at dalvik.system.NativeStart.main(Native Method)
05-04 02:24:55.201: E/System(538): Uncaught exception thrown by finalizer
05-04 02:24:55.220: E/System(538): java.lang.IllegalStateException: Don't have database lock!
05-04 02:24:55.220: E/System(538): at android.database.sqlite.SQLiteDatabase.verifyLockOwner(SQLiteDatabase.java:2090)
05-04 02:24:55.220: E/System(538): at android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2182)
05-04 02:24:55.220: E/System(538): at android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2178)
05-04 02:24:55.220: E/System(538): at android.util.LruCache.trimToSize(LruCache.java:197)
05-04 02:24:55.220: E/System(538): at android.util.LruCache.evictAll(LruCache.java:285)
05-04 02:24:55.220: E/System(538): at android.database.sqlite.SQLiteDatabase.deallocCachedSqlStatements(SQLiteDatabase.java:2143)
05-04 02:24:55.220: E/System(538): at android.database.sqlite.SQLiteDatabase.closeClosable(SQLiteDatabase.java:1126)
05-04 02:24:55.220: E/System(538): at android.database.sqlite.SQLiteDatabase.finalize(SQLiteDatabase.java:1914)
05-04 02:24:55.220: E/System(538): at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:182)
05-04 02:24:55.220: E/System(538): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168)
05-04 02:24:55.220: E/System(538): at java.lang.Thread.run(Thread.java:856)
有时候有,有时候什么log都没有
SQLiteDatabase db = dbUtil.getWritableDatabase();
String sql = "select * from firm_info limit ?,?";
Cursor mCursor = db.rawQuery(sql, new String[]{String.valueOf(firstResult), String.valueOf(maxResult)});
return mCursor;
}这个是log里报的getAllItems方法
05-04 02:24:55.201: E/SQLiteDatabase(538): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here貌似是数据库或Cursor使用完了没有关闭的原因
在你操作这个insert之前,应该还动作B操作过数据库,你要看下动作B是否占有者数据库资源,锁掉了,那么insert就不能操作了。
在你insert之前,你可以用方法查看下当前数据库是否是锁着的。
sqliteReadDB.isDbLockedByCurrentThread()
sqliteReadDB.isDbLockedByOtherThreads()
用着两个方法,返回的是波尔型