⑴ 多個關鍵詞搜索的實現
在我們搜索內容的時候,經常會使用多個關鍵詞用空格隔卜雀開來進行搜索,下面就介紹一下如何實現多個關鍵詞的搜索。
我們首先要知道sql語句怎麼去寫,比如有個文章表article,我們要搜索頌弊神文章的標題和內容中含野虧有這些關鍵詞的記錄,那麼sql語句如下。
select * from article where CONCAT(title,IFNULL(summary,''),IFNULL(content,'')) REGEXP "java|jfinal";
其中的「java|jfinal」就是我們輸入的2個關鍵詞, 首先我們從前端獲取關鍵詞keyWord,然後對keyWord進行處理,比如輸入「java jfinal」,我們需要處理成「java|jfinal」,這樣傳入sql語句就可以了。處理方法如下:
//拼接字元串,將java jsp php形式的字元串拼接為java|jsp|php形式
(StringsString)
{
StringoutString="";
String[]subString=sString.split("\\s+");
for(inti=0;i
{
//注意!!!最後不能拼接|符號
if(i!=(subString.length-1))
{
outString+=subString[i]+"|";
}
else
{
outString+=subString[i];
}
}
System.out.println(outString);
returnoutString;
}
歡迎訪問我的個人網站: http://mb.daymooc.com
⑵ jfinal如何捕獲sql異常
在 jfinal 中,可以通過在全局攔截器中捕獲 SQL 異常亂森,具體步驟如下:
1. 新建一個全局攔截器類,實現 Interceptor 介面,在其中重寫 intercept() 方法。
2. 在 intercept() 方法中,通過 try-catch 塊捕游旦獲 SQL 異常,然後將異常信息列印出來,或者將其記錄到日誌中。
原因是,JFinal 是一個基於 Java 的輕量級 Web 框架,其底層使用了高效、穩定的 ORM 框架 ActiveRecord,可以方便地進行數據訪問和操作。但在實際開發中,可能會出現 SQL 執行異常的情況,比如語法錯誤、連接超時等,需要進行相應的處理。
通過在全局攔截器中捕獲 SQL 異常,可以對異常進行統一處理,從而提高代碼的可維護性和穩定性。例如,可以將異常信息記錄到日誌中,便於開發人員快速定位和解決問題;或者向用戶返回友好的錯誤提示,提高用嘩磨畝戶體驗。
需要注意的是,在捕獲 SQL 異常時,應該避免直接將異常信息輸出到前端頁面,以免給攻擊者提供攻擊突破口。同時,也應該避免將敏感信息記錄到日誌中,以免造成安全隱患。
⑶ 說說你為什麼不用JFinal
原因有三點:
1、它沒有給我帶來便利, 並且找不到使用它的理由。
2、很難與其他主流框架進行整合。
3、過度封裝並且使用它的同時我很難遵守代碼規范。
先說說第一點, 對比spring系列, 並沒有感覺它有多麼便利, 創建一個Jfinal工程我需要1分鍾, 創建一個Spring工程我也需要1分鍾, 但是在實際開發時, Jfinal所消耗的時間會更多, 因為它不靈活。
並且代碼比較啰嗦, 比如創建一個Controller, 我需要繼承他的一個公共類, 並且需要在配置類里配置好它的路由, 並且需要在介面方法中使用getRequest方法。
JFinal WEB MVC和Struts簡要對比:
JFinal遵循COC原則,零配置,無xml,而struts需要配置來支持action、result、interceptor配置與使用。
JFinal開發效率非常之高,相對Struts開發效率能提升五到十倍。
JFinal代碼量非常省,相對Struts開發能省50%到70%代碼量。
JFinal遵循Restful規范,而struts自身未提供Restful支持。Struts可以通過插件來支持restful,但支持不徹底使用不方便。
JFinal提供資料庫支持,屬於一站式解決方案,而struts僅為WEBMVC框架並未提供資料庫支持。
JFinal學習成本極低,只需兩個小時學習即可上手開發,而Struts學習成本相對較高。
JFinal相對Struts來說更加輕量級,JFinal打包jar文件僅173KB,而struts則為1.8MB。
JFinal ORM和Hibernate簡要對比:
JFinal採用ActiveRecord實現資料庫操作支持,較Hibernate開發效率提升六到十倍。
JFinal ActiveRecord較Hibernate學習成本低,一小時內能上手開發。
JFinal零配置,對資料庫支持五個無特點:無xml、無annotation、無getter、無setter、無attribute,極大降低了代碼量,統計證實代碼量節省70%到95%。
JFinal資料庫操作完全採用原生sql,相對Hibernate採用的HQL學習成本低,功能更強大,性能更高,穩定性好。
⑷ jfinal中動態sql是一般是怎麼使用的
動態sql一般用在存儲過程中,可以在存儲過程中使用DDL或DML語句,如創建刪除操作。 語法:execute immediate 'DDL或DML語句'
⑸ jfinal怎麼使用log4j列印SQL
log4j.logger.jdbc.sqlonly=DEBUG,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
log4j.logger.jdbc.sqltiming=INFO,console
log4j.logger.jdbc.connection=INFO,console
⑹ Jfinal 中怎麼輸出執行的sql語句
以mysql為例子吧,比如現在寫了一個sql語句 select* from table 把這個sql語句復制到sqlyong上,執行就ok了 , 還是不懂的話 你先安裝一個sql資料庫,再安裝一個客戶端 ,把客戶端跟資料庫鏈接上,網路下怎麼執行就清楚了。
⑺ pgSql里運行sql語句沒錯,但在JFinal報錯
PostgreSQL的PL/pgSQL語言是支持動態SQL語句的(說execute immediate的是ECPG所支持的)。但是,要記得重要的一點: 是在PL/pgSQL語言中支持。而PL/pgSQL語言一個塊結構的語言,它以begin ... end為塊的開始與結束標識。這也就是說,要執行動態SQL語句,就必須放到begin ... end塊中,而不要想實現一個單獨的動態SQL語句。在SQL Server中,倒是可以輕松的實現,我們可以直接執行一個這樣的動態SQL:
1execute sp_executesql N'select 1 as val'
而在PostgreSQL中,就不要有此想法了。當然,SQL Server的這種動態SQL語句的執行方法也有其局限與不便的地方。
在PL/pgSQL中,執行動態SQL的格式如下(摘錄自說明文檔):
1EXECUTE command-string [ INTO [STRICT] target ] [ USING expression [, ... ] ];
其中,
command-string就是要執行的動態SQL語句(一定要記住:這里是SQL語句,不是PL/pgSQL語句,像raise notice就不能使用);
INTO子句是把SQL查詢到的值賦給INTO指定的變數;
USING子句是前面的command-string中替代變數($1, $2, ...)的賦值;
示例:
123456789do $$declarev_c1 integer;v_c2 integer;beginexecute 'select count(*) as c1, count(*) as c2 from (select 1 as idx union select 11 as idx union select 21 as idx) s where idx > $1' into v_c1, v_c2using 10;raise notice '%, %', v_c1, v_c2;
⑻ jfinal怎麼取出出sql server中的流文件
public void save(){
/**
* 如果上傳時,表單粗蠢類型為multipart/form-data 需要調用getFile方法
* 摘文檔:
* 3.4 getFile 文件上傳
* Controller 提供了 getFile 系列方法支持文件上傳。
* 特別注意:如果客戶端請求為 multipart request(form 表單使用了 enctype="multipart/form-data"),
* 那麼必須先調用 getFile 系列方法才 能使 getPara 系列方法正常鏈野工作,
* 因為 multipart request 需要通過 getFile 系列方法解析請求體中 的數據,包括參數。
*/
try {
getFile();
}catch (Exception e){
logger.error(e.getLocalizedMessage(), e);
}
/*驗證岩喚陪是否重復提交*/
if(!checkFormToken()) return;
BizTips eo=getModel(BizTips.class,"m");
// eo.set(BizTips.COL_CREATETIME, DateTimeKit.getDate());
boolean status = eo.save();
JsonView json=new JsonView();
json.setStatus(status);
json.setMsg(status? OperateType.SAVE_SUCCESS:OperateType.SAVE_FAIL);
renderJson(json);
}
⑼ jfinal分頁查詢的時候對distinct怎麼處理
拆或在原來的 sql 外層包一層 select * from ( 原來帶有 distinct 的整個 sql) as temp 這樣即可旅瞎伍解決:神拍
Db.paginate(10, 10, "select *", "from (原帶有 distinct 的 sql) as temp", p1, p2, ..., pn);
⑽ 大家暢所欲言,當jFinal遇到XSS和SQL注入怎麼處理
數據進入資料庫之前對非法字元進行轉義,在更新和顯示的時候將非法字元還原
在顯示的時候對非法字元進行轉義
如果項目還處在起步階段,建議使用第二種,直接使用jstl的<c:out>標簽即可解決非法字元的問題。當然,對於Javascript還需要自己處理一下,寫一個方法,在解析從伺服器端獲取的數據時執行以下escapeHTML()即可。
附:Javascript方法:
String.prototype.escapeHTML = function () {
return this.replace(/&/g, 『&』).replace(/>/g, 『>』).replace(/</g, 『<』).replace(/」/g, 『"』);
}
如果項目已經開發完成了,又不想大批量改動頁面的話,可以採用第一種方法,此時需要藉助Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils
public class StringEscapeEditor extends PropertyEditorSupport {
private boolean escapeHTML;
private boolean escapeJavaScript;
private boolean escapeSQL;
public StringEscapeEditor() { super(); }
public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {
super();
this.escapeHTML = escapeHTML;
this.escapeJavaScript = escapeJavaScript;
this.escapeSQL = escapeSQL;
}
@Override
public void setAsText(String text) {
if (text == null) {
setValue(null);