sqlite创建表成功,insert不报错,但没有数据插入

wiems 2012-05-02 03:08:15
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();
}
}
...全文
7207 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
小米小吉 2013-10-21
  • 打赏
  • 举报
回复
加多一个finaly,在里面把db和数据集给close掉
endual 2012-05-07
  • 打赏
  • 举报
回复
解决了没?
在你操作这个insert之前,应该还动作B操作过数据库,你要看下动作B是否占有者数据库资源,锁掉了,那么insert就不能操作了。
在你insert之前,你可以用方法查看下当前数据库是否是锁着的。
sqliteReadDB.isDbLockedByCurrentThread()
sqliteReadDB.isDbLockedByOtherThreads()
用着两个方法,返回的是波尔型

zhuxr2003 2012-05-07
  • 打赏
  • 举报
回复
增删改操作完要close()。
fire_fire_fire 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 4 楼 的回复:

好像不是db.commit();的问题

你的数据库貌似没有打开耶,你插什么东西进去?

你把dbUtil.getWritableDatabase(),改成这样:db= dbUtil.getWritableDatabase();
或者你用SQL语句插入试下。我一般都写sql语句插入
Java code

String sql = "insert i……
[/Quote]
那这就奇异了啊,怎么会这样?
wiems 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

看下LOG报什么异常,异常不是错误,里面估计会有一个黄色的,xxxxException的东西,发出来看看
[/Quote]


public Cursor getAllItems(int firstResult, int maxResult) {
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方法
wiems 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

看下LOG报什么异常,异常不是错误,里面估计会有一个黄色的,xxxxException的东西,发出来看看
[/Quote]

有时候有,有时候什么log都没有
wiems 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

看下LOG报什么异常,异常不是错误,里面估计会有一个黄色的,xxxxException的东西,发出来看看
[/Quote]



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)
dinko321 2012-05-04
  • 打赏
  • 举报
回复
看下LOG报什么异常,异常不是错误,里面估计会有一个黄色的,xxxxException的东西,发出来看看
wiems 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

就是叫你最后加个db.commit();
[/Quote]
嗯?加了db.commit()显示错误啊。。。
wiems 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

sql 插入语句有没有完全正确?
[/Quote]
正确的。我用firefox的sqlite Manager打开那个表,然后用那个执行这句sql语句,结果是正确的。
wiems 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

好像不是db.commit();的问题

你的数据库貌似没有打开耶,你插什么东西进去?

你把dbUtil.getWritableDatabase(),改成这样:db= dbUtil.getWritableDatabase();
或者你用SQL语句插入试下。我一般都写sql语句插入
Java code

String sql = "insert into tableName (pe……
[/Quote]

嗯,我后来有改成db = dbUtil.getWritableDatabase();也没有反应。
一开始我也是用sql语句的,你看我注释里面的那些,也没有反应。
所以就感觉很诡异,完全不知道哪里出问题了
DrinkBeer 2012-05-04
  • 打赏
  • 举报
回复
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

貌似是数据库或Cursor使用完了没有关闭的原因
润物wu声 2012-05-02
  • 打赏
  • 举报
回复
sql 插入语句有没有完全正确?
fire_fire_fire 2012-05-02
  • 打赏
  • 举报
回复
好像不是db.commit();的问题

你的数据库貌似没有打开耶,你插什么东西进去?

你把dbUtil.getWritableDatabase(),改成这样:db= dbUtil.getWritableDatabase();
或者你用SQL语句插入试下。我一般都写sql语句插入

String sql = "insert into tableName (periodNumber) values( '123' ) ";
db.execSQL(sql);

ganzi01234 2012-05-02
  • 打赏
  • 举报
回复
就是叫你最后加个db.commit();
wiems 2012-05-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

是不是跟commit有关?
[/Quote]
能说的具体一点吗?什么是commit?
direction917 2012-05-02
  • 打赏
  • 举报
回复
是不是跟commit有关?

80,492

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