2011-11-29 37 views
0

我有一個名爲Userdetails的微軟sql服務器管理工​​作室的表,其列名爲[Email address],其數據類型爲varchar(50)。現在,我在jsp中訪問這個變量,將這個變量與數據類型爲text的另一個名爲email2的變量進行比較。不幸的是,我收到一個錯誤。如何解決此錯誤:數據類型text和varchar在等於運算符中不兼容?

這只是我的代碼的一部分。

String str=request.getParameter("email2"); 
ResultSet rs = st.executeQuery("select [Email address],Username from Userdetails where [Email address]='" + str + "'); 
+0

嘗試使用varchar(max)將您的電子郵件字段存儲在數據庫中。 – Muse

+0

而不是'='(等於運營商)我用'喜歡',它沒有錯誤地工作。 ResultSet rs = st.executeQuery(「select [Email address],Userdetails的用戶名,其中[電子郵件地址]類似於'」+ str +「'和day =」+ str1 +「,月份類似'」+ str2 +「',year = 「+ str3 +」「); –

回答

1

第一個問題:您直接在SQL中包含值。不要那樣做 - 它只是要求SQL injection attack

而是使用帶有參數化值的預備語句。你可能會發現這足以解決問題。

PreparedStatement pst = conn.prepareStatement 
    ("select [Email address], Username from Userdetails where [Email address]=?"); 

// This may give the same problem... 
pst.setString(1, str); 

// but this may fix it 
// pst.setClob(1, new StringReader(str)); 

ResultSet results = pst.executeQuery(); 

(顯然只設置參數的一種方式或其他)。

不要忘記關閉語句在finally塊。

+0

先生,我沒有得到你想要解釋的。 –

+0

@ user936516:以前,您將值*直接包含在您的SQL *中。這是一個非常糟糕的主意,我提出了另一種選擇。搜索「準備語句jdbc」和「SQL注入攻擊」以獲取更多信息。 –

+0

謝謝先生。 –

相關問題