日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 查询表 并返回数据_ajax与java前后台传值及数据表查询解决一个bug的问题

發布時間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 查询表 并返回数据_ajax与java前后台传值及数据表查询解决一个bug的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前臺選中某些表,確定提交到后臺,偶爾會報500錯誤,通過排查發現:由于后臺代碼寫的不嚴謹,導致前臺選中的表名如果全不存在的話就會導致后臺走異常報500錯誤,所以決定在前臺先對數據進行一次過濾,使至少有一個表名存在的話才會去走跳轉語句。數據過濾成功之后再去請求下載的方法。下面相關代碼記錄:

1、此處獲取所有選中復選框的id。

function getCheckbox(){var checkbox = $('.un-p-l input'),

len=checkbox.length,

checkboxStr= '';for(var i = 0; i < len; i++){if(checkbox.eq(i).prop("checked")){

checkboxStr+= checkbox.eq(i).val() + ',';

}

}return checkboxStr.substring(0,checkboxStr.length - 1);

}

2、把選中的復選框的id值傳給后臺。

function AcceptClick(){var checkboxStr =getCheckbox();if($.checkSession()){

$.ajax({

url:'${basePath}/dict/logConfigAction_validatorBackUp.do',

datatype:"text",async:true,

data:{'checkbox':checkboxStr

},

success:function(responseText){var obj = eval("(" + responseText + ")");if(obj.result == "success"){var $form = $("#backupForm") ;var action = "";try{

action= $form.attr("action");

$form.attr("action","${basePath}/dict/logConfigAction_backup.do").submit();

}finally{

$form.attr("action",action);

}

}else{

dialogMsg("選中的表名全不存在,無法備份!",-1);

}

}

});

}

}

3、java后臺獲取值,內部操作并返回給前臺

public voidvalidatorBackUp(){

log.info("備份校驗-BEGIN");this.msg=RESULT_FAIL;

String[] logConfigIdsArr= getRequest().getParameter("checkbox").split(",");//獲取前臺傳過來的值,并拆分成數組

List successName = new ArrayList();

List logConfigList = logConfigService.queryByIds(logConfigIdsArr);//通過id去查找表名

List logConfigNewList = new ArrayList();if(!logConfigList.isEmpty()){for(LogConfig LogConfig: logConfigList){

LogConfig logConfigTemp= newLogConfig();

logConfigTemp.setName(MessageUtils.getMessage(LogConfig.getName()));

logConfigTemp.setTableName(LogConfig.getTableName());

logConfigNewList.add(logConfigTemp);

successName.add(MessageUtils.getMessage(LogConfig.getName()));

}

}

boolean tableFlag=logConfigService.tableExits(logConfigNewList,schemaName.toLowerCase());if(tableFlag){this.msg=RESULT_SUCCESS;

}else{this.msg="tableNameFail";

}

print("{result: '"+ this.msg +"'}");

}

queryByIds方法在service層:

public class LogConfigServiceImpl extends BaseServiceImplimplements LogConfigService {

……public ListqueryByIds(String[] ids) {returnlogConfigDao.queryByIds(ids);

}

……

}

dao層里的queryByIds:

public class LogConfigDaoImpl extends BaseDaoImplimplements LogConfigDao {

……public ListqueryByIds(String[] ids) {

String hql= "from" + this.clazz.getName() + "this where this.id in:ids";//hql:from com.vrv.cems.dict.domain.LogConfig this where this.id in:ids

return getSession().createQuery(hql).setParameterList("ids", ids).list();

}

……

}

返回的數據就是:

經過循環處理之后,我們只需要數據里的:name和tableName

4、查詢表,返回給java方法的值。logConfigService.tableExits代表service層的tableExits方法:

public boolean tableExits(ListlogConfigList,String schemaName ) {

List li = null;

List l = new ArrayList();if(logConfigList.size()>0){for(LogConfig logConfig : logConfigList){

l.add(logConfig.getTableName().trim());

}

li=logConfigDao.queryLogTableByTableNames(l,schemaName);

}if(li != null && li.size() > 0){return true;

}else{return false;

}

}

經過循環處理,l只需要它的tableName

5、采用in查詢查詢表的方法:logConfigDao.queryLogTableByTableNames,dao層的queryLogTableByTableNames方法

@Overridepublic ListqueryLogTableByTableNames(List tableNames,String schemaName) {

StringBuilder sql=newStringBuilder();

Map paraMap=new HashMap();//paraMap:{}

sql.append("select COLUMN_NAME,DATA_TYPE FROM information_schema.COLUMNS WHERE table_name IN (:tableNames) and table_schema =:schemaName");

//sql:select COLUMN_NAME,DATA_TYPE FROM information_schema.COLUMNS WHERE table_name? IN (:tableNames) and table_schema =:schemaName

paraMap.put("tableNames", tableNames);

paraMap.put("schemaName", schemaName);

//paraMap:{schemaName=cems, tableNames=[cems_log_device_openlog, cems_log_device_clientLog, cems_log_device_clientLog, cems_log_device_clientLog]}

Query q=getSession().createSQLQuery(sql.toString());

q=assignValues(q, paraMap);returnq.list();

}public Query assignValues(Query query, Mapvalues) {if (values != null) {

Set keySet =values.keySet();for (String string: keySet) {

Object obj= values.get(string);if (obj instanceof Collection>) {

query.setParameterList(string, (Collection>) obj);

}else if(obj instanceof Object[]) {

query.setParameterList(string, (Object[]) obj);

}else{

query.setParameter(string, obj);

}

}

}returnquery;

}

通過in查詢li獲取的值是很多字段,如果查詢到的話;如果沒查詢到就返回的都是空

最后在service層通過判斷返回邏輯值給action層,action層再通過邏輯值確定返回值給前臺。

action層:

service層和dao層:

總結

以上是生活随笔為你收集整理的java 查询表 并返回数据_ajax与java前后台传值及数据表查询解决一个bug的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。