動態查詢資料庫
⑴ Android 中資料庫查詢方法query() 中的selectionArgs 參數只能在編譯之前確定,這怎麼實現動態查詢
網上找來的
Android 中涉及資料庫查詢的地方一般都會有一個 query() 方法,而這些 query 中有大都(全部?)會有一個參數 selectionArgs,比如下面這個 android.database.sqlite.SQLiteDatabase.query():
view plain to clipboardprint?
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
selection 參數很好理解,就是 SQL 語句中 WHERE 後面的部分,即過濾條件, 比如可以為 id=3 AND name='Kevin Yuan' 表示只返回滿足 id 為 3 且 name 為 "Kevin Yuan" 的記錄。
再實際項目中像上面那樣簡單的「靜態」的 selection 並不多見,更多的情況下要在運行時動態生成這個字元串,比如
view plain to clipboardprint?
public doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"id=" id " AND name='" name "'", // selection
//...... 更多參數省略
);
}
public doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"id=" id " AND name='" name "'", // selection
//...... 更多參數省略
);
}
在這種情況下就要考慮一個字元轉義的問題,比如如果在上面代碼中傳進來的 name 參數的內容裡面有單引號('),就會引發一個 "SQLiteException syntax error .... "。
手工處理轉義的話,也不麻煩,就是 String.replace() 調用而已。但是 Android SDK 為我們准備了 selectionArgs 來專門處理這種問題:
view plain to clipboardprint?
public void doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"id=" id " AND name=?", // selection
new String[] {name}, //selectionArgs
//...... 更多參數省略
);
// ...... 更多代碼
}
public void doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"id=" id " AND name=?", // selection
new String[] {name}, //selectionArgs
//...... 更多參數省略
);
// ...... 更多代碼
}
也就是說我們在 selection 中需要嵌入字元串的地方用 ? 代替,然後在 selectionArgs 中依次提供各個用於替換的值就可以了。在 query() 執行時會對 selectionArgs 中的字元串正確轉義並替換到對應的 ? 處以構成完整的 selection 字元串。 有點像 String.format()。
不過需要注意的是 ? 並不是「萬金油」,只能用在原本應該是字元串出現的地方。比如下面的用法是錯誤的:
view plain to clipboardprint?
public void doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"? = " id " AND name=?", // selection XXXX 錯誤!? 不能用來替換欄位名
new String[]{"id", name}, //selectionArgs
//...... 更多參數省略
);
// ...... 更多代碼
}
⑵ 如何動態的指定查詢條件,從外部資料庫中獲取數據記錄
沒分是沒人幫你回答的
組件
外部資料庫
超級列表框
Access資料庫(表超級列表框1.顯示表格線
(外部資料庫1.尾記錄後
(句柄)
=假)
索引
⑶ 動態查詢資料庫,rst怎麼辦
RST應該是ResultSet對象,可以創建類來獲得查詢結果,前提是你需要自己封裝方法把結果集中的每個屬性對應到你封裝對象的屬性值上
⑷ vb 6 accsee多資料庫動態查詢
此類問題屬於 SQL問題
比方2個 資料庫
a.mdb
b.mdb
在a資料庫內建立查詢
select * from a union select * from b in " & CurrentProject.Path + "\b.mdb
⑸ vb6 動態查詢 sqlserver 2008 R2資料庫中的數據
看你的欄位時間,是前面最小後面最大,假設你時間最大的是出庫完成(如果不是,你自己修改下)時間范圍限定應該限定最小時間欄位和最大時間欄位都在范圍內,時間差用datediff函數,不過這玩意取整數,如果用小時為單位的話,一小時50分鍾也算一小時,所以取分鍾為單位
如下(假定最小日期是訂單錄入,最大日期是出庫完成,不是的話自己修改欄位名)
SQL = "SELECT * from 表名 where datediff( minute," & Combo1(1).Text & " , " & Combo1(2).Text & " )> " & Text1.Text & "*60 AND 訂單錄入 >= '" & _
Format(DTPicker1(0).Value, "yyyy-MM-dd") & " 0:0:1' AND 出庫完成 <= '" & Format(DTPicker1(1).Value, "yyyy-MM-dd") & " 23:59:59'"
如果不知道哪個欄位是最大日期哪個欄位是最小日期,那就只能每個欄位都加限定條件了
這是兩個欄位判斷,繼續and下去,所有欄位判斷一遍,都不超出范圍才算
Dim SQL As String
SQL = "SELECT * from 表名 where datediff( minute," & Combo1(1).Text & " , " & Combo1(2).Text & " )> " & Text1.Text & "*60 AND (訂單錄入 between '" & _
Format(DTPicker1(0).Value, "yyyy-MM-dd") & "' AND '" & Format(DTPicker1(1).Value, "yyyy-MM-dd") & "') AND (訂單審核 between '" & _
Format(DTPicker1(0).Value, "yyyy-MM-dd") & "' AND '" & Format(DTPicker1(1).Value, "yyyy-MM-dd") & "')"
⑹ 跪求JSP頁面如何動態查詢資料庫(ACCESS)
(1)獲取文本框內容
(2)連接資料庫
(3)查詢資料庫
(4)插入數據
(5)以表格形式輸出資料庫中的數據
⑺ 我想在vb2008中利用ado.net動態查詢access資料庫,怎麼辦呢什麼思路
就是用SQL語句中的SELECT語句,你可以多看看SELECT語句,在VB中用動態字元串連接成一個SELECT語句就可以。
⑻ sql資料庫多表聯合動態查詢
select * from (
select * from info_200601
union
select * from info_200602
union
.
.
. )
oder by sn desc
沒有驗證,不知道行不行
⑼ 動態報表,如何動態查詢,資料庫移植
1、動態報表可以用Table控制項拼成。
2、業務需要查詢的統計方式和欄位,用單獨的資料庫表做記錄。
3、移植資料庫很麻煩,可以用工廠三層來寫,寫兩套數據訪問類
4、統計方式可以切換,但是如果加新的統計方式還是要改代碼;數據訪問類可以切換,但是兩個資料庫的訪問類和sp必須都寫好。
最後你問的這個問題,sp不好改也得改,不然就得動代碼,想無縫移植哪有那麼簡單。