Discussion:
[JSP ] 分頁傳SQL語法的問題
(时间太久无法回复)
嗯~好好想想XD
2006-07-26 05:23:10 UTC
Permalink
最近在研究jsp
有個地方一直搞不懂~
希望大家能幫我解惑一下~

我在書上的下面這段範例中,試他的範例
目的為:資料有三筆以上就會產生分頁
當我sql=SELECT * FROM students //students是我的資料表
分頁可以跑,也就是點下一頁時不會出現錯誤
可是 當我的
sql=SELECT * FROM students WHERE stdno LIKE '%93%'
或是
sql=SELECT * FROM students WHERE stdno = '93001'
資料超過三筆產生分頁時
按下一頁就會產生錯誤

比方說~我sql是用like
他會顯示
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]
查詢運算式 'stdno LIKE' 中的 語法錯誤 (少了運算元)。

可以請問一下~為什麼sql中條件判斷的字會忽然不見呢
我自己改了很久都試不出來
所以請大家幫個忙~
謝謝大家m(_ _)m

請大家幫忙看看m(_ _)m
//-----------------------------------

ResultSet rs = stmt.executeQuery(sql);
//分頁部份
if ( pageNo > 1 ) // 有上一頁
out.print("| <a href='browse_test.jsp?Page="+(pageNo-1)+
"&Sql="+sql"'>上一頁</a> |");

if ( pageNo < totalPages ) // 有下一頁
out.print("| <a href='browse_test.jsp?Page="+(pageNo+1)+
"&Sql="+sql+"'>下一頁</a> |");
//-----------------------------------
//問題在於我資料庫中的sql中如果有where~where後面傳到網頁欄就會不見@@
像是這樣
sql=SELECT * FROM students WHERE stdno = '93001'
但是
若sql是這樣
sql=SELECT * FROM students
就可以正常顯示
我用的資料庫是MS ACCESS

請大家幫小弟解惑一下@@
謝謝大家:)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.75.66.62
空氣般的存在
2006-07-26 05:34:46 UTC
Permalink
※ 引述《happychung (嗯~好好想想XD)》之銘言:
: 他會顯示
: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]
: 查詢運算式 'stdno LIKE' 中的 語法錯誤 (少了運算元)。
: //-----------------------------------
: ResultSet rs = stmt.executeQuery(sql);
: //分頁部份
: if ( pageNo > 1 ) // 有上一頁
: out.print("| <a href='browse_test.jsp?Page="+(pageNo-1)+
: "&Sql="+sql"'>上一頁</a> |");
: if ( pageNo < totalPages ) // 有下一頁
: out.print("| <a href='browse_test.jsp?Page="+(pageNo+1)+
: "&Sql="+sql+"'>下一頁</a> |");
: //-----------------------------------

我想,問題應該是出在

out.print("| <a href='browse_test.jsp?Page="+(pageNo-1)+
"&Sql="+sql"'>上一頁</a> |");

這一行程式!!
因為你使用的是HTTP GET的方式傳SQL語法
所以再傳SQL參數的時候,導致單引號判讀錯誤...

用實例講清楚一點好了...
假設現在你傳入的參數是

sql=SELECT * FROM students WHERE stdno LIKE '%93%'
pageNo = 3

那麼帶入那行out.print()裡面就會變成

| <a href='browse_test.jsp?Page=2&
Sql='SELECT * FROM students WHERE stdno LIKE '%93%'>上一頁</a> |

有沒有看出什麼端倪來??

就是其實
sql抓到的參數為
SELECT * FROM students WHERE stdno LIKE
只有這樣而已....

請使用跳脫字元隔離不需要的單引號....
或者使用POST的方式傳SQL語法字串吧!!

以上,希望對你有幫助!!!

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.18.208

Loading...