Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中的SQLite比较表_Java_Android_Sqlite - Fatal编程技术网

Java Android中的SQLite比较表

Java Android中的SQLite比较表,java,android,sqlite,Java,Android,Sqlite,是否有任何方法可以比较具有相同属性的表,如果它们相同则返回true,如果不相同则返回false?谢谢。不直接,但非常简单 也就是说,sqlite存储用于定义表sqlite_master模式中的表的SQL 对于列定义的SQL与SQL的最简单比较,可以使用以下SQL:- WITH tablenames(table1,table2) AS (SELECT 'table1' /*<<<<< change accordingly */,'table2' /*<<&

是否有任何方法可以比较具有相同属性的表,如果它们相同则返回true,如果不相同则返回false?谢谢。

不直接,但非常简单

也就是说,sqlite存储用于定义表sqlite_master模式中的表的SQL

对于列定义的SQL与SQL的最简单比较,可以使用以下SQL:-

WITH tablenames(table1,table2) AS (SELECT 'table1' /*<<<<< change accordingly */,'table2' /*<<<<< change accordingly*/)
SELECT 
    COALESCE(
        (SELECT substr(sql,instr(sql,'(')) FROM sqlite_master WHERE name = (SELECT table1 FROM tablenames)) =
        (SELECT substr(sql,instr(sql,'(')) FROM sqlite_master WHERE name = (SELECT table2 FROM tablenames))
    ,0)
;
注意,这将考虑SQL作为比较失败的细微差别。 实例 数据库助手DatabaseHelper.java

请注意,实际上这三个表都是相同的,但第三个表在用于生成列定义的SQL中不同,因此将被视为不同的表

COALESCE用于将sqlite_master中的空no-this表转换为0 false

调用代码MainActivity.java

结果:- i、 e

表1和表2被认为是相同的 表2和表3被认为是不同的 表1和表3被认为是不同的 表1被视为与表1相同。
你想在Android Studio中这样做是为了在你的开发环境中获得结果,还是在你的应用程序中执行一些逻辑或以某种方式向你的用户显示结果?@Code peedient我想这样做是为了检查在比较旧表和新表之后是否必须更新新闻列表视图。谢谢如果我当时理解正确,您希望在应用程序中执行此签入逻辑。这与Android Studio无关。看起来有人已经删除了标签并编辑了你的问题来澄清这一点。应该只用于关于IDE本身的问题,而不是关于您正在使用IDE编写的代码的问题。我不知道我之前的感谢评论到哪里去了,但再次感谢。
public boolean compareTable(String table1, String table2) {
    SQLiteDatabase db = this.getWritableDatabase();
    String result_column = "result";
    boolean rv = false;
    Cursor csr = db.rawQuery("WITH tablenames(table1,table2) AS (SELECT ? ,? )" +
            "SELECT " +
            "COALESCE(" +
            "(SELECT substr(sql,instr(sql,'(')) FROM sqlite_master WHERE name = (SELECT table1 FROM tablenames)) =" +
            "(SELECT substr(sql,instr(sql,'(')) FROM sqlite_master WHERE name = (SELECT table2 FROM tablenames))" +
            ",0) " +
            "AS " + result_column +
            ";",new String[]{table1,table2});
    if (csr.moveToFirst()) {
        rv = (csr.getInt(csr.getColumnIndex(result_column)) > 0);
    }
    csr.close();
    return rv;
}
public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DBNAME = "mydb";
    public static final int DBVERSION = 1;

    public static final String TABLE = "htmlstore";
    public static final String IDCOLUMN = BaseColumns._ID;
    public static final String HTMLCOLUMN = "html";

    public static final String TABLE2 = "otherstore";
    public static final String TABLE3 = "storeother";

    SQLiteDatabase db;

    public DatabaseHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
        db = this.getWritableDatabase();

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String crt_htmlstore_table = "CREATE TABLE IF NOT EXISTS " + TABLE + "(" +
                IDCOLUMN + " INTEGER PRIMARY KEY," +
                HTMLCOLUMN + " TEXT" +
                ")";
        db.execSQL(crt_htmlstore_table);
        String crt_otherstore_table = "CREATE TABLE IF NOT EXISTS " + TABLE2 + "(" +
                IDCOLUMN + " INTEGER PRIMARY KEY," +
                HTMLCOLUMN + " TEXT" +
                ")";
        db.execSQL(crt_otherstore_table);
        String crt_storeother_table = "CREATE TABLE IF NOT EXISTS " + TABLE3 + "(" +
                HTMLCOLUMN + " TEXT, " +
                IDCOLUMN + " INTEGER, " +
                " PRIMARY KEY(" + IDCOLUMN + ")" +
                ")";
        db.execSQL(crt_storeother_table);
    }


    public long insert(String html) {
        ContentValues cv = new ContentValues();
        cv.put(HTMLCOLUMN,html);
        return db.insert(TABLE,null,cv);
    }

    public String getHTML(long id) {
        String rv = "";
        Cursor csr = db.query(TABLE,new String[]{HTMLCOLUMN},IDCOLUMN+"=?",new String[]{String.valueOf(id)},null,null,null);
        if (csr.moveToFirst()) {
            rv = csr.getString(csr.getColumnIndex(HTMLCOLUMN));
        }
        csr.close();
        return rv;
    }

    public boolean compareTable(String table1, String table2) {
        SQLiteDatabase db = this.getWritableDatabase();
        String result_column = "result";
        boolean rv = false;
        Cursor csr = db.rawQuery("WITH tablenames(table1,table2) AS (SELECT ? ,? )" +
                "SELECT " +
                "COALESCE(" +
                "(SELECT substr(sql,instr(sql,'(')) FROM sqlite_master WHERE name = (SELECT table1 FROM tablenames)) =" +
                "(SELECT substr(sql,instr(sql,'(')) FROM sqlite_master WHERE name = (SELECT table2 FROM tablenames))" +
                ",0) " +
                "AS " + result_column +
                ";",new String[]{table1,table2});
        if (csr.moveToFirst()) {
            rv = (csr.getInt(csr.getColumnIndex(result_column)) > 0);
        }
        csr.close();
        return rv;
    }

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

    }
}
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DatabaseHelper databaseHelper = new DatabaseHelper(this);

        Log.d("TABLECOMPARE"," Result = " + String.valueOf(databaseHelper.compareTable(DatabaseHelper.TABLE,DatabaseHelper.TABLE2)));
        Log.d("TABLECOMPARE"," Result = " + String.valueOf(databaseHelper.compareTable(DatabaseHelper.TABLE2,DatabaseHelper.TABLE3)));
        Log.d("TABLECOMPARE"," Result = " + String.valueOf(databaseHelper.compareTable(DatabaseHelper.TABLE,DatabaseHelper.TABLE3)));
        Log.d("TABLECOMPARE"," Result = " + String.valueOf(databaseHelper.compareTable(DatabaseHelper.TABLE,DatabaseHelper.TABLE)));
    }
}
2020-01-14 07:23:29.624 D/TABLECOMPARE:  Result = true
2020-01-14 07:23:29.625 D/TABLECOMPARE:  Result = false
2020-01-14 07:23:29.625 D/TABLECOMPARE:  Result = false
2020-01-14 07:23:29.626 D/TABLECOMPARE:  Result = true