第一背景。Firebird CHAR_TO_UUID,因GDS異常失敗。 335544606
我使用Java作爲Eclipse RCP(efxclipse)編寫桌面應用程序。 我的配置:
- Eclipse的火星
- efxclipse 2.0.0
- JDK 1.8_66
- 的Equinox OSGi框架
- 火鳥2.5.5.26952
- Jaybird 2.2.9
- HicariCP 2.4 .1作爲連接池解決方案
數據庫表例如:
CREATE TABLE MYTABLE (
ID CHAR(16) CHARACTER SET OCTETS COLLATE OCTETS NOT NULL CONSTRAINT PK_MY_INDEX PRIMARY KEY,
DATA VARCHAR(100)
);
HikariCP設置爲
HikariConfig config = new HikariConfig();
config.setMaximumPoolSize(100);
config.setDataSourceClassName("org.firebirdsql.pool.FBSimpleDataSource");
config.addDataSourceProperty("databaseName", cfg.getDbConnection());
config.addDataSourceProperty("user", cfg.getDbUser());
config.addDataSourceProperty("password", cfg.getDbPassword());
config.addDataSourceProperty("encoding", "UTF8");
//config.addDataSourceProperty("nonStandardProperty", "?octetsAsBytes=true?");
config.setMaximumPoolSize(cfg.getDbPoolSizeMax());
HikariDataSource ds = new HikariDataSource(config);
ds.setConnectionTimeout(5000);
//我使用UUID作爲主鍵和GET行我使用像
Connection con = ds.getConnection();
query = "SELECT DATA FROM MYTABLE WHERE ID=char_to_uuid(?)";
PreparedStatement p = con.prepareStatement(query);
p.setString(1, id);
代碼中是「ID 「是具有像'57F2B8C7-E1D8-4B61-9086-C66D1794F2D9'的字符串'
直到上週我在我的電腦上使用了Firebird 2.5.2xxx和Jaybird 2.2.8,並且這個設置完全沒有問題。然後我升級了我的Firebird安裝到版本2.5.5.26952並且出現了問題。
問題:
升級到火鳥2.5.5代碼部分在哪裏取爲已知的「ID」行後拋出「ID」的例外
org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544606. expression evaluation not supported
Human readable UUID argument for CHAR_TO_UUID must be of exact length 36
at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:782) ~[na:na]
at org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:177) ~[na:na]
at com.zaxxer.hikari.proxy.PreparedStatementProxy.executeQuery(PreparedStatementProxy.java:52) ~[na:na]
at com.zaxxer.hikari.proxy.HikariPreparedStatementProxy.executeQuery(HikariPreparedStatementProxy.java) ~[na:na]
...
Caused by: org.firebirdsql.gds.GDSException: expression evaluation not supported
Human readable UUID argument for CHAR_TO_UUID must be of exact length 36
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.readStatusVector(AbstractJavaGDSImpl.java:2092) ~[na:na]
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2042) ~[na:na]
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscDsqlExecute2(AbstractJavaGDSImpl.java:1149) ~[na:na]
at org.firebirdsql.gds.impl.GDSHelper.executeStatement(GDSHelper.java:232) ~[na:na]
at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:774) ~[na:na]
值是字符串在36炭化長度(我檢查了它,直到上週纔有效)。我已經轉向Jaybird 2.2.9問題了。 據我瞭解,這是關係到像發送參數值UTF8字符串(長度×4),所以我改變了我的代碼看起來象下面這樣:
p.setObject(1, id.getBytes(StandardCharsets.US_ASCII));
同樣,沒有結果,同樣的問題。
而且這可能是一些與Jaybird連接參數octetsAsBytes相關,但我無法管理應用是正確的(通過HikariCP)。 我試圖
config.addDataSourceProperty("nonStandardProperty", "?octetsAsBytes=true?");
在HikariCP設置,但結果並沒有改變。
在此先感謝。
這適用於我通過普通JDBC(不使用數據源或連接池)使用Firebird WI-V2.5.5.26952和Jaybird 2.2.9。 –
問題是從升級Firebird開始還是升級jaybird?請注意,對於'nonStandardProperty',你不應該包含這些問號,儘管這個屬性對這裏的行爲沒有任何影響。 –
如果你嘗試使用單字節連接編碼,如win1252,會發生什麼情況? –