我看到的一個實例
代碼如下 復制代碼 String sql = "SELECT userid,name FROM tuser WHERE userid=? AND password=?" ;
等你“setString”完所有的?後,你的sql就構造好了。
好了,如果說還是不懂我又找到一篇相關文章
參考資料一:
代碼如下 復制代碼select * from table where username='syy913'
username='syy913'
後面是個字符串。在數據庫裡面采用的是當引號。有句口訣叫單單雙雙加加。
單是用在數據庫裡面的,雙是用在外部編程語言裡面的,在c# java等語言是用的雙引號標識的字符串。
代碼如下 復制代碼string sql=”select * from table”;這就標識一個字符串。
string sql=”select * from table”+”where id>0″;2個字符串連接
下面的
string sql=”select * from table where id>0″+”and name=?”;
這個問號表示 要傳參數。 要在執行這個sql前就必須把參數給他,上面的name是字符型的。你在看這樣寫什麼意思。
代碼如下 復制代碼string nn=”kill”
string sql=”select * from table where id>0 and name=?”;
由於?代表的是一個字符串。
們把nn輸出來看 他是不到“”這個的。
那麼就應該'nn'到數據庫去,即
代碼如下 復制代碼string sql=”select * from table where id>0 and name='nn'”;
就可以了,為什麼還要裡面+個雙引號呢?
代碼如下 復制代碼string sql=”select * from table where id>0 and name='”+nn+”‘”;
就把nn當一個變量給他了。
參考資料二:
這 個sql語句如果包含參數的話,可以用問號(”?”)來為參數進行占位,而不需要立即為參數賦值,而在語句執行之前,必須通過適當的set***()來 為問號處的參數賦值。New ParseInfo()中,包含了參數的sql語句就會被分解為多段,放在staticSql中,以便需要設置參數時定位參數的位置。假如sql語句為 “select * from adv where id = ? and name = ?”的話,那麼staticSql中的元素就是3個,staticSql[3]={ ”select * from adv where id = ”, ” and name = ” , ””}。注意數組中最後一個元素,在這個例子中是””,因為我的例子裡面最後一個就是”?”,如果sql語句是這樣的“select * from adv where id = ? and name = ? order by id”的話,staticSql就變成是這樣的{ ”select * from adv where id = ”, ” and name = ” , ” order by id”}。
無關參考三: (mysql 手冊 c api 預處理語句)
25.2.7.4. mysql_stmt_bind_param()
my_bool mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
描述
mysql_stmt_bind_param()用於為SQL語句中的參數標記符綁定數據,以傳遞給mysql_stmt_prepare()。它使用MYSQL_BIND結構來提供數據。“bind”是MYSQL_BIND結構的某一數組的地址。按照客戶端庫的預期,對於查詢中出現的每個“?”參數標記符,數組中均包含1個元素。
假定你准備了下述語句:
代碼如下 復制代碼INSERT INTO mytbl VALUES(?,?,?)綁定參數時,MYSQL_BIND結構的數組包含3個元素,並能聲明如下:
MYSQL_BIND bind[3];