第一个 sqLite 数据库:尝试将整数添加到数据库

Posted

技术标签:

【中文标题】第一个 sqLite 数据库:尝试将整数添加到数据库【英文标题】:First sqLite database: trying to add integers to database 【发布时间】:2017-04-29 07:42:25 【问题描述】:

所以我正在尝试创建我的第一个 sqLite 数据库。这是非常简单的事情。我所需要的只是让它有一列只包含整数。我要添加的整数来自意图的putExtra。我还希望能够在表中添加和删除整数。我一直在尝试关注 youtube 上的一些视频来完成此操作,但我无法弄清楚。

这是我的 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 中,我正在尝试使用数据库。

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 不能应用于我的 listViewItemPosition 上的 int。

我只是认为我没有正确设置数据库以获取 int 值。

任何帮助将不胜感激!

【问题讨论】:

由于 listViewItemPosition 不是 int 的事实,您会遇到错误。因为 CheckedRoutes 构造函数需要一个 int.. 为什么listViewItemPosition不是int...调用构造函数有问题..@skyw00lker .getIntExtra("listViewItemPosition",0) 将只返回一个整数.. 【参考方案1】:

我在你的代码中发现了两个错误

在 Handler 类的 onCreateonUpgrade 方法中。 您正在执行错误的 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);

希望对你有所帮助。

【讨论】:

感谢我尝试了上面的代码,但是当我使用 .set_checkedRoute 时,我无法解析方法 .set_checkedRoute。编辑:nvm 现在可以工作了。谢谢!【参考方案2】:

你能检查一下这个构造函数是否存在吗?没找到

  CheckedRoutes checkedRoute = new CheckedRoutes(listViewItemPosition);

【讨论】:

以上是关于第一个 sqLite 数据库:尝试将整数添加到数据库的主要内容,如果未能解决你的问题,请参考以下文章

将sqlite数据库添加到jar时出现sql错误或缺少数据库

使用 swiftyJSON 和 sqlite.swift 将基于 json 的数据添加到 sqlite 数据库中

将单独的 .sqlite 文件添加到 ios 项目

将 sqlite DB 添加到可执行 JAR 文件

如何将 SQLite .db 添加到 C#.NET 项目中

Android:创建具有关系的 SQLite 数据库