如何解决在jOOQ中动态创建条件
我有以下两条jOOQ行,效果很好:
Formulas f = FORMULAS.as("f");
Condition condition = x > y ? f.SK.eq(sk) : f.SK.eq(0);
现在,由于我有100个需要相同条件的表,并且条件比上面的示例复杂得多,因此我想创建一个类似这样的方法:
public Condition getCondition(Table table,int x,int y,int sk) {
Condition condition = // write here a generic condition
return condition;
}
但是我不知道如何一般性地将列分配给表。该如何处理?
解决方法
您可以使用以下内容:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <signal.h>
#include <stdlib.h>
#define MAXSIZE 256
int isTerminated(char buffer[],int len);
void writeSocket(int sock,char buffer[]);
int main(){
struct sockaddr_in Local;
struct sockaddr_in Client;
short int port=1745;
char buffer[MAXSIZE];
int sockfd,newsockfd,n,nread,nwrite,len;
int turn_off=0;//Controllare le impostazioni del contatore
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0){
fprintf(stderr,"Server: Socket creating failed!\n");
return -1;
}else
printf("Server: Socket created!\n");
memset(&Local,sizeof(Local));
Local.sin_family=AF_INET;
Local.sin_addr.s_addr=htonl(INADDR_ANY);
Local.sin_port=htons(port);
if(bind(sockfd,(struct sockaddr*)&Local,sizeof(Local))<0){
fprintf(stderr,"Server: Binding socket failed!\n");
return -1;
}else
printf("Server: Bind ok!\n");
if(listen(sockfd,10)<0){
fprintf(stderr,"Server: Listen failed!\n");
return -1;
}else
printf("Server: Listen ok!\n");
while(1){
buffer[0]='\0';
printf("Server: Waiting for connection...\n");
newsockfd=accept(sockfd,(struct sockaddr*)&Client,&len);
printf("Server: Connection accepted!\n");
nread=0;
while((n=read(newsockfd,&(buffer[nread]),MAXSIZE))>0){
nread+=n;
printf("Server: Ho letto %d caratteri con %d totali!\n",nread);
if(isTerminated(buffer,nread))//Fine stringa
break;
}
buffer[nread]='\0';
printf("Ho ricevuto il messaggio %s\n",buffer);
if(!strcmp(buffer,"Turn OFF")){
buffer[0]='\0';
strcpy(buffer,"Counter OFF");
turn_off=1;
}else{
buffer[0]='\0';
strcpy(buffer,"OK");
}
/*nwrite=0;
buffer[strlen(buffer)]='\0';
int str_len=strlen(buffer)+1;
while((str_len>nwrite) && (n=write(newsockfd,&(buffer[nwrite]),str_len-nwrite)>0))
nwrite+=n;*/
writeSocket(sockfd,buffer);
close(newsockfd);
if(turn_off)//Spegni il contatore e salva la sessione
break;
}
close(sockfd);
return 0;
}
void writeSocket(int sock,char buffer[]){
buffer[strlen(buffer)]='\0';
int str_len=strlen(buffer)+1;
int nwrite=0;
int n;
printf("Devo inviare il messaggio: %s\n",buffer);
printf("Valore n: %d\n",sock);
while((str_len>nwrite) && (n=write(sock,str_len-nwrite)>0))
nwrite+=n;
}
int isTerminated(char buffer[],int len){
int i;
for(i=0; i<=len; i++)
if(buffer[i] == '\0')
return 1;
return 0;
}
或更详细,但输入安全版本:
public static Condition makeCondition(Table<?> table,int x,int y,int sk) {
Field<Integer> skField = table.field("sk",int.class);
return x > y ? skField.eq(sk) : skField.eq(0);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。