标签: database-update

Android SQLite数据库,为什么删除表并在升级时重新创建

在我正在关注的教程和我看到的更多地方,onUpgrade - > drop table if exists,然后重新创建表.

这样做的目的是什么?

private static class DbHelper extends SQLiteOpenHelper{

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_NAME + " TEXT NOT NULL, " +
                KEY_HOTNESS + " TEXT NOT NULL);"
        );  
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); …
Run Code Online (Sandbox Code Playgroud)

database sqlite android drop-table database-update

29
推荐指数
2
解决办法
4万
查看次数

在模型更改时更新数据库架构而不会丢失数据

背景:假设我正在使用实体框架,并且映射的实体之一如下:

class Foo
{
    public int ID { get; set; }
    public string Bar { get; set; }
    // other useful properties
}
Run Code Online (Sandbox Code Playgroud)

使用映射:

class FooMap : EntityTypeConfiguration<Foo>
{
    // bear me with, I know this is redundant right now
    ToTable("Foo");
    HasKey(e => e.ID);
    Property(e => e.ID).HasColumnName("ID");
    Property(e => e.Bar);
}
Run Code Online (Sandbox Code Playgroud)

在某个地方,我们需要更改列名称,Foo因为我的老板告诉我Foo需要一个更奢侈的名称ID,否则我们的客户会不高兴。他告诉我们也将其重命名为“FooID”:

