Android 通过ContentProvider向SQLite数据库插入数据不成功

问题描述

我自己写了一个ContentProvider,在执行向SQLiteDatabase数据库中插入一条记录时不成功,打出的log如下:11-27 02:00:11.696: ERROR/Database(997): android.database.sqlite.SQLiteException: table employee has no column named name: , while compiling: INSERT INTO employee(name) VALUES(?); 我的SQLiteOpenHelper类的派生类如下:package com.hgl.test;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;import com.hgl.test.Employees.Employee;public class DBHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "Employees.db";private static final int DATABASE_VERSION = 1;public static final String EMPLOYEES_TABLE_NAME = "employee";// 创建数据库public DBHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);Log.i("DBHelper Info===================>>>>>>>","this is DBHelper constructer function");}// 创建时调用,创建一个表@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubLog.i("DBHelper Info===================>>>>>>>","this is onCreate function");String createTableSQL = "CREATE TABLE " + EMPLOYEES_TABLE_NAME + "("+ Employee._ID + " INTEGER PRIMARY KEY," + Employee.NAME+ " TEXT," + Employee.GENDER + " TEXT," + Employee.AGE+ " INTEGER)";db.execSQL(createTableSQL);Log.d("Create Table=====================>>>>>>>>>>>", "create table "+ EMPLOYEES_TABLE_NAME);}// 版本更新时调用@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubdb.execSQL("DROP TABLE IF EXISTS "+EMPLOYEES_TABLE_NAME);onCreate(db);}} 自己的ContentProvider派生类如下:public class MyContentProvider extends ContentProvider{ //.........其他的省略........@Overridepublic Uri insert(Uri uri, ContentValues values) {Log.i("Employeeprovider Info===================》》》》》","this is insert function");// 获取数据库实例SQLiteDatabase db = dbHelper.getWritableDatabase();//dbHelper.onCreate(db);//创建表// 插入数据,返回行IDLong rowID = db.insert(DBHelper.EMPLOYEES_TABLE_NAME, Employee.NAME, values);// 如果插入成功返回Uriif (rowID > 0) {Uri empUri = ContentUris.withAppendedId(Employee.CONTENT_URI, rowID);getContext().getContentResolver().notifyChange(empUri, null);return empUri;}return null;}}我在MainActivity中调用Insert方法时就报错,MainActivity中的onCreate方法中调用insert方法:public void insert() {//"content://com.hgl.test.employees/employee";Uri uri = Employee.CONTENT_URI;// 实例化ContentValuesContentValues values = new ContentValues();values.put(Employee.NAME, "android");//values.put(Employee.GENDER, "software");//values.put(Employee.AGE, 3);// 获取ContentResolver,并执行插入getContentResolver().insert(uri, values);}请问这是哪里的错误呢?

解决方案

你的Primary key处理出错。 如果你想他为自增的,可以写为: INTEGER PRIMARY KEY AUTOINCREMENT,否则,插入时候自己指定唯一Id.异常的提示也说清楚了。 是插入时缺少列。

时间: 2024-10-28 05:17:08

Android 通过ContentProvider向SQLite数据库插入数据不成功的相关文章

vc.net 2010对sqlite数据库插入数据的问题,求助各位大拿

问题描述 新人,刚接触sqlitedb->ConnectionString="DataSource="+saveFileDialog1->FileName+";UseUTF16Encoding=True;";连接了一个数据库(用sqliteexpert创建的),窗体上还有几个textbox.用cmdInsert->CommandText="INSERTINTO[文章]([类型])VALUES("+Textbox1->Tex

Android利用SQLiteStatement提高数据库插入数据的效率

MainActivity如下: package cc.testdb; import cc.database.DBUtils; import cc.domain.Person; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; impor

android SQLite数据库存储数据

简介 SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.Android 集成了 SQLite 数据库 Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库. 对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单.但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适.因此,Android 提供了

asp.net中使用sqlite无法插入数据

问题描述 asp.net中使用sqlite无法插入数据 提示SQL logic error or missing database no such table: users 解决方案 Asp.net使用Sqlite数据库[学习笔记][asp.net下SQL语句无法向ACCESS数据库插入数据的小提示asp.net使用DataSet数据集插入记录 解决方案二: 没有users这个表,你的sql语句是不是有问题 解决方案三: sql语句没有问题,现在已经解决了,是web.config中的配置有问题,

app-关于android APP开发中SQLITE数据库的问题

问题描述 关于android APP开发中SQLITE数据库的问题 代码如下,首先请问我写的这段创建数据库的代码有没有错误?然后把这个类的文件放在哪里才对啊,目前程序一打开就是程序已经停止运行,APP的第一个ACTIVITY我设置的就是判断这个库中的某个表中有没有数据.我现在感觉就是程序打开,这个库还没有创建,是不存在的,所以运行不了.请大神指教下我.或者说怎么让APP一开始运行的第一步就是运行以下的代码来创建这个数据库.求指教. //数据库创建类 package com.captain.dao

php网mysql数据库插入数据乱码问题?

问题描述 php网mysql数据库插入数据乱码问题? 我php页面是设置为 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 数据库的编码也是utf8 Variable_name Value character_set_client utf8 character_set_connection utf8 character_set_database utf8 char

android 从ftp下载sqlite数据库后覆盖原有数据库,为什么不能运行?

问题描述 android 从ftp下载sqlite数据库后覆盖原有数据库,为什么不能运行? android的sqlite数据库,存在data/data/packagename/databases/下, 用org.apache.commons.net.ftp.FTPClient 上传数据库到ftp,再下载下来后,为什么提示损坏,打不开? 我测试过,ftp上的文件是正确的,下载也成功了,文件有更新,文件的大小和ftp上的也是一样的.但是为什么打不开呢?用sqlexpert打开sqlite,提示dat

access数据库-VC++ 向Access数据库插入数据

问题描述 VC++ 向Access数据库插入数据 http://e.hiphotos.baidu.com/zhidao/pic/item/8644ebf81a4c510f7dc67fc56159252dd52aa5eb.jpg![CSDN移动问答][1]这是我拿messegebox打出来insert into语句的信息 向左转|向右转 这是提示的错误信息. 源码是hr=m_pConnection->Open(("Provider=Microsoft.Jet.OLEDB.4.0;Data S

探讨SQL Server批量向数据库插入数据的性能优化问题

昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的http://www.aliyun.com/zixun/aggregation/14109.html">性能优化问题,顿时来了兴趣,把自己的想法向两位同事说了一下,于是有了本文. 公司技术背景:数据库访问类(xxx.DataBase.Dll)调用存储过程实现数据库的访问. 技术方案一: 压缩时间下程序员写出的第一个版本,仅仅为了完成任务,没有从程序上做任何优化,实现方式是利用数据库访问类调用存储过程,利用循环逐条插入.