
DATA name(5) TYPE c
DATA it_p0000 LIKE TABLE OF p0000
DATA wa_p0000 TYPE p0000
name = 'PERNR'
以上是你的代码
FIELD-SYMBOLS <fs_field> TYPE p0000-pernr
取数我就不写了
LOOP AT it_p0000 INTO wa_p0000
ASSIGN COMPONENT name OF STRUCTURE wa_p0000 TO <fs_field>
WRITE: / <fs_field>
ENDLOOP
<fs_field> 就是你要的
PS: name = 'PERNR' 注意要大写
首先需要将数据写入正排,如果没写入当然就查询不了。如何写入呢?我们将dealId(DealLuceneFieldATTR_ID)、该deal对应的经纬度字符串(DealLuceneFieldATTR_LOCATIONS,多个时以“,”分隔)写入索引中,FieldStoreYES表示将信息存储在正排里,lucene会将正排信息存放在fdx、fdt两个文件中,fdt存放具体的数据,fdx是对fdt的一个索引(第n个doc数据在fdt中的位置)。
Document doc = new Document();
docadd(new StringField(DealLuceneFieldATTR_ID, StringvalueOf(id, FieldStoreYES));
docadd(new StringField(DealLuceneFieldATTR_LOCATIONS, buildMlls(mllsSet, id), FieldStoreYES));
如何查询呢?
1)直接查询
通过docId直接查询得到document,并将document的内容取出,比如取出经纬度字符串后需要计算最近的距离。
for (int i = 0; i < sdlength; i++) {
Document doc = searcherdoc(sd[i]doc); //sd[i]doc就是docId,earcherdoc(sd[i]doc)就是根据docId查找相应的document
didListadd(IntegerparseInt(docget(DealLuceneFieldATTR_ID)));
if (querygetSortField() == DealSortEnumdistance) {
。。。
String[] mlls = locationssplit(" ");
double dis = findMinDistance(mlls, querygetMyPos()) / 1000;
distBuilderappend(dis)append(",");
}
}
在实际运行中,根据docId获取经纬度信息并计算最短距离这一过程将耗费8ms左右,而且有的时候抖动至20多ms。
2)优化查询
直接查询时将返回所有FieldStoreYES的field数据,而事实上我们仅需要获取id、localtion这两个field的数据,因此优化方法是调用doc函数时传入需要获取的field集合,这样避免获取了整个数据带来的开销。
for (int i = 0; i < sdlength; i++) {
Document doc = searcherdoc(sd[i]doc, fieldsToLoad);
didListadd(IntegerparseInt(docget(DealLuceneFieldATTR_ID)));
if (querygetSortField() == DealSortEnumdistance) {
String locations = docget(DealLuceneFieldATTR_LOCATIONS);
String[] mlls = locationssplit(" ");
double dis = findMinDistance(mlls, querygetMyPos()) / 1000;
distBuilderappend(dis)append(",");
}
首先,定义全局变量 CDatabase db;然后在WM_CREATE中或其他合适地方,打开数据库dbOpen(数据库名,false,false,ODBC;UID=Admin);在你需要的地方,读取字段内容CRecordset rs(&db);CString strNum;int num;rsOpen(CRecordset::forwardOnly,select NUMBER1 from NUM where );if(!rsIsEOF()){rsGetFieldValue(REMARK,strNum);rsClose();num=atoi(strNum);//即将数据库中的数据NUMBER1读取并放到num中了}最后,你用读取出的这个数据和输入的数进行运算就可以了多注意下数据库中的字段类型,要正确读取。程序读取的数据库字段的数据类型是文本的。
我用test1 params1=null;params1=(test1) ClassforName("asdftest1")newInstance();
这一句就已经可以使用test1里面的公有方法和参数了。
的确,没错的。你拿到了Class对象,就相当于拿到了test1的一个副本样,能拿到他的属性和方法。但是你拿到了后该干什么的?你不去调用方法吗?不去给属性设置值吗?你这个就相当于我定义了一个类,里面有属性和方法,但是我外部程序不去调用它。invoke就是调用方法的。
invoke的中文含义就是调用哎。自己百度下invoke的含义吧。
反射的核心就是要拿到该类的字节码对象---》Class对象。(真的是核心,不要看到就这几个字)
都拿到了该类的字节码了,那么该类的什么都能拿到了。比如:属性,方法,构造器,泛型,注解等等。反射使得java具有非常活跃的应用。你能想到的框架,如SSH,无一不利用了反射机制。以及一些设计模式,如动态代理(基于jdk)等,IoC、DI、AOP等等,底层都用到了反射。
至于真么用反射,我就不说了,网上多得是,随便百度一下就是一大把。
等你学完SSH,理解一些常用的设计模式,看看他们的底层实现,反射就通了。
做数据库查询的时候,比较经常用到这两个,总是查手册,记不住,现在把它总结下,希望以后用的时候不查手册了。
不管是用select 查询数据集,还是用find 查询数据,常配合连贯 *** 作where、field、order等一起使用。
field():用于定义要查询的字段(支持字段排除)
用法:field($field , $except=false)
参数:$field —— 字段名,要查询的字段名;
$except —— 是否排除,默认为false,省略不写;如果为true,表示定义的字段为数据表中排除$field参数定义之外的所有字段
返回值:当前的模型实例
注:不调用field方法,默认返回所有字段,和field( '' )等效。
需要显式的传入所有的字段,可以使用下面的方法:
$model -> field(true) ->select() ;
但是建议只获取需要显式的字段名,或者采用字段排除方式来定义,例如:
$model ->field( 'status' , true) ->select(); //获取除了status之外的所有字段
$model ->field( 'id','nickname')->select(); //获取id和nickname字段
getField():用于查询某个字段的值
用法:getField($field, $sepa=null)
参数:$field —— 要获取的字段字符串(多个用逗号分隔)
$sepa —— 字段数据间隔符号,如果是 NULL返回数组为数组。默认为null
返回值:如果查询结果为空返回null,如果field是一个字段则返回该字段的值,如果field是多个字段,返回数组。数组的索引是第一个字段的值,sepa为null则返回二维数组。
示例:当只有一个字段的时候,默认返回一个值。
$User = M("User"); // 实例化User对象
// 获取ID为3的用户的昵称
$nickname = $User->where('id=3')->getField('nickname');
示例:如果需要返回数组:
以上就是关于ABAP中,字段名存放在一个变量里,如何取内表的这个字段值全部的内容,包括:ABAP中,字段名存放在一个变量里,如何取内表的这个字段值、lucene如何通过docId快速查找field字段以及最近距离等信息、getfieldvalue如何获取文本类型数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)