我自己写了一个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");
}
// 创建时调用,创建一个表
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.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);
}
// 版本更新时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS "+EMPLOYEES_TABLE_NAME);
onCreate(db);
}
}
自己的ContentProvider派生类如下:
public class MyContentProvider extends ContentProvider{
//.........其他的省略........
@Override
public Uri insert(Uri uri, ContentValues values) {
Log.i("Employeeprovider Info===================》》》》》","this is insert function");
// 获取数据库实例
SQLiteDatabase db = dbHelper.getWritableDatabase();
//dbHelper.onCreate(db); //创建表
// 插入数据,返回行ID
Long rowID = db.insert(DBHelper.EMPLOYEES_TABLE_NAME, Employee.NAME, values);
// 如果插入成功返回Uri
if (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;
// 实例化ContentValues
ContentValues values = new ContentValues();
values.put(Employee.NAME, "android");
//values.put(Employee.GENDER, "software");
//values.put(Employee.AGE, 3);
// 获取ContentResolver,并执行插入
getContentResolver().insert(uri, values);
}
请问这是哪里的错误呢?
相关推荐
采用ContentProvider实现android sqlite数据库的共享,包含了本项目对数据库的访问和第三方项目(新建项目)对数据库的访问。
Android应用开发使用ContentProvider以及SQLite实现对数据库的相关操作,可以直接操作数据库,也可以使用ContentProvider来对数据库进行间接操作。
本资源采用面向对象思想,主要内容是将sqlite和contentprovider关联用法表达出来,可以作为复杂代码的基础
android对sqlite、contentprovider的例子
1、Android Room操作SQLite数据 2、ContentProvider使用,使用Room进行数据库操作
Android四大组件之一ContentProvider自定义Sqlite共享,实现增删查改基本功能
将任务01生词本作业中生成的生词本数据库通过自定义ContentProvider的方式,共享给其他应用。 要求如下: (1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交作业应列出操作数据的Uri及数据表的字段名称; (3) ...
ContentProvider(内容提供者)主要用于跨项目访问(操作)数据。 这个项目就是自定义内容提供者,供别的项目访问。
通过ContentProvider(内容提供者)将app中数据库对外开放(当然也可以对app本身开发);然后对数据库的增删改查就通过ContentProvider来实现;然后用ContentObserver(内容观察者)来监听数据是否有变化。当有变化...
contentprovider实现数据库的增,删,改,查,自定义组件显示
Android四种存储方式 sharedpreference,file,SQlite,contentprovider 实现创建数据库和表及增删改查
实验8 SQLite数据库与ContentProvider.doc
利用ContentProvider操作数据库,新建Testcase,并用Listview显示查询到的所有Testcase。
本示例结合ContentProvider实现了数据库的增删改查操作 并且扩展性比较好
Android中ContentProvider的示例,详细可以参见博客:http://www.cnblogs.com/plokmju/p/android_ContentProvider.html
使用Android提供的contentprovider操作数据库的demo。
Android源码演示简单的SQLite数据库常用操作,不用contentProvider,直接用裸sql进行操作,示例效果如截图示,源码主要想表现两个意图: 1.介绍:DatabaseHelper. 2.删除表的知道了,但是删除数据库的没有发现. ...
Android学习ContentProvider数据更新与Observer模式一Observer模式意图: 定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被更新。 依赖(Dependents)、发布-...
Android数据库ContentProvider封装原理.pdf
关于android的数据存储-SQLite-ContentProvider-preferences