class FooMap : EntityTypeConfiguration<Foo>
{
    // bear me with, I know this is redundant right now
    ToTable("Foo");
    HasKey(e => e.ID);
    Property(e …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework database-update ef-code-first

8
推荐指数
1
解决办法
2万
查看次数

Liquibase对Oracle DDL的幂等性

我正在调查使用Liquibase进行使用Oracle的新项目,我想知道如何确保我的changeSet足够强大,可以在没有人工干预的情况下从任何类型的故障中恢复.理想情况下,我会使用runInTransaction属性,这将允许DDL在失败时回滚,但Oracle会自动提交DDL.对于这种情况,文档建议:

因此,通常最好每个changeSet只进行一次更改,除非您希望将一组非自动提交更改应用为插入数据等事务.

每个changeSet有一个DDL可以减少出现问题的几率,但不会消除它们.如果DDL成功,但对DATABASECHANGELOG的更新失败,从我的测试中看来,Liquibase似乎卡住了,需要手动干预.

有必要在每一步使用前提条件来避免这个问题吗?这使得生成的changeSet非常冗长.这是Liquibase示例表定义之一:

<changeSet author="jsmith" id="1">
    <createTable tableName="departments"
                 remarks="The departments of this company. Does not include geographical divisions.">
        <column name="id" type="number(4,0)">
            <constraints nullable="false" primaryKey="true"
                         primaryKeyName="DPT_PK"/>
        </column>
        <column name="dname" type="varchar2(14)"
                remarks="The official department name as registered on the internal website."/>
    </createTable>
    <addUniqueConstraint constraintName="departments_uk1"
                         columnNames="dname" tableName="departments"/>
    <createSequence sequenceName="departments_seq"/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)

为了使这个幂等,我认为它必须改为如下:

<changeSet author="jsmith" id="1">
    <preConditions onFail="MARK_RAN">
        <not>
            <tableExists tableName="departments" />
        </not>
    </preConditions>
    <createTable tableName="departments"
        remarks="The departments of this company. Does not include geographical divisions.">
        <column name="id" type="number(4,0)" / column>
            <column name="dname" type="varchar2(14)" …
Run Code Online (Sandbox Code Playgroud)

oracle liquibase database-update

5
推荐指数
1
解决办法
1221
查看次数

Android:onUpgrade不调用数据库升级

我正在开发应用程序的第二个版本。我正面临一个问题。

在我的应用程序中,数据库位于资产文件夹中。现在,我想从第二个版本中的assets文件夹更新数据库。

我尝试将代码升级为:

// Data Base Version.
private static final int DATABASE_VERSION = 2;
Run Code Online (Sandbox Code Playgroud)

我将版本从1更改为2。

//构造函数

public DataBaseHelperClass(Context myContext) {     
    super(myContext, DATABASE_NAME, null ,DATABASE_VERSION);
    this.context = myContext;
    //The Android's default system path of your application database.
    DB_PATH = "/data/data/com.example.myapp/databases/";
}
Run Code Online (Sandbox Code Playgroud)

//创建数据库

public void createDataBase() throws IOException{
    //check if the database exists
    boolean databaseExist = checkDataBase();

    if(databaseExist){
        this.getWritableDatabase();
    }else{
        this.getReadableDatabase();
        try{
            copyDataBase();
        } catch (IOException e){
            throw new Error("Error copying database");
        }
    }// end if else dbExist
} // end createDataBase(). …
Run Code Online (Sandbox Code Playgroud)

database sqlite android database-update android-sqlite

5
推荐指数
1
解决办法
1万
查看次数

批量更新数据库

我一直在这个网站上看一段时间,但没有找到答案.我正在尝试对我知道已经在表中的数据进行批量更新.当某个条件返回行ID时,我需要设置一列.这是单一方法,但我想提高效率,并将其作为批量处理.我们的数据库不在Provider中,因此我只使用Helper类.

public void markUnavailable(int myId) {
    SQLiteDatabase db = this.getWritableDatabase();
    String sql = "UPDATE " + MYTABLE + " SET " + Col.IS_AVAILABLE + "= 0"+ " WHERE " + Col.MY_ID + "=" + myId;
    db.execSQL(sql);
    db.close();
}
Run Code Online (Sandbox Code Playgroud)

我想传入一组myIds来进行批量更新.我无法执行Insert或Replace语句,因为我无法访问所有列数据,并且由于代码更改太多而不希望通过它.

public void markUnavailable(int[] myId) {
   // ????
   /// need some way to loop through and update in bulk
}
Run Code Online (Sandbox Code Playgroud)

sqlite android database-update bulkupdate

2
推荐指数
2
解决办法
4901
查看次数

SQL UPDATE循环非顺序键

我正在编写一个C#应用程序,它将更新SQL Server数据库中的字段.我正在测试的当前算法只是从"状态"字段中提取数据,将每个值存储在ArrayList中,将其大写,然后将其写回数据库.我遇到逻辑问题.

我将所有值都拉入ArrayList并将它们大写.这工作正常.我现在有一个数组,例如,100个值(即myArray[0]- myArray[99]).然后我使用FOR循环将值写回数据库:

for (int i = 0; i <= (myArray.Count - 1); i++)
{
   SqlCommand myCommand = 
      new SqlCommand("UPDATE myList SET State = '" + recordArray[i].ToString() + 
                     "' WHERE uniqueID = '" + (i + 1) + "'", dbConnection);
   myCommand.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

我在上面的例子中使用"uniqueID"来根据主键放置这些值.然而,问题是主键几乎是顺序的; 序列中有一些缺失的数字.因此,即使我确切地拥有了我需要的值的数量,并且它们在数组中以正确的顺序被推回到数据库中,一旦我在序列中失效,其余的数据就会被放置在错误的领域.我知道这是我的逻辑失误,但我不知道如何确保正确地放置每个单独的价值.

在此先感谢您的帮助.

c# sql sql-server database-update

1
推荐指数
2
解决办法
1530
查看次数

恢复更新的数据 - SQL Server 2005

我有一个问题,在使用sql server 2005时,我已执行更新查询而没有where子句(错误地)并且列的所有原始值都丢失了.

我怎样才能得到旧值?

欢迎提出任何建议/提示/解决方案,我们将不胜感激.

sql sql-server sql-server-2005 database-update sql-update

1
推荐指数
1
解决办法
3848
查看次数

如何在数据库中保存数据

请参考下面的代码.我正在使用phpMyAdmin将我的数据存储在xampp中(作为我的服务器).我找到了这段代码并添加到我的网站中.我的问题是; 如何将结果保存在数据库中.任何人??

<!DOCTYPE html>
<html>
<head>
<title>Geo City Locator by geoip-db.com</title>
</head>
<body>
    <div>Country: <span id="country"></span></div>
    <div>State: <span id="state"></span></div>
    <div>City: <span id="city"></span></div>
    <div>Postal: <span id="postal"></span></div>
    <div>Latitude: <span id="latitude"></span></div>
    <div>Longitude: <span id="longitude"></span></div>
    <div>IP address: <span id="ipv4"></span></div>                             
</body>
<script>

    var country = document.getElementById('country');
    var state = document.getElementById('state');
    var city = document.getElementById('city');
    var postal = document.getElementById('postal');
    var latitude = document.getElementById('latitude');
    var longitude = document.getElementById('longitude');
    var ip = document.getElementById('ipv4');

    function callback(data)
    {
        country.innerHTML = data.country_name;
        state.innerHTML = data.state;
        city.innerHTML = data.city;
        postal.innerHTML = data.postal; …
Run Code Online (Sandbox Code Playgroud)

php database mysqli database-update

-5
推荐指数
1
解决办法
272
查看次数