程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C#拜托所包含的函數指針概念具體解析

C#拜托所包含的函數指針概念具體解析

編輯:關於C++

C#拜托所包含的函數指針概念具體解析。本站提示廣大學習愛好者:(C#拜托所包含的函數指針概念具體解析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#拜托所包含的函數指針概念具體解析正文


/DATA/data/包名/databases是該法式寄存數據的目次,DATA是Environment.getDataDirectory() 辦法前往的途徑。找到數據庫以後可以選中user.db 履行導出。
用真機調試,data目次假如打不開,解釋你的手機沒有root,改用模仿器就OK了。

1.獲得SQLiteDatabase對象:

SQLiteDatabase db = openOrCreateDatabase(File file, SQLiteDatabase.Cursor, Factory factor);

2.SQLiteDatabase供給了以下辦法:

db.execSQL(sql)     //履行任何SQL語句
db.insert(table, nullColumnHack, value)   //(增)
db.delete(table, whereClause, whereArgs)  //(刪)
db.updata(table, values, whereClause, whereArgs) //(改)
db.query(table,columns,whereClause,whereArgs,groupBy,having,orderBy) //(查)
db.rawQuery(sql, selectionArgs)  //可使用SQL語句直接查詢

3.履行query和rawQuery操作,前往一個Cursor游標對象,它可以遍歷全部查詢處的內容,Cursor供給了以下辦法來挪動游標:

c.move( int offset)  //游標向上或向下挪動指定行數,負數向下,正數向上
c.moveToFirst()    //挪動到第一行,前往布爾值
c.moveToLast()
c.moveToNext()
c.moveToPostion(int postion)  //挪動到指定行,前往布爾值
c.moveToPrevious()  //挪動到上一行
c.isFirst();       //能否指向第一條 
c.isLast();       //能否指向最初一條 
c.isBeforeFirst();  //能否指向第一條之前 
c.isAfterLast();   //能否指向最初一條以後 
c.isNull(int columnIndex); //指定列能否為空(列基數為0) 
c.isClosed();     //游標能否已封閉 
c.getCount();    //總數據項數 
c.getPosition();  //前往以後游標所指向的行數 
c.getColumnIndex(String columnName); //前往某列名對應的列索引值 
c.getString(int columnIndex);         //前往以後行指定列的值

上面是一個創立一個SQLiteDatabase對象,只用SQL語句停止查詢的實例

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  //每一個法式都有本身的數據庫,並且互不攪擾
  //創立一個數據庫,而且翻開,這個辦法前往的是一個SQLiteDadabase對象(假如沒有就創立,有就直接翻開)
  //這個數據庫的名字叫user.db,如許取名是為了今後導出到電腦上前方便第三方軟件翻開,第二個參數是一個常量,此例表現公有其余數據庫沒法拜訪
  SQLiteDatabase db = openOrCreateDatabase("user.db", MODE_PRIVATE, null);
  //創立一張表 usertb ,主鍵名字建議寫成_id, 1個主鍵,3列, 加上_id總共4列
   db.execSQL("create table if not exists usertb(_id integer primary key autoincrement, name text not null, age integer not null, sex text not null)");
  //往這張表usertb中加3條數據,分離3列,3個對應的值
   db.execSQL("insert into usertb(name, age, sex) values('Jack','18','男')");
   db.execSQL("insert into usertb(name, age, sex) values('Hellen','19','女')");
   db.execSQL("insert into usertb(name, age, sex) values('Mike','20','男')");

  //查詢數據,第一個參數照樣一條語句,查詢辦法,指定若何查找查詢前提, 第二個參數是查詢前提,默許把數據全體查詢出來
  //這裡的前往值是Cursor,是查詢數據後獲得的治理聚集的一個類,可以懂得為list(游標接口)
  Cursor c = db.rawQuery("select * from usertb", null);
   if (c!= null){                    //假如能查詢到數據
     c.moveToFirst();                //假如沒有處置過數據,這條可以省略,默許光標第一行
     while(c.moveToNext()){          //每次只能查詢到一條數據,斷定能否能查詢到下一行(重點:每次光標達到一行後,上面的語句順次打印那一行中的數據,再輪回,打印上面一行數據)
       Log.i ("info", " "+ c.getInt(c.getColumnIndex("_id")));       //第一個字段int型, 須要轉成String型能力用Log打印(找到這一條數據中字段角標為0的integer型數據)
       Log.i("info", c.getString(c.getColumnIndex("name")));      //第二個字段是text型
       Log.i("info", " "+c.getInt(c.getColumnIndex("age")));
       Log.i("info", c.getString(c.getColumnIndex("sex")));
       Log.i("info", "~~~~~~~~");                          //測試一次輪回有若干數據被打印
     }
     c.close();                                  //查詢完,游標必定要釋放
   }
   db.close();    
}

