【问题标题】:Not able to retrieve the column names correctly with memcached无法使用 memcached 正确检索列名
【发布时间】:2016-05-03 21:44:19
【问题描述】:

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

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 的相同路径。

【问题讨论】:

    标签: java mysql scala memcached


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 2017-07-22
      相关资源
      最近更新 更多