我想做的事情如下:
SELECT * FROM USER WHERE NAME LIKE '%Smith%';
Run Code Online (Sandbox Code Playgroud)
我在Arel的尝试:
# params[:query] = 'Smith'
User.where("name like '%?%'", params[:query]).to_sql
Run Code Online (Sandbox Code Playgroud)
但是,这变为:
SELECT * FROM USER WHERE NAME LIKE '%'Smith'%';
Run Code Online (Sandbox Code Playgroud)
Arel正确地包装查询字符串'Smith',但因为这是一个LIKE语句,所以它不起作用.
如何在Arel中进行LIKE查询?
PS奖金 - 我其实是想扫描桌子上两个字段,这两个名称和说明,看是否有查询的任意匹配.那会怎么样?
我使用专有的客户端/服务器消息格式来限制我可以通过网络发送的内容.我无法发送序列化对象,我必须将消息中的数据存储为String.我发送的数据是以逗号分隔的大值,我想在将数据打包为消息之前压缩数据.
我尝试使用Deflater/Inflater实现这一目标,但是在某个地方,我遇到了困难.
我正在使用以下两种方法进行放气/充气.但是,将compressString()方法的结果传递给decompressStringMethod()会返回null结果.
public String compressString(String data) {
Deflater deflater = new Deflater();
byte[] target = new byte[100];
try {
deflater.setInput(data.getBytes(UTF8_CHARSET));
deflater.finish();
int deflateLength = deflater.deflate(target);
return new String(target);
} catch (UnsupportedEncodingException e) {
//TODO
}
return data;
}
public String decompressString(String data) {
String result = null;
try {
byte[] input = data.getBytes();
Inflater inflater = new Inflater();
int inputLength = input.length;
inflater.setInput(input, 0, inputLength);
byte[] output = new byte[100];
int resultLength = inflater.inflate(output);
inflater.end();
result = new String(output, …Run Code Online (Sandbox Code Playgroud)