值没有插入到 SQLite 数据库

2024-01-02

我创建了一个用于测试的应用程序two edittexts (Email and password)和 2 个按钮(submit and viewdata)。我正在调试这个应用程序,它工作正常。

我想通过添加一个来更新此应用程序Edittext (Name)并升级SQLite Database in onUpgrade()方法。代码如下所示。

public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME="upgrade";
private static final int DATABASE_VERSION=2;

//details table details
public static final String TABLE_NAME_Details="details";
public static final String USERNAME="USERNAME";
public static final String PASSWORD="PASSWORD";
public static final String Name="Name"; //newly added column in version 2


public static final String TABLE_NAME_Details_temp="temp";
public static final String USERNAME_temp="USERNAME";
public static final String PASSWORD_temp="PASSWORD";
public static final String Name_temp="Name";

//create table statements for version 2
public static final String Create_Table_Details = "CREATE TABLE "
+ TABLE_NAME_Details + " (" + USERNAME + " TEXT PRIMARY KEY,"
+ PASSWORD + " TEXT ,"
+ Name + " TEXT"
+")";

/*   creation for version 1
private static final String Create_Table_Details = "CREATE TABLE " + 
TABLE_NAME_Details + "("
+ USERNAME + " TEXT PRIMARY KEY,"
+ PASSWORD + " TEXT"
+ ")";*/
//Alter table statements FOR onUpgrade()
//private static final String ALTER_Details = "ALTER TABLE " + 
TABLE_NAME_Details + " ADD COLUMN" + Name + " TEXT";
public DatabaseHelper(Context context)
{
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try{
db.execSQL(Create_Table_Details);
Log.d("database","installed successfully");
}catch (Exception e)
{
e.printStackTrace();
Log.e("/test","Exception due to"+e.toString());
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{

String TEMP_CREATE_CONTACTS_TABLE = "CREATE TABLE " + 
TABLE_NAME_Details_temp + "("
+ USERNAME_temp + " TEXT," + PASSWORD_temp + " TEXT )";
db.execSQL(TEMP_CREATE_CONTACTS_TABLE);

db.execSQL("INSERT INTO " + TABLE_NAME_Details_temp + " SELECT " +  
USERNAME + ", "
+  PASSWORD + " FROM " + TABLE_NAME_Details);

db.execSQL("DROP TABLE "+ TABLE_NAME_Details);

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_NAME_Details + "("
+ USERNAME + " TEXT," + PASSWORD + " TEXT," + Name + " TEXT )";
db.execSQL(CREATE_CONTACTS_TABLE);
db.execSQL("INSERT INTO " + TABLE_NAME_Details + " SELECT " +  
USERNAME_temp + ", "
+  PASSWORD_temp + ", " +  Name_temp + ", " + null + " FROM " + 
TABLE_NAME_Details_temp);
db.execSQL("DROP TABLE " + TABLE_NAME_Details);
}

public boolean insertData(String username, String password,String name)
{
try{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put(USERNAME,username);
contentValues.put(PASSWORD,password);
contentValues.put(Name,name);
long result=db.insertOrThrow(TABLE_NAME_Details, null, contentValues);
if(result==-1)
return false;
else
return true;
}catch(Exception e)
{
e.printStackTrace();
Log.e("/test","Exception due to"+e.toString());
return false;
}
}
//update value
public boolean updatePassword(String LoggedUsername)
{
SQLiteDatabase db = null;
try {
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(PASSWORD, "test");
if (db.isOpen()) {
db.update(TABLE_NAME_Details, values, USERNAME + "='" + 
LoggedUsername+"'",null);
return true;
}
else
return false;
} catch (Exception e) {
Log.d("eEmp/DBUpdateUser ", e.toString());
return false;
}
}
//getting data from database
public Cursor getAllData()
{
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from "+TABLE_NAME_Details,null);
return res;
}
}

我安装了第一个版本并且工作正常,然后卸载了。

卸载后,安装第二版本并存储数据。它也工作正常。

当我尝试在调试模式下使用第二版本更新第一个版本时,应用程序更新成功,并且在第一个版本中输入的数据可见。当我尝试将数据存储在第二个版本中时,数据没有插入到 sqlite 数据库中。为什么?

调试时,调用了 insert 方法,但这里if(result==-1)我得到 -1 而不是 1。因此,数据控制来自该方法,并且数据没有插入到数据库中。

例如:在第一个版本中:我输入了用户名:stackoverflow和密码stackoverflow。 我将应用程序更新到第二版本并更新成功。现在我输入用户名:hello密码:hello name:hello然后单击提交按钮。

之后如果我点击viewdata按钮:显示用户名:stackoverflow密码stackoverflow名称:空。但不显示第二版本中插入的数据。

任何帮助,将不胜感激。请帮我提供正确的解决方案。

谢谢。


尝试这个..

      // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        String TEMP_CREATE_CONTACTS_TABLE = "CREATE TABLE " + TEMP_TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + KEY_ADDRESS + " TEXT)";
        db.execSQL(TEMP_CREATE_CONTACTS_TABLE);

        // Create an temporaty table that can store data of older version

        db.execSQL("INSERT INTO " + TEMP_TABLE_CONTACTS + " SELECT " +  KEY_ID + ", "
                +  KEY_NAME + ", " +  KEY_ADDRESS + " FROM " + TABLE_CONTACTS);

// Insert data into temporary table from existing older version database (that doesn't contains ADDRESS2 //column)

        db.execSQL("DROP TABLE "+ TABLE_CONTACTS);
// Remove older version database table

        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + KEY_ADDRESS + " TEXT," + KEY_ADDRESS2 + " TEXT )";
        db.execSQL(CREATE_CONTACTS_TABLE);

// Create new table with ADDRESS2 column
        db.execSQL("INSERT INTO " + TABLE_CONTACTS + " SELECT " +  KEY_ID + ", "
                +  KEY_NAME + ", " +  KEY_ADDRESS + ", " + null + " FROM " + TEMP_TABLE_CONTACTS);
// Insert data ffrom temporary table that doesn't have ADDRESS2 column so left it that column name as null.     
        db.execSQL("DROP TABLE " + TEMP_TABLE_CONTACTS);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

值没有插入到 SQLite 数据库 的相关文章

随机推荐

  • 在MySQL中模拟滞后函数

    time company quote 0000 00 00 00 00 00 GOOGLE 40 2012 07 02 21 28 05 GOOGLE 60 2012 07 02 21 28 51 SAP 60 2012 07 02 21
  • 如何使用搜索参数搜索Html表格数据

    我有一个 HTML 表 我正在其中填充 JSON 数据 我提供了一个搜索字段 它提供了搜索表数据 现在我想做的是 我有一个select由表头名称组成的下拉列表 单击该选项后 我只想搜索该特定列 假设这里我有一个列名称为User Code 因
  • 如何从 Pinterest API 获取搜索源

    我正在寻找以下的搜索源Pinterest移动应用程序API 我可以知道如何获取搜索源吗Pinterest API 自 2019 年起 此功能已被弃用 我认为this https github com cypherpunk99 guipint
  • Smalltalk中new和initialize的区别?

    新手问题 new和initialize有什么区别 确切地 当您发送消息 new时 它不仅创建对象 而且发送消息 initialize 这使您可以自定义对象的初始化 看 Behavior gt gt new Answer a new init
  • 在 Windows 上查找使用端口的进程的 PID

    我的服务在经典启动时崩溃 java rmi server ExportException Listen failed on port 9999 我怎样才能找到杀死它的进程 只需打开命令 shell 并输入 假设您的端口是 123456 ne
  • React-apollo 的动态突变文档

    我需要动态更改我的突变文档 以便能够在单个突变中创建多个项目 所以我有这个功能createOrderName它需要一个整数并能够创建正确的突变文档 例如 createOrderName 2 gets mutation createOrder
  • Ruby 中解析 HTML 文档的方法?

    就像 PHP 中的 DOMDocument 类一样 RUBY 中是否有任何类 即核心 RUBY 可以从 HTML 文档中解析并获取节点元素值 目前还没有内置的 HTML 解析器 但有一些非常好的解析器可用 特别是Nokogiri http
  • 如何使用 CarrierWave 重新组织现有文件夹层次结构?

    我正在尝试使用以下命令在我的 S3 存储桶中移动文件CarrierWave重新组织文件夹结构 我来到一个现有的 Rails 应用程序 其中一个类的所有图像都被上传到一个名为的文件夹中 uploads 这会导致问题 如果两个用户上传具有相同文
  • 使用paint(Graphics p)时删除java中的一行?

    我使用以下函数画了一条线 public void paint Graphics p super paint p p drawLine 600 200 580 250 我想知道有没有办法删除这一行 那么是否可以在main 程序的方法 您可以使
  • 使用 JavaScript 重新排列 ListBox 元素会导致回发时发生事件验证错误

    我创建了一个项目交换器控件 其中包含两个列表框和一些按钮 允许我在两个列表之间交换项目 交换是使用 javascript 完成的 我还在列表中上下移动项目 基本上 当我将项目移动到右侧的列表框时 我将元素的数据键 GUID 存储在隐藏字段中
  • 有没有办法加快 numpy.where 的循环速度?

    想象一下 您有一个分割图 其中每个对象都由唯一索引标识 例如看起来与此类似 对于每个对象 我想保存它覆盖的像素 但我只能提出标准for循环至今 不幸的是 对于包含数千个单独对象的较大图像 这结果非常慢 至少对于我的真实数据来说是这样 我能以
  • 如何在 Blackberry 中以编程方式发送短信

    如何在黑莓手机中以编程方式发送短信 我在某处读到 我需要服务器端和客户端代码来发送短信 这是真的吗 为了将消息从一个设备发送到另一个设备或从模拟器发送到设备 我真的需要服务器端和客户端代码吗 我在客户端的某个地方找到了这段代码 但我没有得到
  • 这种模式有名字吗? (C# 编译时类型安全,具有不同类型的“params”参数)

    这种模式有名字吗 假设您想要创建一个采用可变数量参数的方法 每个参数都必须是一组固定类型 以任何顺序或组合 之一 并且其中一些类型您无法控制 一种常见的方法是让您的方法采用 Object 类型的参数 并在运行时验证类型 void MyMet
  • as3 - 从父 swf 到子 swf 的调度事件

    我有一个主要的 父 swf 它加载了其他几个swf 如果主 swf 中发生某些情况 我需要将其告知其中一个子 swf 反过来这似乎也很有效 任何子级都可以简单地使用dispatchEvent 并且我可以设置主swf 来侦听该事件 但是 我无
  • 真正的不安全代码性能

    我知道不安全的代码更适合访问 Windows API 之类的东西并进行不安全的类型转换 而不是编写性能更高的代码 但我想问您是否注意到使用它在实际应用程序中带来了任何显着的性能改进与安全的 C 代码相比 一些性能测量 性能优势并不像您想象的
  • 如何使用 spring-boot 外部化数据源配置?

    我目前正在尝试将现有的 spring 应用程序移动到 spring boot 从而重新创建无需启动即可工作的内容 我想从外部源配置一些属性 如 spring datasource 具体来说是一个包含多个属性文件的文件夹 我设置了一个配置类来
  • 简单的 Android 相机应用程序 - 旋转导致 NullPointerException

    我是 Android 开发新手 正在摆弄相机 我只是想创建一个简单的应用程序 它可以使用本机相机应用程序拍照并返回该图像的文件路径 我的工作正常 但我遇到了一个奇怪的错误 当我点击按钮启动相机时 如果我在相机应用程序中更改屏幕方向 并且在退
  • 如何将字符串格式化为越南货币?

    如果我将 区域和语言 中的格式设置为美国 CultureInfo cul CultureInfo CurrentCulture string decimalSep cul NumberFormat CurrencyDecimalSepara
  • jQueryUI 可拖动帮助器选项帮助

    是否可以修改 jQueryUI 使用可拖动元素创建的克隆助手 我不想要精确的克隆作为助手 我只想要类似的东西 For the helper选项 而不是clone 使用返回 DOM 对象的函数 使这个对象以任何你喜欢的方式 相似 像这样的东西
  • 值没有插入到 SQLite 数据库

    我创建了一个用于测试的应用程序two edittexts Email and password 和 2 个按钮 submit and viewdata 我正在调试这个应用程序 它工作正常 我想通过添加一个来更新此应用程序Edittext N