我正在尝试制作简单的数据库输入应用程序,其中 当我单击按钮以启动Enter函数时,它应在数据库中插入一些值。 但这不起作用。
主要的Activity按钮onclick函数(数据库变量为
SQLiteDatabase db;
private AppDBHelper mhelper;
全球 :
public void Enter(View V){
mhelper=new AppDBHelper(this);
db=mhelper.getWritableDatabase();
ContentValues val=new ContentValues();
val.put(AppContract.TaskEntry.CONTENT,"thatsall");
val.put(AppContract.TaskEntry.ID,"4");
val.put(AppContract.TaskEntry.STATE,"notStarted");
long err= this.db.insert(AppContract.TaskEntry.TABLE,null,val);
Toast.makeText(getApplicationContext(),"db ="+ err,Toast.LENGTH_SHORT).show();
db.close();
}
appContract:
public class AppContract {
public static. final String DB_NAME = "storage.db";
public static final int DB_VERSION = 1;
public class TaskEntry implements BaseColumns {
public static final String TABLE = "tasks";
public static final String CONTENT ="content";
public static final String ID ="Id";
public static final String STATE = "state";
}
AppDBhelper:
public class AppDBHelper extends SQLiteOpenHelper
{
public AppDBHelper(Context context) {
super(context, AppContract.DB_NAME, null, AppContract.DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE " + AppContract.TaskEntry.TABLE + " ( " +
AppContract.TaskEntry.ID + " TEXT , " +
AppContract.TaskEntry.STATE + " TEXT NOT NULL," +
AppContract.TaskEntry.CONTENT+ " TEXT )";
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + AppContract.TaskEntry.TABLE);
onCreate(db);
}
}
DataProvider:
public class DataProvider extends ContentProvider
{
private AppDBHelper adbhelper;
@Override
public boolean onCreate() {
adbhelper= new AppDBHelper(getContext());
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
return null;
}
@Override
public int update(Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public String getType(Uri uri) {
return null;
}
}
mainActivity中的db.insert始终返回-1我在做什么错?
编辑:这是代码的日志
10-04 15:32:40.610 9415 9445 I Process Sending signal. PID: 9415 SIG: 9 10-04 15:32:50.538 10144 10144 I art com.mycompany.myapp4 Late-enabling -Xcheck:jni 10-04 15:32:50.631 10144 10144 D TidaProvider com.mycompany.myapp4 TidaProvider() 10-04 15:32:50.647 10144 10144 V BoostFramework com.mycompany.myapp4 BoostFramework() : mPerf = com.qualcomm.qti.Performance@9eeb3f3 10-04 15:32:50.723 10144 10144 W System com.mycompany.myapp4 ClassLoader referenced unknown path: /data/app/com.mycompany.myapp4-1/lib/arm64 10-04 15:32:50.748 10144 10144 W art com.mycompany.myapp4 Class adrt.ADRT failed lock verification and will run slower. 10-04 15:32:50.748 10144 10144 W art com.mycompany.myapp4 Common causes for lock verification issues are non-optimized dex code 10-04 15:32:50.748 10144 10144 W art com.mycompany.myapp4 and incorrect proguard optimizations. 10-04 15:32:50.832 10144 10144 D AccessibilityManager com.mycompany.myapp4 current package=com.mycompany.myapp4, accessibility manager mIsFinalEnabled=false, mOptimizeEnabled=true, mIsUiAutomationEnabled=false, mIsInterestedPackage=false 10-04 15:32:50.839 10144 10144 V BoostFramework com.mycompany.myapp4 BoostFramework() : mPerf = com.qualcomm.qti.Performance@92c7fe3 10-04 15:32:50.839 10144 10144 V BoostFramework com.mycompany.myapp4 BoostFramework() : mPerf = com.qualcomm.qti.Performance@37bcde0 10-04 15:32:50.895 10144 10144 E HAL com.mycompany.myapp4 PATH3 /odm/lib64/hw/gralloc.qcom.so 10-04 15:32:50.895 10144 10144 E HAL com.mycompany.myapp4 PATH2 /vendor/lib64/hw/gralloc.qcom.so 10-04 15:32:50.895 10144 10144 E HAL com.mycompany.myapp4 PATH1 /system/lib64/hw/gralloc.qcom.so 10-04 15:32:50.895 10144 10144 E HAL com.mycompany.myapp4 PATH3 /odm/lib64/hw/gralloc.msm8953.so 10-04 15:32:50.895 10144 10144 E HAL com.mycompany.myapp4 PATH2 /vendor/lib64/hw/gralloc.msm8953.so 10-04 15:32:50.895 10144 10144 E HAL com.mycompany.myapp4 PATH1 /system/lib64/hw/gralloc.msm8953.so 10-04 15:32:50.920 10144 10171 I Adreno com.mycompany.myapp4 QUALCOMM build : 01d2d27, I3d52eaf367 10-04 15:32:50.920 10144 10171 I Adreno com.mycompany.myapp4 Build Date : 12/10/16 10-04 15:32:50.920 10144 10171 I Adreno com.mycompany.myapp4 OpenGL ES Shader Compiler Version: XE031.09.00.03 10-04 15:32:50.920 10144 10171 I Adreno com.mycompany.myapp4 Local Branch : 10-04 15:32:50.920 10144 10171 I Adreno com.mycompany.myapp4 Remote Branch : 10-04 15:32:50.920 10144 10171 I Adreno com.mycompany.myapp4 Remote Branch : 10-04 15:32:50.920 10144 10171 I Adreno com.mycompany.myapp4 Reconstruct Branch : 10-04 15:32:50.925 10144 10171 I OpenGLRenderer com.mycompany.myapp4 Initialized EGL, version 1.4 10-04 15:32:50.925 10144 10171 D OpenGLRenderer com.mycompany.myapp4 Swap behavior 1 10-04 15:32:51.775 10144 10144 V BoostFramework com.mycompany.myapp4 BoostFramework() : mPerf = com.qualcomm.qti.Performance@76280cc 10-04 15:32:51.864 10144 10144 E SQLiteLog com.mycompany.myapp4 (1) table tasks has no column named id 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 Error inserting state=notStarted content=thatsall id=4 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 android.database.sqlite.SQLiteException: table tasks has no column named id (code 1): , while compiling: INSERT INTO tasks(state,content,id) VALUES (?,?,?) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1470) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at com.mycompany.myapp4.MainActivity.Enter(MainActivity.java:53) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at java.lang.reflect.Method.invoke(Native Method) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.view.View$DeclaredOnClickListener.onClick(View.java:4702) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.view.View.performClick(View.java:5619) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.view.View$PerformClick.run(View.java:22295) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.os.Handler.handleCallback(Handler.java:754) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.os.Handler.dispatchMessage(Handler.java:95) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.os.Looper.loop(Looper.java:163) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at android.app.ActivityThread.main(ActivityThread.java:6342) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at java.lang.reflect.Method.invoke(Native Method) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880) 10-04 15:32:51.865 10144 10144 E SQLiteDatabase com.mycompany.myapp4 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770) 10-04 15:32:51.878 10144 10144 I Toast com.mycompany.myapp4 Show toast from OpPackageName:com.mycompany.myapp4, PackageName:com.mycompany.myapp4
我还从db中删除了T_id,并且id变量不用于主键,因为我不需要任何主键
编辑2:我发现了问题! 我实际上并没有更新数据库版本,而只是更改了数据库结构,这导致了错误。 感谢所有人的帮助