2016-12-14 104 views
2

所以我试图创建我的第一个sqLite数据库。这非常简单。我需要的只是它有一列只包含整数。我想添加的整数是从意图中的putExtra。我也希望能够添加和删除表中的整数。我一直在试着按照你的一些视频来做到这一点,但我无法弄清楚。首先sqLite数据库:试图将整数添加到数据库

我的继承人MbDbHandler代码

package com.example.zach.listview; 

import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.content.Context; 
import android.content.ContentValues; 

public class MyDBHandler extends SQLiteOpenHelper{ 

private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "checked_routes.db"; 
public static final String TABLE_CHECKED_ROUTES = "checked_routes"; 
public static final String COLUMN_ID = "_checkedRoutes"; 

public MyDBHandler(Context context, String name,  SQLiteDatabase.CursorFactory factory, int version) { 
    super(context, DATABASE_NAME, factory, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String query = "CREATE_TABLE " + TABLE_CHECKED_ROUTES + "(" + 
      COLUMN_ID + " INTEGER PRIMARY KEY " + ");"; 

    db.execSQL(query); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP_TABLE_IF_EXISTS " + TABLE_CHECKED_ROUTES); 
    onCreate(db); 
} 

/////Add row to table 
public void addCheckedRoute(CheckedRoutes checkedRoute){ 

    ContentValues values = new ContentValues(); 
    values.put(COLUMN_ID, checkedRoute.get_checkedRoute()); 
    SQLiteDatabase db = getWritableDatabase(); 
    db.insert(TABLE_CHECKED_ROUTES, null, values); 
    db.close(); 
} 

////Delete row from table 
public void deleteCheckedRow(int checkedRoute){ 
    SQLiteDatabase db = getWritableDatabase(); 
    db.execSQL("DELETE FROM " + TABLE_CHECKED_ROUTES + "WHERE " + COLUMN_ID  + "=\"" + checkedRoute + "\";"); 
} 
} 

我的继承人CheckedRoutes类为DB

package com.example.zach.listview; 


public class CheckedRoutes { 

int _checkedRoute; 

public void set_checkedRoute(int _checkedRoute){ 
    this._checkedRoute = _checkedRoute; 
} 

public int get_checkedRoute(){ 
    return _checkedRoute; 
} 
} 
adapter class

这里哪里我试图使用DB。

MyDBHandler dbHandler; 
dbHandler = new MyDBHandler(this, null, null, 1); 

int listViewItemPosition = ((Activity) getContext()).getIntent().getIntExtra("listViewItemPosition",0); 

     CheckedRoutes checkedRoute = new CheckedRoutes(listViewItemPosition); 
     dbHandler.addCheckedRoute(checkedRoute); 

,但我得到一个错误说

CheckedRoutes()CheckedRoutes不能应用到INT在我listViewItemPosition。

我只是不认为我已经正确设置了数据库以取得int值。

任何帮助将不胜感激谢谢!

+1

你得到的事实,listViewItemPosition不是一个int的错误二重奏。 as CheckedRoutes constructor take int .. – skyw00lker

+0

为什么'listViewItemPosition'不是int ...调用构造函数时出现问题.. @ skyw00lker – ELITE

+0

'.getIntExtra(“listViewItemPosition”,0)'只会返回一个整数。 。 – ELITE

回答

1

有两个错误,我在你的代码

  • 发现在onCreate和Handler类的onUpgrade方法。 您正在执行错误的SQL查询。

    @Override 
    public void onCreate(SQLiteDatabase db) { 
        String query = "CREATE TABLE " + TABLE_CHECKED_ROUTES + "(" + 
         COLUMN_ID + " INTEGER PRIMARY KEY " + ");"; 
    
        db.execSQL(query); 
    } 
    
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CHECKED_ROUTES); 
        onCreate(db); 
    } 
    

不要使用两者之间下划线。

  • 还要检查CheckedRoutes不具有参数化构造,所以改变CheckedRoutes声明如下

    CheckedRoutes checkedRoute = new CheckedRoutes(); 
    

_checkedRoute设定值如下

checkedRoute.set_checkedRoute(listViewItemPosition); 

希望它会帮你页。

+0

谢谢我试过上面的代码,但是当我使用.set_checkedRoute时我无法解析方法.set_checkedRoute。编辑:nvm现在工作。谢谢! – zsh5032

0

你可以检查一下这个构造函数是否存在吗?我找不到任何

CheckedRoutes checkedRoute = new CheckedRoutes(listViewItemPosition);