package Ġcom . le bus ish u . database Ċ Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . text . TextUtils Ċ import Ġcom . le bus ish u . database . utils . Module Reflect Tool Ċ Ċ /** Ċ Ġ* Ġ< p > Description Ġ: Ġ æķ°æį®åºĵ åįĩçº§ ï¼Į æķ°æį® è¿ ģ ç§» Ċ Ġ* Ġ 1 , å¦Ĥæŀľ æľī åŃĹæ®µ åĪłéĻ¤ Ċ Ġ* Ġ 2 ï¼Į åŃĹæ®µ æķ°éĩı ä¸į æĶ¹åıĺ Ċ Ġ* Ġ 3 ï¼Į æľī åŃĹæ®µ å¢ŀåĬł ãĢĤ Ċ Ġ* Ġ æ³¨æĦı ï¼ļ å°½ éĩı åģļ åĪ° åĪ« æĶ¹åıĺ åĪĹ åĲį ï¼Į æĶ¹ åĲį åĲİ ä¼ļ å½ĵ åģļ æĸ°å¢ŀ åŃĹæ®µ ä½¿çĶ¨ Ġå½ĵ æľī åŃĹæ®µ æĶ¹åıĺ ï¼Ī å¢ŀåĬł ï¼ī éľĢè¦ģ å¢ŀåĬł åĪ° è¡¨ åİŁ æľī åŃĹæ®µ åĲİ éĿ¢ Ċ Ġ* Ġ</ p > Ċ Ġ* ĠCreate Ġby Ġwx h Ġon Ġ 1 1 / 5 / 2 0 Ċ Ġ* ĠPhone Ġ ï¼ļ 1 5 2 3 3 6 2 0 5 2 1 Ċ Ġ* ĠEmail ï¼ļ wang xia oh ui 1 1 1 8 @ gmail . com Ċ Ġ* ĠPerson Ġin Ġcharge Ġ: Ġle bus ish u Ċ Ġ*/ Ċ class ĠModule DB Migration Helper Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġtable Temp Name Ġ= Ġ"_ TEMP " ĊĠĠĠĠĠĠĠ Ġval Ġm Instance : ĠModule DB Migration Helper Ġby Ġlazy ( mode Ġ= ĠLazy Thread Safety Mode . SYN CH RON IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModule DB Migration Helper () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġdb Name : ĠString ? Ġ= Ġ"" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿ ģ ç§» æīĢæľī çļĦæķ°æį® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠĠĠĠĠĠĠĠ Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmigrate All Table ( db : ĠSQLite Database , Ġdb Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dbName Ġ= Ġdb Name ĊĠĠĠĠĠĠĠ Ġbuild Temp Table ( db ) ĊĠĠĠĠĠĠĠ Ġrebuild Specify Tables ( db ) ĊĠĠĠĠĠĠĠ Ġrestore Table ( db , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿ ģ ç§» æĮĩå®ļ çļĦæķ°æį® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠĠĠĠĠĠĠĠ Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmigrate Specify Table ( db : ĠSQLite Database , Ġdb Name : ĠString ?, Ġvar arg Ġtables : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dbName Ġ= Ġdb Name ĊĠĠĠĠĠĠĠ Ġbuild Temp Table ( db , Ġ* tables ) ĊĠĠĠĠĠĠĠ Ġrebuild Specify Tables ( db , Ġ* tables ) ĊĠĠĠĠĠĠĠ Ġrestore Table ( db , Ġtrue , Ġ* tables ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æīĢæľī è¡¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ* Ġ@ return ĠList < String > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetAll Tables ( db : ĠSQLite Database ): ĠArrayList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġvar Ġcursor : ĠCursor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġdb . raw Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" select Ġname Ġfrom Ġsqlite _ master Ġwhere Ġtype =' table ' Ġorder Ġby Ġname ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ== Ġnull Ġ|| Ġcursor . count Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġcursor . getColumnIndex (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtableName Ġ= Ġcursor . getString ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" sqlite _ sequence ". equals ( tableName , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ" android _ metadata ". equals ( tableName , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( table Temp Name . equals ( tableName , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL (" drop Ġtable Ġ$ tableName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( tableName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ è¡¨ åŃĹæ®µ çļĦ ç»ĵæŀĦ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠĠĠĠĠĠĠ Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ* Ġ@ param Ġtable Ġ è¡¨ åĲį ĊĠĠĠĠ Ġ* Ġ@ return ĠList < Migrate > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Migr ates ( db : ĠSQLite Database , Ġtable : ĠString ?): ĠList < Migrate > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmigr ates Ġ= ĠArrayList < Migrate >() ĊĠĠĠĠĠĠĠ Ġvar Ġcursor : ĠCursor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġdb . raw Query (" PR AG MA Ġtable _ info ($ table )", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ== Ġnull Ġ|| Ġcursor . count Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmigr ates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmigrate Ġ= ĠMigrate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmigrate . cid Ġ= Ġcursor . getString ( cursor . getColumnIndex (" cid ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmigrate . name Ġ= Ġcursor . getString ( cursor . getColumnIndex (" name ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmigrate . type Ġ= Ġcursor . getString ( cursor . getColumnIndex (" type ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmigrate . d flt _ value Ġ= Ġcursor . getString ( cursor . getColumnIndex (" d flt _ value ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmigrate . not null Ġ= Ġcursor . getString ( cursor . getColumnIndex (" not null ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmigrate . pk Ġ= Ġcursor . getString ( cursor . getColumnIndex (" pk ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmigr ates . add ( migrate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmigr ates ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ è¡¨ çļĦ åĪĹ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠĠĠĠĠĠĠ Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ* Ġ@ param Ġtable Ġ è¡¨ åĲį ĊĠĠĠĠ Ġ* Ġ@ return ĠList < String > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Columns ( db : ĠSQLite Database , Ġtable : ĠString ?): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġvar Ġcursor : ĠCursor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġdb . raw Query (" SELECT Ġ* ĠFROM Ġ$ table Ġlimit Ġ 1 ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcolumns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcursor . column Names . asList () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcolumns ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æŁĲ å¼ł è¡¨ æĺ¯åĲ¦ åŃĺåľ¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtable Ġ è¡¨ åĲį ĊĠĠĠĠ Ġ* Ġ@ return Ġboolean ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtable Is Exist ( db : ĠSQLite Database , Ġtable : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( table . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġcursor : ĠCursor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġdb . raw Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT ĠCOUNT (*) ĠFROM Ġsqlite _ master ĠWHERE Ġtype =' table ' ĠAND Ġname ='$ table '", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ== Ġnull Ġ|| Ġcursor . count Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcursor . moveTo First () Ġ&& Ġcursor . getInt ( 0 ) Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¸ ħ éĻ¤ è¡¨ æķ°æį® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġclean Tables ( db : ĠSQLite Database , Ġlist : ĠList < String ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( table Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL (" DROP ĠTABLE ĠIF ĠEXISTS Ġ$ table ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º éľĢè¦ģ åįĩçº§ çļĦ è¡¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbuild Tables ( db : ĠSQLite Database , Ġlist : ĠList < String ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql s Ġ= ĠModule Reflect Tool . get CreateTable Sql s ( dbName ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sql s . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsql s . forEach Ġ{ Ġsql Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( sql Ġas ĠString ). contains ("$ s Ġ( ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĩįæĸ° åĪĽå»º æĮĩå®ļ è¡¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrebuild Specify Tables ( db : ĠSQLite Database , Ġvar arg Ġtables : ĠString ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠList < String ?> Ġ= Ġif Ġ( tables . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetAll Tables ( db ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtables . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( table Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclean Tables ( db , Ġlist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Tables ( db , Ġlist ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ æĮĩå®ļçļĦ è¡¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠĠĠĠĠĠĠĠ Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ* Ġ@ param Ġtables ĠæĮĩå®ļ çļĦæķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdrop Specify Table ( db : ĠSQLite Database , Ġvar arg Ġtables : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tables . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( table Ġin Ġtables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL (" DROP ĠTABLE ĠIF ĠEXISTS Ġ$ table ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠçĶŁæĪĲ ç¼ĵåŃĺ è¡¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠĠĠĠĠĠĠĠ Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ* Ġ@ param Ġtables ĠĠĠĠ Ġ ç¼ĵåŃĺ æĮĩå®ļ è¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbuild Temp Table ( db : ĠSQLite Database , Ġvar arg Ġtables : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ ä¸ºç©º ï¼Į åĪĻ è¿ ģ ç§» æīĢæľī è¡¨ ĊĠĠĠĠĠĠĠ Ġif Ġ( tables . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠgetAll Tables ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Temp Table ( db , Ġs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç¼ĵåŃĺ æĮĩå®ļçļĦ è¡¨ ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( table Ġin Ġtables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Temp Table ( db , Ġtable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ åİŁ æľī æķ°æį® æģ ¢å¤į åĪ° æķ°æį®åºĵ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠĠĠĠĠĠĠĠ Ġ æķ°æį®åºĵ ĊĠĠĠĠ Ġ* Ġ@ param Ġtables Ġ è¿ĺ åİŁ æĮĩå®ļ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrestore Table ( db : ĠSQLite Database , Ġis Specify : ĠBoolean , Ġvar arg Ġtables : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠArrayList < String >? ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Specify ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= ĠgetAll Tables ( db ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tables . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( table Ġin Ġtables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( table . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinsert Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġdelete Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠArrayList < String ?> () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( table Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtableName Temp Ġ= Ġtable Ġ+ Ġtable Temp Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæŁ¥è¯¢ è¡¨ æĺ¯åĲ¦ åŃĺåľ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! table Is Exist ( db , ĠtableName Temp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Specify ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . remove ( table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 , å¦Ĥæŀľ æľī åŃĹæ®µ åĪłéĻ¤ Ġ 2 ï¼Į åŃĹæ®µ æķ°éĩı ä¸į æĶ¹åıĺ Ġ 3 ï¼Į æľī åŃĹæ®µ å¢ŀåĬł ï¼Ī å°½ éĩı åģļ åĪ° åĪ« æĶ¹åıĺ åĪĹ åĲį ï¼ī ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġå½ĵ æľī åŃĹæ®µ æĶ¹åıĺ ï¼Ī å¢ŀåĬł ï¼ī éľĢè¦ģ å¢ŀåĬł åĪ° properties åĲİ éĿ¢ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Columns Ġ= Ġget Columns ( db , ĠtableName Temp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( temp Columns . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmigr ates Ġ= Ġget Migr ates ( db , Ġtable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( migrate Ġin Ġmigr ates ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! "_ id ". equals ( migrate . name , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( temp Columns . contains ( migrate . name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . add ( migrate . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . append (" INSERT ĠINTO Ġ"). append ( table ). append (" Ġ( ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . append ( TextUtils . join (",", Ġproperties )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . append (" ) ĠSELECT Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . append ( TextUtils . join (",", Ġproperties )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . append (" ĠFROM Ġ"). append ( tableName Temp ). append ("; ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL ( insert . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . delete ( 0 , Ġinsert . length ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete . append (" DROP ĠTABLE ĠIF ĠEXISTS Ġ$ tableName Temp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL ( delete . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete . delete ( 0 , Ġdelete . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete . delete ( 0 , Ġdelete . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete . append (" DROP ĠTABLE ĠIF ĠEXISTS Ġ$ tableName Temp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL ( delete . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete . delete ( 0 , Ġdelete . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// æīĢæľī æķ°æį®åºĵ çļĦ è¡¨ --- è¿ĻéĩĮ æ£Ģæµĭ æĺ¯åĲ¦ æľī åī © ä½Ļ æĹł çĶ¨çļĦ ç¼ĵåŃĺ è¡¨ ï¼Ī çī¹ åĪ« æĺ¯ ä¿®æĶ¹ è¡¨ åĲį åĲİ éĢł æĪĲ çļĦ æĹł çĶ¨ è¡¨ ç¼ĵåŃĺ ï¼ī ĊĠĠĠĠĠĠĠ Ġfor Ġ( table Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Table Ġ= Ġtable Ġ+ Ġtable Temp Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( table Is Exist ( db , Ġtable )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL (" DROP ĠTABLE ĠIF ĠEXISTS Ġ$ temp Table ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠçĶŁæĪĲ ç¼ĵåŃĺ æķ°æį®çļĦ è¡¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠĠĠĠĠĠĠ Ġdb ĊĠĠĠĠ Ġ* Ġ@ param Ġtable Ġ è¡¨ åĲį ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgenerate Temp Table ( db : ĠSQLite Database , Ġtable : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! table Is Exist ( db , Ġtable )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar ĠtableName Ġ= Ġtable ĊĠĠĠĠĠĠĠ Ġval Ġtemp Name : ĠString ? ĊĠĠĠĠĠĠĠ Ġ// Ġ è¿ĻéĩĮ ä¸»è¦ģ æĺ¯ ä¸ºäºĨ å¤ĦçĲĨ ä¸Ĭ æ¬¡ åįĩçº§ å¼Ĥå¸¸ éĢł æĪĲ çļĦ åĨ Ĺ ä½Ļ æķ°æį® ĊĠĠĠĠĠĠĠ Ġif Ġ( tableName !!. endsWith ( table Temp Name , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL (" DELETE ĠFROM Ġ$ table ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Name Ġ= Ġtable ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtableName Ġ= ĠtableName . substring ( 0 , ĠtableName . length Ġ- Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Name Ġ= Ġtable Ġ+ Ġtable Temp Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġinsert Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġdivider Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠArrayList < String ?> () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate . append (" CREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ"). append ( temp Name ). append (" Ġ( ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmigr ates Ġ= Ġget Migr ates ( db , ĠtableName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( migrate Ġin Ġmigr ates ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ åĮħåĲ« åħ³éĶ®åŃĹ ï¼Į ä¸į çĶŁæĪĲ ç¼ĵåŃĺ è¡¨ ï¼Į å¹¶ åĪłéĻ¤ åİŁ è¡¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" FROM ". equals ( migrate . name , Ġtrue ) Ġ|| Ġ" TO ". equals ( migrate . name , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL (" DELETE ĠFROM Ġ$ tableName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . add ( migrate . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate . append ( divider ). append ( migrate . name ). append (" Ġ"). append ( migrate . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġ" 1 " Ġ== Ġmigrate . pk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" INTEGER " Ġ== Ġmigrate . type Ġ&& Ġ! tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate . append (" ĠDEFAULT Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate . append (" ĠPRIMARY ĠKEY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ= Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate . append (" ); ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL ( create . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate . delete ( 0 , Ġcreate . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( properties . contains ("_ id ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . remove ("_ id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( properties . contains ("_ ID ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . remove ("_ ID ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . append (" INSERT ĠINTO Ġ"). append ( temp Name ). append (" Ġ( ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . append ( TextUtils . join (",", Ġproperties )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . append (" ) ĠSELECT Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . append ( TextUtils . join (",", Ġproperties )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . append (" ĠFROM Ġ"). append ( tableName ). append ("; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL ( insert . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . delete ( 0 , Ġinsert . length ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }