Jfinal中增加getRecord适应分表功能的表单提交数据获取

@jfinal

项目中用到了分表 没有使用Model 也就不能使用ActiveRecordPlugin 使用Db+Record模式 分表的时候每个用户开户的时候生成一套表结构 比如student5 grade11这种类似。

在页面表单中提交的数据不能用getModel得到 所以仿照getModel的写法写了一套getRecord的实现,方便分表的项目用Db+Record的方式 接受表单提交的数据。

import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Record;

public class RecordInjector {
	public static <T> T inject(Class<?> recordClass, HttpServletRequest request, boolean skipConvertError) {
		String recordName = recordClass.getSimpleName();
		return inject(recordClass, StrKit.firstCharToLowerCase(recordName), request, skipConvertError);
	}
	
	@SuppressWarnings({ "unchecked" })
	public static final <T> T inject(Class<?> recordClass, String recordName, HttpServletRequest request, boolean skipConvertError) {
		Record record = null;
		try {
			record = (Record) recordClass.newInstance();
		} catch (Exception e) {
		}
		
		injectRecord(record, recordName, request, recordClass, skipConvertError);
		
		return (T)record;
	}
	
	private static final void injectRecord(Record record, String recordName, HttpServletRequest request, Class<?> recordClass, boolean skipConvertError) {
		Map<String, String[]> paramMap=request.getParameterMap();
		String start =recordName+".";
		String[] value=null;
		for (Entry<String, String[]> param: paramMap.entrySet()) {
			if(!param.getKey().startsWith(start)){
				continue;
			}
			value=param.getValue();
			if (ArrayUtils.isNotEmpty(value)&&StringUtils.isNotBlank(value[0])) {
				if(value.length==1){
					record.set(StringUtils.removeStart(param.getKey(), start), value[0]);
				}else{
					record.set(StringUtils.removeStart(param.getKey(), start), value);
				}
				
			}else{
				record.set(StringUtils.removeStart(param.getKey(), start),null);
			}
		}
	}
}



用法:自己封装一个BaseController 在里面添加getRecord实现

@SuppressWarnings("unchecked")
	public <T> T getRecord(String recordName) {
		return (T) getRecord(Record.class,recordName);
	}



public <T> T getRecord(Class<T> recordClass, String recordName) {
		return (T)RecordInjector.inject(recordClass, recordName, this.getRequest(), false);
	}



JFinal极速开发实战教程在线观看

转载于:https://my.oschina.net/imhoodoo/blog/272091

要使用 MFC 更改 Access 数据,你需要使用 MFC 的数据库类和 ODBC 驱动程序。下面是一个简单的示例,演示如何使用 MFC 对 Access 数据库进行增删改查操作: 1. 首先,在你的 MFC 应用程序添加一个数据库类。右键单击项目,选择“添加”->“类”,然后选择“数据库”类。 2. 在你的数据库添加以下代码,以连接到 Access 数据库: ``` BOOL CMyDatabase::Open() { CString sDriver = _T("Microsoft Access Driver (*.mdb)"); CString sFile = _T("C:\\mydatabase.mdb"); CString sDsn; sDsn.Format(_T("ODBC;DRIVER={%s};DSN='';DBQ=%s"), sDriver, sFile); if (!CDatabase::OpenEx(sDsn, CDatabase::noOdbcDialog)) { return FALSE; } return TRUE; } ``` 其,sFile 是你的 Access 数据库文件的路径。 3. 添加以下代码,以执行增删改查操作: ``` BOOL CMyDatabase::AddRecord(const CString& sName, const CString& sAddress) { CString strSQL; strSQL.Format(_T("INSERT INTO MyTable (Name, Address) VALUES ('%s', '%s')"), sName, sAddress); try { ExecuteSQL(strSQL); return TRUE; } catch(CDBException* e) { TRACE(_T("Error: %s\n"), e->m_strError); e->Delete(); return FALSE; } } BOOL CMyDatabase::UpdateRecord(int nID, const CString& sName, const CString& sAddress) { CString strSQL; strSQL.Format(_T("UPDATE MyTable SET Name = '%s', Address = '%s' WHERE ID = %d"), sName, sAddress, nID); try { ExecuteSQL(strSQL); return TRUE; } catch(CDBException* e) { TRACE(_T("Error: %s\n"), e->m_strError); e->Delete(); return FALSE; } } BOOL CMyDatabase::DeleteRecord(int nID) { CString strSQL; strSQL.Format(_T("DELETE FROM MyTable WHERE ID = %d"), nID); try { ExecuteSQL(strSQL); return TRUE; } catch(CDBException* e) { TRACE(_T("Error: %s\n"), e->m_strError); e->Delete(); return FALSE; } } BOOL CMyDatabase::GetRecord(int nID, CString& sName, CString& sAddress) { CString strSQL; strSQL.Format(_T("SELECT Name, Address FROM MyTable WHERE ID = %d"), nID); try { CRecordset rs(this); rs.Open(CRecordset::forwardOnly, strSQL); if (rs.GetRecordCount() == 0) { return FALSE; } rs.GetFieldValue(_T("Name"), sName); rs.GetFieldValue(_T("Address"), sAddress); rs.Close(); return TRUE; } catch(CDBException* e) { TRACE(_T("Error: %s\n"), e->m_strError); e->Delete(); return FALSE; } } ``` 其,MyTable 是你的 Access 数据库的表名。 4. 调用上述函数,以执行相应的操作。例如: ``` CMyDatabase db; if (db.Open()) { // 添加记录 db.AddRecord(_T("John Doe"), _T("123 Main St.")); // 修改记录 db.UpdateRecord(1, _T("Jane Doe"), _T("456 Elm St.")); // 删除记录 db.DeleteRecord(2); // 获取记录 CString sName, sAddress; if (db.GetRecord(1, sName, sAddress)) { TRACE(_T("Name: %s\nAddress: %s\n"), sName, sAddress); } } db.Close(); ``` 注意,上述代码仅供参考,并且可能需要根据你的实际情况进行修改。此外,还需要确保你的 Access 数据库已正确设置,并且你的 ODBC 驱动程序已正确安装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值