❶ 什麼是sql綁定變數,如何實現綁定變數
1. 認識綁定變數:
綁定變數是為了減少解析的,比如你有個語句這樣
select aaa,bbb from ccc where ddd=eee;
如果經常通過改變eee這個謂詞賦值來查詢,像如下
select aaa,bbb from ccc where ddd=fff;
select aaa,bbb from ccc where ddd=ggg;
select aaa,bbb from ccc where ddd=hhh;
每條語句都要被資料庫解析一次,這樣比較浪費資源,如果把eee換成「:1」這樣的綁定變數形式,無論ddd後面是什麼值,都不需要重復解析
Java實現綁定變數的方法:
[java] view plain
PreparedStatement pstmt = con.prepareStatement("UPDATE employees SET salay = ? WHERE id = ?");
pstmt.setBigDecimal(1, 15.00);
pstmt.setInt(2, 110592);
/result statmement: UPDATE employees SET salay = 15.00 WHERE id = 110592
pstmt.executeQuery();
假設要將id從1到10000的員工的工資都更新為150.00元,不使用綁定變數,則:
[java] view plain
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 1");
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 2");
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 3");
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 4");
....
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 10000");
使用綁定變數,則:
[java] view plain
PreparedStatement pstmt;
for (id = 1; id < 10000; id )
{
if (null == pstmt)
pstmt = con.prepareStatement("UPDATE employees SET salay = ? WHERE id = ?");
pstmt.setBigDecimal(1, 150.00);
pstmt.setInt(2, id);
pstmt.executeQuery();
}
二者區別在於,不用綁定變數,則相當於反復解析、執行了1w個sql語句。使用綁定變數,解析sql語句只用了一次,之後的9999次復用第一次生成的執行計劃。顯然,後者效率會更高一些。
2. 什麼時候不應該/不必要使用綁定變數
a. 如果你用數據倉庫,一條大查詢一跑幾個小時,根本沒必要做綁定變數,因為解析的消耗微乎其微。
b. 變數對優化器產生執行計劃有很重要的影響的時候:綁定變數被使用時,查詢優化器會忽略其具體值,因此其預估的准確性遠不如使用字面量值真實,尤其是在表存在數據傾斜(表上的數據非均勻分布)的列上會提供錯誤的執行計劃。從而使得非高效的執行計劃被使用。
3. 綁定變數在OceanBase中的實現
目前OceanBase中實現了綁定變數,目的主要是為了編程方便,而不是為了降低生成執行計劃的代價。為什麼呢?因為OceanBase中目前使用的是一種」靜態執行計劃「,無論什麼Query,執行流程都一樣。OB在前端代理ObConnector中實現綁定變數,將用戶傳入的變數進行to_string()操作,替代SQL語句中相應的部分,形成一個完整的SQL。然後這個SQL傳遞給MS,MS按照標准流程來解析和執行。相信不遠的將來,OB將會實現真正意義上的綁定變數,讓用戶享受到綁定變數帶來的好處。
❷ 怎麼把SQL資料庫中表的內容綁定到textbox中
方法一、數據綁定
首先連接資料庫,讀取數據 綁定控制項 textbox1.text=資料庫取出值
方法二、寫代碼
//sql語句string sql = string.Format("SELECT text FROM Test WHERE ID = {0})", 1);
//資料庫名為Temp.mdb,表為Test,包含2個欄位:ID 和 text
string DbConnectionString = "Data Source=Computer-PC;User ID=sa;Password=123456;Initial Catalog=Temp;Pooling=true";
SqlConnection con = new SqlConnection(DbConnectionString);
SqlCommand cmd = new SqlCommand(sql, con);
cmd.CommandType = CommandType.Text;
SqlDataReader myReader;
con.Open();
myReader = cmd.ExecuteReader();
textBox1.Text = myReader["text"].ToString();
MessageBox.Show("完成!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
cmd.Cancel();
myReader.Close();
❸ SQLDataSource綁定SQL語句的時候where如何設置的問題
var sql = " select * from [表名] Where 2>1 ";
string line = "";
string versison = "";
line = txt1.text.trim();
version = txt2.text.trim();
if (!string.IsNullOrEmpty(line) ) {
sql += " AND line='"+line+"'";
}
if (! string.IsNullorEmpty(version)) {
sql += " And version= ' "+version+" ' "; // and 前面必須留空格
}
//這個主要是拼接sql語句的技巧,後面的略了,你懂的
❹ 動態sql中怎麼綁定多個重復出現參數
目前我知道的綁定方式是按順序一個個對應著動態sql的佔位符,如
open cur_Record for L_sql using P_TestKey,P_SchoolKey,P_TestKey,P_TestKey,P_ClassKey
但我想問的是有沒有其他的綁定方法,如簡化成
open cur_Record for L_sql using P_TestKey,P_SchoolKey,P_ClassKey
這樣的話比較簡潔清晰
❺ 關於sql語句實現數據綁定
你的資料庫信息是寫到配置文件中的吧
那你就在點擊單選按鈕的時候去修改要綁定的資料庫
string lanmu1database="從配置文件中讀取關於欄目1的資料庫信息";
string lanmu2database="從配置文件中讀取關於欄目2的資料庫信息";
string lanmu3database="從配置文件中讀取關於欄目3的資料庫信息";
在點擊單選按鈕時候 修改所訪問資料庫對應不同的string 的變數。
❻ 如何在SQL中綁定變數,實現從一個資料庫中將數據遷移到另一個資料庫中
declare @a int;
declare @b int;
declare @c varchar(180);
declare @d varchar(180)
DECLARE @f 你的數據類型
DECLARE @sql VARCHAR(1000)
select @a = ISNULL(min(iRecNo),0) from sys_MK_trans_Detail6 where sbillno='No.12/07-0004'
select @b= ISNULL(max(iRecNo),0) from sys_MK_trans_Detail6 where sbillno='No.12/07-0004'
WHILE @a<@b BEGIN
select @c = sTableId from sys_MK_trans_Detail6 where sbillno='No.12/07-0004' and iRecNo =@a
select @d = SOutBook from sys_MK_trans where sbillno='No.12/07-0004' and iRecNo =@a
select @f = SinBook from sys_MK_trans where sbillno='No.12/07-0004' and iRecNo =@a
--這里不能直接這種方式,要拼SQL語句
SET @sql = "INSERT 遷入帳套.dbo."+@c+" select * from 遷出帳套.DBO."+@c
exec (@sql)
set @a=@a+1
end
--iRecNo 為記錄序號
--sys_MK_trans 為主表,有sbillno單據號,SOutBook遷出帳套,SinBook遷入帳套
--sys_MK_trans_Detail6為要遷移數據表的清單記錄
❼ SQL developer中新建觸發器,執行語句後,彈出一個輸入綁定的框框是什麼意思啊求各位大神解答~~~
你的觸發器語句貼出來看看
❽ SQL 資料庫中的欄位之間怎樣關聯呢
1/,
最常用的一種:
減少重復數據.表a中擁有外鍵,表b的數據基本是不允許刪除的.這時選擇對
insert
和
update
強制關系即可.
2/,其次,是增加一個從屬表.
如果表a刪除一條記錄時,表b中也隨著刪除一條相關聯的記錄,那麼外鍵關系中,表a的主鍵是表b的外鍵。這種關系,實際上表b是表a的從屬表(即表a是父表),選擇對
insert
和
update
強制關系時,如果向表b中插入數據,表a中必須已經存在對應的記錄。選擇級聯刪除相關的欄位時,刪除表a中的一條記錄,就會刪除對應的表b中的一條記錄。
❾ 安全測試中sql的注入是什麼意思
所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意)的SQL命令注入到後台資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。 比如先前的很多影視網站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字元暴出的,這類表單特別容易受到SQL注入式攻擊.
一般來說要阻止sql注入,需要前後端配合表單的內容進行驗證。我是前端的,只要對表單的輸入綁定change事件,對其中的內容進行正則驗證,阻止用戶輸入特殊字元(比如\轉義字元)。
❿ 怎樣綁定sql資料庫
首先需要連接字元串 就如 Y_Search說的那種 這可以有好幾種寫法!
string sql="select *from biao1";//sql語句 比如說查詢biao1的所有數據吧
SqlConnection conn = new SqlConnection(「server=.;uid=sa;pwd=sasa;database=DataDB」);
sqlcommand cmd=new sqlcommand(sql,con);
con.open();
cmdd.ExecuteNonQuery();
con.close();