phoenix 5.0 CURSOR 游标(三) 不得不说的坑

这个坑,不是phoenix 本身的问题。

只有在多线程并行的情况下才会发生。

 

会出现各种错误,比如:

org.apache.phoenix.exception.PhoenixIOException: null

org.apache.phoenix.schema.ColumnNotFoundException: ERROR 504 (42703): Undefined column. columnName=BROWSER

java.sql.SQLException: Can't declare cursor dataCursor, cursor identifier already in use.

 

这种情况下,所有的问题都是 游标名称引起的,因为在多线程场景下,游标创建导致的异常。

游标名称重复了,提示已经在使用。附带出现了一些奇怪的异常,比如null、列找不到。

 

知道原因了,解决的方法也很简单,那就是生成唯一的游标名称即可。

/**
     * 生成唯一的游标名称
     * 避免多线程情况,执行游标时,phoenix出现异常
     * @return
     */
    public static String getCursorName(){
        // 游标名称不能数字开头 Error: ERROR 603 (42P00): Syntax error. Unexpected input. Expecting "NAME", got...
        String first = "ag";
        String uuid = UUID.randomUUID().toString().replace("-","");
        String cursorName = first + uuid;
        return cursorName;
    }

我写的phoenix的工具类:https://blog.csdn.net/Cky079/article/details/88172671

 

--END

 

 

 

 

你可能感兴趣的:(Phoenix)