4.增刪查改的相干參數:

table:查詢數據的表名
columns: 要查詢出來的列名
whereClause: 查詢前提子句,許可應用占位符"?"
whereArgs: 用於為占位符傳入參數值
groupBy:用於掌握分組
having:用於對分組停止過濾
orderBy:用於對記載停止排序

ContentValues是對key/value的一個包裝,應用它可以將要拔出或許要修正的數據以key/value的情勢停止封裝,在應用響應增改辦法的時刻直接應用。
它有兩個存入和掏出兩個辦法:

put(String key,Xxx);
getAsXxx(String Key);

上面一個實例,應用內置函數操作數據庫增刪改查:

  

 SQLiteDatabase db = openOrCreateDatabase("user.db", MODE_PRIVATE, null);
  db.execSQL("create table if not exists usertb(_id integer primary key autoincrement, name text not null, age integer not null, sex integer not null) ");

  //在履行增、改辦法之前,先創立insert辦法中的一個ContentValues對象,再對這個對象存入數據,存完後把values拔出
  ContentValues values = new ContentValues(); 
  //增
  values.put("name", "張三");
  values.put("age",18);
  values.put("sex","男");
  db.insert("usertb", null, values);  //拔出辦法的前往值是一個long,表現新添記載的行號
  values.clear();    //在拔出下一條數據前須要把values清空,再對values存入新數據
  values.put("name", "李四");
  values.put("age",19);
  values.put("sex","男");
  db.insert("usertb", null, values);  
  values.clear();
  values.put("name", "王五");
  values.put("age",20);
  values.put("sex","男");
  db.insert("usertb", null, values);  
  values.clear();
  //改 (將id年夜於的性別改成女
  values.put("sex", "女");
  db.update("usertb", values, "_id >?", new String[]{"2"});
  //刪 (將名字裡帶三的人刪除)
  db.delete("uesrtb", "name like ?", new String [] {"%三%"});
  //查 (查詢usertb這張表,一切行都差,_id >0的數據都查,查詢出的數據依照name排序)
  Cursor c = db.query("usertb", null, "_id > ?", new String[]{"0"}, null, null, "name");

  c.close();

  //封閉以後數據庫
  db.close();
  //刪除user.db數據庫(留意不是表名table)
  deleteDatabase("user.db");

   
5.SQLiteOpenHelper : 
SQLiteOpenHelper是一個贊助類,經由過程繼續它並完成onCreate辦法和Upgrade辦法,來治理我們的數據庫。

SQLiteDatabase db = helper.getWritableDatabase();
SQLiteDatabase db = helper.getReadableDatabase();

上面一個實例,新建一個類繼續SQLiteOpenHelper

public class DBOpenHelper extends SQLiteOpenHelper{    
  public DBOpenHelper(Context context, String name) {
    super(context, name, null, 1);
  }
  public DBOpenHelper(Context context, String name, CursorFactory factory,int version) {
    super(context, name, factory, version);
  }

  @Override//初次創立數據庫的時刻挪用 普通可以把建庫 建表的操作
  public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,sex text not null,age integer not null)");
    db.execSQL("insert into stutb(name,sex,age)values('張三','女',18)");
  }

  @Override//當數據庫的版本產生變更的時刻 會主動履行
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

  }
}

然後在主activity中便可以創立這個子類的對象,經由過程這個類的get辦法獲得SQLiteDatabase對象

DBOpenHelper helper =new DBOpenHelper(MainActivity.this, "stu.db");
SQLiteDatabase db = helper.getWritableDatabase();

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved