gpt4 book ai didi

java - 无法使用 memcached 正确检索列名

转载 作者:行者123 更新时间:2023-11-29 21:03:40 25 4
gpt4 key购买 nike

我有一个scala代码来使用memcached缓存MYSQL数据。下面是代码。

import java.sql.DriverManager
import scala.collection.mutable.ArrayBuffer
import java.sql.ResultSet
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
import net.spy.memcached.MemcachedClient
import net.spy.memcached.AddrUtil
import net.spy.memcached.BinaryConnectionFactory
import com.sun.rowset.CachedRowSetImpl
import java.util.concurrent.TimeoutException
import java.util.concurrent.TimeUnit

object Memcachedtest
{
def MD5encode(query_line:String):String=
{
var md5:String=null;

if (query_line == null) return null;

try {
val digest1:MessageDigest = MessageDigest.getInstance("MD5");
val hash:Array[Byte] =digest1.digest(query_line.getBytes());
val sb:StringBuilder = new StringBuilder(2*hash.length);

digest1.update(query_line.getBytes());
for(b <- hash)
{
sb.append("%02x".format( b&0xff));
}
md5=sb.toString();
}
catch
{
case e:NoSuchAlgorithmException => e.printStackTrace();
}
md5
}

def memcache_get_result(mysql_table_statement:String)
{
var crsi:CachedRowSetImpl=new CachedRowSetImpl();
var mem_client:MemcachedClient=new MemcachedClient(new BinaryConnectionFactory(), AddrUtil.getAddresses("IP"))

var obj:Object=null
Class.forName("com.mysql.jdbc.Driver");

val conn = DriverManager.getConnection("jdbc:mysql:IP","user","pass");
val query_md5_res=MD5encode(mysql_table_statement);
var future_object=mem_client.asyncGet(query_md5_res);
try {
obj=future_object.get(5, TimeUnit.SECONDS);
}
catch {

case t:TimeoutException => future_object.cancel(false);
System.out.println("Memcached timeout...");
}
if (obj==null) {
System.out.print("Query result not in Memcached, ");
var res:ResultSet = conn.createStatement().executeQuery(mysql_table_statement);
crsi.populate(res);

res.close();
mem_client.set(query_md5_res, 10, crsi);
while (crsi.next()) {

System.out.print("output : " + crsi.getString("COLUMN_ID"));
}
crsi.close();
}
else {
System.out.print("Query result in Memcached, ");
var crsi_res_set:CachedRowSetImpl=obj.asInstanceOf[CachedRowSetImpl]
System.out.println(crsi_res_set);
crsi_res_set.beforeFirst();
while (crsi_res_set.next()) {

System.out.print("output : " + crsi.getString("COLUMN_ID"));
}
crsi_res_set.close();
}

if (conn != null) {
conn.close();
}
}

def main(args:Array[String])
{
var crsi:CachedRowSetImpl=new CachedRowSetImpl();
var mem_client:MemcachedClient=new MemcachedClient(new BinaryConnectionFactory(), AddrUtil.getAddresses("IP"))
memcache_get_result("select statement")
memcache_get_result("select statement")

mem_client.shutdown();
}


}

当我使用 crsi.next() 检索结果时,使用 crsi.getString(Columnname) 获取的列名称没有给出正确的列名称,假设如果我有两到三个列名,其中 A_ID、B_ID、C_ID 所有列名都只是 ID 而不是前缀。因此,当我用 crsi.getString(A_ID) 打印它时,没有结果。

另一件奇怪的事情是我有 2 个 eclipse,其中 1 个有 Maven 构建,另一个有 sbt 构建,其中带有 scala 代码的 Maven 构建工作正常,但带有 sbt 构建的却出现了这个问题。那么罪魁祸首应该是 CachedRowSetImpl 类,但两个相同的 JRE 版本和 rt.jar 都指向 Eclipse 的相同路径。

最佳答案

问题出在 MYSQL JDBC 版本上。 SBT 版本有 mysql jdbc 版本 5.1.5,另一个版本有 5.0.4 MySQL 连接器 jar。删除了 MYSQL jdbc jar 并使用 5.0.4 更新了 MYSQL 连接器 jar 的库依赖项。

关于java - 无法使用 memcached 正确检索列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37004917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com