Android操作SQLite基本用法_第1頁
Android操作SQLite基本用法_第2頁
Android操作SQLite基本用法_第3頁
Android操作SQLite基本用法_第4頁
Android操作SQLite基本用法_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Android操作SQLite基本?法?.SQLit的e介紹1.SQLit簡e介SQLite是?款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計?標(biāo)是嵌?式的,?且?前已經(jīng)在很多嵌?式產(chǎn)品中使?了它,它占?資源?常的低,在嵌?式設(shè)備中,可能只需要?百K的內(nèi)存就夠了。它能夠?持Windows/Linux/Unix能夠跟很多程序語?相結(jié)合,?如Tcl、PHP、Java、C++、.Net等,還有ODBC接?,同樣?起Mysql、PostgreSQL等等主流的操作系統(tǒng),同時這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度?他們都快。2.SQLit的e特點:輕量級SQLite和C/S模式的數(shù)據(jù)庫軟件不同,它是進程內(nèi)的數(shù)據(jù)庫引擎,因此不存在數(shù)據(jù)庫的客戶端和服務(wù)器。使?SQLite?般只需要帶上它的?個動態(tài)庫,就可以享受它的全部功能。?且那個動態(tài)庫的尺?也挺?,以版本3.6.11為例,Windows下487KB、Linux下347KB。不需要"安裝"SQLite的核?引擎本?不依賴第三?的軟件,使?它也不需要"安裝"。有點類似那種綠?軟件。單??件數(shù)據(jù)庫中所有的信息(?如表、視圖等)都包含在?個?件內(nèi)。這個?件可以?由復(fù)制到其它?錄或其它機器上??缙脚_/可移植性除了主流操作系統(tǒng)windows,linux之后,SQLite還?持其它?些不常?的操作系統(tǒng)。弱類型的字段同?列中的數(shù)據(jù)可以是不同類型開源這個相信?家都懂的3.SQLit數(shù)e據(jù)類型?般數(shù)據(jù)采?的固定的靜態(tài)數(shù)據(jù)類型,?SQLite采?的是動態(tài)數(shù)據(jù)類型,會根據(jù)存?值?動判斷。SQLite具有以下五種常?的數(shù)據(jù)類型:NULL:這個值為空值VARCHAR(n):長度不固定且其最?長度為n的字串,n不能超過4000。CHAR(n):長度固定為n的字串,n不能超過254。INTEGER:值被標(biāo)識為整數(shù),依據(jù)值的??可以依次被存儲為1,2,3,4,5,6,7,8.REAL:所有值都是浮動的數(shù)值,被存儲為8字節(jié)的IEEE浮動標(biāo)記序號.TEXT:值為?本字符串,使?數(shù)據(jù)庫編碼存儲(TUTF-8,UTF-16BEorUTF-16-LE).BLOB:值是BLOB數(shù)據(jù)塊,以輸?的數(shù)據(jù)格式進?存儲。如何輸?就如何存儲,不改變格式。DATA:包含了年份、?份、?期。TIME:包含了?時、分鐘、秒。相信學(xué)過數(shù)據(jù)庫的童鞋對這些數(shù)據(jù)類型都不陌?的?.SQLiteDatabase的介紹Android提供了創(chuàng)建和是?SQLite數(shù)據(jù)庫的API。SQLiteDatabase代表?個數(shù)據(jù)庫對象,提供了操作數(shù)據(jù)庫的?些?法。在Android的SDK?錄下有sqlite3?具,我們可以利?它創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表和執(zhí)??些SQL語句。下?是SQLiteDatabase的常??法。SQLiteDatabase的常??法?法名稱?法表?含義openOrCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory)insert(Stringtable,String打開或創(chuàng)建數(shù)據(jù)庫插??條記錄nullColumnHack,ContentValuesvalues)delete(Stringtable,StringwhereClause,String[]whereArgs)query(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy)查詢?條記錄修改記錄update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs)execSQL(Stringsql)執(zhí)??條SQL語句關(guān)閉數(shù)據(jù)庫close()Google公司命名這些?法的名稱都是?常形象的。例如openOrCreateDatabase,我們從字?英?含義就能看出這是個打開或創(chuàng)建數(shù)據(jù)庫的?法。1、打開或者創(chuàng)建數(shù)據(jù)庫在Android中使?SQLiteDatabase的靜態(tài)?法openOrCreateDatabase(Stringpath,SQLiteDatabae.CursorFactoryfactory)打開或者創(chuàng)建?個數(shù)據(jù)庫。它會?動去檢測是否存在這個數(shù)據(jù)庫,如果存在則打開,不存在則創(chuàng)建?個數(shù)據(jù)庫;創(chuàng)建成功則返回?個SQLiteDatabase對象,否則拋出異常FileNotFoundException。下?是創(chuàng)建名為“stu.db”數(shù)據(jù)庫的代碼:openOrCreateDatabase(Stringpath,SQLiteDatabae.CursorFactoryfactory)參數(shù)1數(shù)據(jù)庫創(chuàng)建的路徑參數(shù)2?般設(shè)置為null就可以了db=SQLiteDatabase.openOrCreateDatabase("/data/data/com.lingdududu.db/databases/stu.db",null);2、創(chuàng)建表創(chuàng)建?張表的步驟很簡單:編寫創(chuàng)建表的SQL語句調(diào)?SQLiteDatabase的execSQL()?法來執(zhí)?SQL語句下?的代碼創(chuàng)建了?張?戶表,屬性列為:id(主鍵并且?動增加)、sname(學(xué)?姓名)、snumber(學(xué)號)privatevoidcreateTable(SQLiteDatabasedb){//創(chuàng)建表SQL語句Stringstu_table="createtableusertable(_idintegerprimarykeyautoincrement,snametext,snumbertext)";//執(zhí)?SQL語句db.execSQL(stu_table);}3、插?數(shù)據(jù)插?數(shù)據(jù)有兩種?法:①SQLiteDatabase的insert(Stringtable,StringnullColumnHack,ContentValuesvalues)?法,參數(shù)1表名稱,參數(shù)2空列的默認(rèn)值參數(shù)3ContentValues類型的?個封裝了列名稱和列值的Map;②編寫插?數(shù)據(jù)的SQL語句,直接調(diào)?SQLiteDatabase的execSQL()?法來執(zhí)?第?種?法的代碼:privatevoidinsert(SQLiteDatabasedb){//實例化常量值ContentValuescValue=newContentValues();//添加?戶名cValue.put("sname","xiaoming");//添加密碼cValue.put("snumber","01005");//調(diào)?insert()?法插?數(shù)據(jù)db.insert("stu_table",null,cValue);}第?種?法的代碼:privatevoidinsert(SQLiteDatabasedb){//插?數(shù)據(jù)SQL語句Stringstu_sql="insertintostu_table(sname,snumber)values('xiaoming','01005')";//執(zhí)?SQL語句db.execSQL(sql);}4、刪除數(shù)據(jù)刪除數(shù)據(jù)也有兩種?法:①調(diào)?SQLiteDatabase的delete(Stringtable,StringwhereClause,String[]whereArgs)?法參數(shù)1表名稱參數(shù)2刪除條件參數(shù)3刪除條件值數(shù)組②編寫刪除SQL語句,調(diào)?SQLiteDatabase的execSQL()?法來執(zhí)?刪除。第?種?法的代碼:privatevoiddelete(SQLiteDatabasedb){//刪除條件StringwhereClause="id=?";//刪除條件參數(shù)String[]whereArgs={String.valueOf(2)};//執(zhí)?刪除db.delete("stu_table",whereClause,whereArgs);}第?種?法的代碼:privatevoiddelete(SQLiteDatabasedb){//刪除SQL語句Stringsql="deletefromstu_tablewhere_id=6";//執(zhí)?SQL語句db.execSQL(sql);}5、修改數(shù)據(jù)修改數(shù)據(jù)有兩種?法:①調(diào)?SQLiteDatabase的update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs)?法參數(shù)1表名稱參數(shù)2跟?列ContentValues類型的鍵值對Key-Value

參數(shù)3更新條件(where字句)參數(shù)4更新條件數(shù)組②編寫更新的SQL語句,調(diào)?SQLiteDatabase的execSQL執(zhí)?更新。第?種?法的代碼:privatevoidupdate(SQLiteDatabasedb){//實例化內(nèi)容值ContentValuesvalues=newContentValues();//在values中添加內(nèi)容values.put("snumber","101003");//修改條件StringwhereClause="id=?";//修改添加參數(shù)String[]whereArgs={String.valuesOf(1)};//修改db.update("usertable",values,whereClause,whereArgs);}第?種?法的代碼:privatevoidupdate(SQLiteDatabasedb){//修改SQL語句Stringsql="updatestu_tablesetsnumber=654321whereid=1";//執(zhí)?SQLdb.execSQL(sql);}6、查詢數(shù)據(jù)在Android中查詢數(shù)據(jù)是通過Cursor類來實現(xiàn)的,當(dāng)我們使?SQLiteDatabase.query()?法時,會得到?個Cursor對象,Cursor指向的就是每?條數(shù)據(jù)。它提供了很多有關(guān)查詢的?法,具體?法如下:publicCursorquery(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit);各個參數(shù)的意義說明:參數(shù)table:表名稱參數(shù)columns:列名稱數(shù)組參數(shù)selection:條件字句,相當(dāng)于where參數(shù)selectionArgs:條件字句,參數(shù)數(shù)組參數(shù)groupBy:分組列參數(shù)having:分組條件參數(shù)orderBy:排序列參數(shù)limit:分頁查詢限制參數(shù)Cursor:返回值,相當(dāng)于結(jié)果集ResultSetCursor是?個游標(biāo)接?,提供了遍歷查詢結(jié)果的?法,如移動指針?法move(),獲得列值?法getString()等.Cursor游標(biāo)常??法?法名稱?法描述getCount()獲得總的數(shù)據(jù)項數(shù)判斷是否第?條記錄判斷是否最后?條記錄移動到第?條記錄移動到最后?條記錄移動到指定記錄isFirst()isLast()moveToFirst()moveToLast()move(intoffset)moveToNext()moveToPrevious()移動到下?條記錄移動到上?條記錄getColumnIndexOrThrow(StringcolumnName)根據(jù)列名稱獲得列索引

getInt(intcolumnIndex)getString(intcolumnIndex)獲得指定列索引的int類型值獲得指定列縮影的String類型值下?就是?Cursor來查詢數(shù)據(jù)庫中的數(shù)據(jù),具體代碼如下:privatevoidquery(SQLiteDatabasedb){//查詢獲得游標(biāo)Cursorcursor=db.query("usertable",null,null,null,null,null,null);//判斷游標(biāo)是否為空if(cursor.moveToFirst(){//遍歷游標(biāo)for(inti=0;i<cursor.getCount();i++){cursor.move(i);//獲得IDintid=cursor.getInt(0);//獲得?戶名Stringusername=cursor.getString(1);//獲得密碼Stringpassword=cursor.getString(2);//輸出?戶信息System.out.println(id+":"+sname+":"+snumber);}}}7、刪除指定表編寫插?數(shù)據(jù)的SQL語句,直接調(diào)?SQLiteDatabase的execSQL()?法來執(zhí)?privatevoiddrop(SQLiteDatabasedb){//刪除表的SQL語句Stringsql="DROPTABLEstu_table";//執(zhí)?SQLdb.execSQL(sql);}三.SQLiteOpenHelper該類是SQLiteDatabase?個輔助類。這個類主要?成?個數(shù)據(jù)庫,并對數(shù)據(jù)庫的版本進?管理。當(dāng)在程序當(dāng)中調(diào)?這個類的?法getWritableDatabase()或者getReadableDatabase()?法的時候,如果當(dāng)時沒有數(shù)據(jù),那么Android系統(tǒng)就會?動?成?個數(shù)據(jù)庫。SQLiteOpenHelper是?個抽象類,我們通常需要繼承它,并且實現(xiàn)??的3個函數(shù):1.onCreate(SQLiteDatabase)在數(shù)據(jù)庫第?次?成的時候會調(diào)?這個?法,也就是說,只有在創(chuàng)建數(shù)據(jù)庫的時候才會調(diào)?,當(dāng)然也有?些其它的情況,?般我們在這個?法?邊?成數(shù)據(jù)庫表。2.onUpgrade(SQLiteDatabase,int,int)當(dāng)數(shù)據(jù)庫需要升級的時候,Android系統(tǒng)會主動的調(diào)?這個?法。?般我們在這個?法?邊刪除數(shù)據(jù)表,并建?新的數(shù)據(jù)表,當(dāng)然是否還需要做其他的操作,完全取決于應(yīng)?的需求。3.onOpen(SQLiteDatabase):這是當(dāng)打開數(shù)據(jù)庫時的回調(diào)函數(shù),?般在程序中不是很常使?。寫了這么多,改??實際例?來說明上?的內(nèi)容了。下?這個操作數(shù)據(jù)庫的實例實現(xiàn)了創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表以及數(shù)據(jù)庫的增刪改查的操作。該實例有兩個類:com.lingdududu.testSQLite調(diào)試類com.lingdududu.testSQLiteDb數(shù)據(jù)庫輔助類SQLiteActivity.javapackagecom.lingdududu.testSQLite;importcom.lingdududu.testSQLiteDb.StuDBHelper;importandroid.app.Activity;importandroid.content.ContentValues;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;/**@authorlingdududu*/publicclassSQLiteActivityextendsActivity{/**Calledwhentheactivityisfirstcreated.*/

//聲明各個按鈕privateButtoncreateBtn;privateButtoninsertBtn;privateButtonupdateBtn;privateButtonqueryBtn;privateButtondeleteBtn;privateButtonModifyBtn;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//調(diào)?creatView?法creatView();//setListener?法setListener();}//通過findViewById獲得Button對象的?法privatevoidcreatView(){createBtn=(Button)findViewById(R.id.createDatabase);updateBtn=(Button)findViewById(R.id.updateDatabase);insertBtn=(Button)findViewById(R.id.insert);ModifyBtn=(Button)findViewById(R.id.update);queryBtn=(Button)findViewById(R.id.query);deleteBtn=(Button)findViewById(R.id.delete);}//為按鈕注冊監(jiān)聽的?法privatevoidsetListener(){createBtn.setOnClickListener(newCreateListener());updateBtn.setOnClickListener(newUpdateListener());insertBtn.setOnClickListener(newInsertListener());ModifyBtn.setOnClickListener(newModifyListener());queryBtn.setOnClickListener(newQueryListener());deleteBtn.setOnClickListener(newDeleteListener());}//創(chuàng)建數(shù)據(jù)庫的?法classCreateListenerimplementsOnClickListener{@OverridepublicvoidonClick(Viewv){//創(chuàng)建StuDBHelper對象StuDBHelperdbHelper=newStuDBHelper(SQLiteActivity.this,"stu_db",null,1);//得到?個可讀的SQLiteDatabase對象SQLiteDatabasedb=dbHelper.getReadableDatabase();}}//更新數(shù)據(jù)庫的?法classUpdateListenerimplementsOnClickListener{@OverridepublicvoidonClick(Viewv){//數(shù)據(jù)庫版本的更新,由原來的1變?yōu)?StuDBHelperdbHelper=newStuDBHelper(SQLiteActivity.this,"stu_db",null,2);SQLiteDatabasedb=dbHelper.getReadableDatabase();}}//插?數(shù)據(jù)的?法classInsertListenerimplementsOnClickListener{@OverridepublicvoidonClick(Viewv){StuDBHelperdbHelper=newStuDBHelper(SQLiteActivity.this,"stu_db",null,1);//得到?個可寫的數(shù)據(jù)庫SQLiteDatabasedb=dbHelper.getWritableDatabase();//?成ContentValues對象//key:列名,value:想插?的值ContentValuescv=newContentValues();//往ContentValues對象存放數(shù)據(jù),鍵-值對模式cv.put("id",1);cv.put("sname","xiaoming");cv.put("sage",21);cv.put("ssex","male");//調(diào)?insert?法,將數(shù)據(jù)插?數(shù)據(jù)庫db.insert("stu_table",null,cv);//關(guān)閉數(shù)據(jù)庫db.close();}}

//查詢數(shù)據(jù)的?法classQueryListenerimplementsOnClickListener{@OverridepublicvoidonClick(Viewv){StuDBHelperdbHelper=newStuDBHelper(SQLiteActivity.this,"stu_db",null,1);//得到?個可寫的數(shù)據(jù)庫SQLiteDatabasedb=dbHelper.getReadableDatabase();//參數(shù)1:表名//參數(shù)2:要想顯?的列//參數(shù)3:where?句//參數(shù)4:where?句對應(yīng)的條件值//參數(shù)5:分組?式//參數(shù)6:having條件//參數(shù)7:排序?式Cursorcursor=db.query("stu_table",newString[]{"id","sname","sage","ssex"},"id=?",newString[]{"1"},null,null,null);while(cursor.moveToNext()){Stringname=cursor.getString(cursor.getColumnIndex("sname"));Stringage=cursor.getString(cursor.getColumnIndex("sage"));Stringsex=cursor.getString(cursor.getColumnIndex("ssex"));System.out.println("query------->"+"姓名:"+name+""+"年齡:"+age+""+"性別:"+sex);}//關(guān)閉數(shù)據(jù)庫db.close();}}//修改數(shù)據(jù)的?法classModifyListenerimplementsOnClickListener{@OverridepublicvoidonClick(Viewv){StuDBHelperdbHelper=newStuDBHelper(SQLiteActivity.this,"stu_db",null,1);//得到?個可寫的數(shù)據(jù)庫SQLiteDatabasedb=dbHelper.getWritableDatabase();ContentValuescv=newContentValues();cv.put("sage","23");//where?句"?"是占位符號,對應(yīng)后?的"1",StringwhereClause="id=?";String[]whereArgs={String.valueOf(1)};//參數(shù)1是要更新的表名//參數(shù)2是?個ContentValeus對象//參數(shù)3是where?句db.update("stu_table",cv,whereClause,whereArgs);}}//刪除數(shù)據(jù)的?法classDeleteListenerimplementsOnClickListener{@OverridepublicvoidonClick(Viewv){StuDBHelperdbHelper=newStuDBHelper(SQLiteActivity.this,"stu_db",null,1);//得到?個可寫的數(shù)據(jù)庫SQLiteDatabasedb=dbHelper.getReadableDatabase();StringwhereClauses="id=?";String[]whereArgs={String.valueOf(2)};//調(diào)?delete?法,刪除數(shù)據(jù)db.delete("stu_table",whereClauses,whereArgs);}}}StuDBHelper.javapackagecom.lingdududu.testSQLiteDb;importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteDatabase.CursorFactory;importandroid.database.sqlite.SQLiteOpenHelper;importandroid.util.Log;publicclassStuDBHelperextendsSQLiteOpenHelper{privatestaticfinalStringTAG="TestSQLite";publicstaticfinalintVERSION=1;//必須要有構(gòu)造函數(shù)publicStuDBHelper(Contextcontext,Stringname,CursorFactoryfactory,

intversion){super(context,name,factory,version);}//當(dāng)?shù)?次創(chuàng)建數(shù)據(jù)庫的時候,調(diào)?該?法publicvoidonCreate(SQLiteDatabasedb){Stringsql="createtablestu_table(idint,snamevarchar(20),sageint,ssexvarchar(10))";//輸出創(chuàng)建數(shù)據(jù)庫的?志信息Log.i(TAG,"createDatabase------------->");//execSQL函數(shù)?于執(zhí)?SQL語句db.execSQL(sql);}//當(dāng)更新數(shù)據(jù)庫的時候執(zhí)?該?法publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){//輸出更新數(shù)據(jù)庫的?志信息Log.i(TAG,"updateDatabase------------->");}}main.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/><Buttonandroid:id="@+id/createDatabase"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="創(chuàng)建數(shù)據(jù)庫"/><Buttonandroid:id="@+id/updateDatabase"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="更新數(shù)據(jù)庫"/><Buttonandroid:id="@+id/insert"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="插?數(shù)據(jù)"/><Buttonandroid:id="@+id/update"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="更新數(shù)據(jù)"/><Buttonandroid:id="@+id/query"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="查詢數(shù)據(jù)"/><Buttonandroid:id="@+id/delete"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="刪除數(shù)據(jù)"/></LinearLayout>程序運?的效果圖:使?adb命令查看數(shù)據(jù)庫:1.在命令?窗?輸?adbshell回車,就進?了Linux命令?,現(xiàn)在就可以使?Linux的命令了。2.ls回車,顯?所有的東西,其中有個data。

3.cddata回車,再ls回車,cddata回車,ls回車后就會看到很多的com................,那就是系統(tǒng)上的應(yīng)?程序包名,找到你數(shù)據(jù)庫程序的包名,然后進?。4.進去后在查看所有,會看到有databases,進?databases,顯?所有就會發(fā)現(xiàn)你的數(shù)據(jù)庫名字,這?使?的是"stu_db"。5.sqlite3stu_db回車就進?了你的數(shù)據(jù)庫了,然后“.schema”就會看到該應(yīng)?程序的所有表及建表語句。6.之后就可以使?標(biāo)準(zhǔn)的SQL語句查看剛才?成的數(shù)據(jù)庫及對數(shù)據(jù)執(zhí)?增刪改查了。注:ls,cd等命令都是linux的基

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論