Submitted by: Łukasz Bączek (baczek00)
Hello Mark,
Sallis has written a small test in Java showing the problem:
Below you have the entire structure of the table:
__._,_.___
/******************************************************************************/
/* Generated by IBExpert 2013.10.8.1 2014-05-16 00:36:35 */
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES UTF8;
CREATE DATABASE ':C:\TEST.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET UTF8 COLLATION UNICODE_CI_AI;
/******************************************************************************/
/* Domains */
/******************************************************************************/
CREATE DOMAIN CHECKBOX AS
SMALLINT
DEFAULT 0
CHECK (value is null or value in (0, 1));
/******************************************************************************/
/* Generators */
/******************************************************************************/
CREATE GENERATOR GEN_OSOBY_ID;
SET GENERATOR GEN_OSOBY_ID TO 138;
/******************************************************************************/
/* Tables */
/******************************************************************************/
CREATE TABLE OSOBY (
ID_OSOBY BIGINT NOT NULL,
IMIE VARCHAR(40) CHARACTER SET UTF8 NOT NULL COLLATE UNICODE_CI_AI,
NAZWISKO VARCHAR(120) CHARACTER SET UTF8 NOT NULL COLLATE UNICODE_CI_AI,
ADRES VARCHAR(150) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
KOD VARCHAR(6) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
MIASTO VARCHAR(30) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
TELEFON VARCHAR(12) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
EMAIL VARCHAR(60) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
DYSTRYBUTOR CHECKBOX,
EKSPERT CHECKBOX,
PRZEDSTAWICIEL CHECKBOX,
WLASCICIEL CHECKBOX,
UWAGI VARCHAR(500) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI
);
INSERT INTO OSOBY (ID_OSOBY, IMIE, NAZWISKO, ADRES, KOD, MIASTO, TELEFON, EMAIL, DYSTRYBUTOR, EKSPERT, PRZEDSTAWICIEL, WLASCICIEL, UWAGI) VALUES (137, 'TESTA', 'TESTb', 'xxx', '00-000', 'TestC', '1234567', 'DEMO@DEMO.DEMO', 0, 0, 0, 0, NULL);
INSERT INTO OSOBY (ID_OSOBY, IMIE, NAZWISKO, ADRES, KOD, MIASTO, TELEFON, EMAIL, DYSTRYBUTOR, EKSPERT, PRZEDSTAWICIEL, WLASCICIEL, UWAGI) VALUES (138, 'Jan', 'Kowalski', 'Aniołów 5', '83-100', 'Warszawa', '0123456', 'jan.kowalski@demo.demo', 0, 0, 0, 0, NULL);
COMMIT WORK;
/******************************************************************************/
/* Primary Keys */
/******************************************************************************/
ALTER TABLE OSOBY ADD CONSTRAINT PK_OSOBY PRIMARY KEY (ID_OSOBY);
/******************************************************************************/
/* Triggers */
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/* Triggers for tables */
/******************************************************************************/
/* Trigger: OSOBY_BI */
CREATE TRIGGER OSOBY_BI FOR OSOBY
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id_osoby is null) then
new.id_osoby = gen_id(gen_osoby_id,1);
end
^
SET TERM ; ^
And so reads the data:
*/
public static void main(String[] args) {
try {
FBWrappingDataSource pool = new FBWrappingDataSource();
pool.setMaxPoolSize(5);
pool.setMinPoolSize(2);
pool.setMaxStatements(2);
pool.setMaxIdleTime(30 * 60 * 60);
pool.setDatabase("<//127.0.0.1/C:/TEST.FDB>");
pool.setUserName("SYSDBA");
pool.setPassword("masterkey");
pool.setCharSet("UTF8");
pool.setEncoding("UTF8");
Connection connection = pool.getConnection();
try {
ResultSet result = null;
StringBuilder SBSQL = new StringBuilder();
SBSQL.append("SELECT * FROM (SELECT id_osoby, imie, nazwisko, adres, kod, miasto, telefon ,email, COALESCE(przedstawiciel,0) AS przedstawiciel, COALESCE(wlasciciel,0) AS wlasciciel, COALESCE(ekspert,0) AS ekspert, COALESCE(dystrybutor,0) AS dystrybutor, uwagi FROM osoby ) WHERE imie LIKE ? OR nazwisko LIKE ? OR adres LIKE ? OR kod LIKE ? OR miasto LIKE ? OR telefon LIKE ?");
PreparedStatement ps = connection.prepareStatement(SBSQL.toString());
ps.setString(1, "%TestA%");
ps.setString(2, "%TestA%");
ps.setString(3, "%TestA%");
ps.setString(4, "%TestA%");
ps.setString(5, "%TestA%");
ps.setString(6, "%TestA%");
result = ps.executeQuery();
while (result.next()) {
System.out.println(result.getInt("IMIE"));
}
} finally {
connection.close();
}
} catch (SQLException ex) {
Logger.getLogger(TestConnectionPool.class.getName()).log(Level.SEVERE, null, ex);
}
SQL query which I used here works without a problem in IBExpert. I think that the problem lies in the driver Javabird and not as previously thought on the length of the field.
maj 16, 2014 12:51:02 AM testconnectionpool.TestConnectionPool main
SEVERE: null
org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation
string right truncation
at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:801)
at org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:182)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.firebirdsql.pool.PooledPreparedStatementHandler.invoke(PooledPreparedStatementHandler.java:171)
at org.firebirdsql.pool.$Proxy1.executeQuery(Unknown Source)
at testconnectionpool.TestConnectionPool.main(TestConnectionPool.java:49)
Caused by: org.firebirdsql.gds.GDSException: Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation
string right truncation
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.readStatusVector(AbstractJavaGDSImpl.java:2092)
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2042)
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscDsqlExecute2(AbstractJavaGDSImpl.java:1149)
at org.firebirdsql.gds.impl.GDSHelper.executeStatement(GDSHelper.java:227)
at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:797)
... 8 more
My Firebird is: WI-6.3.0.26074 Firebird 2.5
My Javabird are: Jaybird-2.2.5-JDK_1.7
Regards
Submitted by: Łukasz Bączek (baczek00)
Hello Mark,
Sallis has written a small test in Java showing the problem:
Below you have the entire structure of the table:
__._,_.___
/******************************************************************************/
/* Generated by IBExpert 2013.10.8.1 2014-05-16 00:36:35 */
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES UTF8;
CREATE DATABASE ':C:\TEST.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET UTF8 COLLATION UNICODE_CI_AI;
/******************************************************************************/
/* Domains */
/******************************************************************************/
CREATE DOMAIN CHECKBOX AS
SMALLINT
DEFAULT 0
CHECK (value is null or value in (0, 1));
/******************************************************************************/
/* Generators */
/******************************************************************************/
CREATE GENERATOR GEN_OSOBY_ID;
SET GENERATOR GEN_OSOBY_ID TO 138;
/******************************************************************************/
/* Tables */
/******************************************************************************/
CREATE TABLE OSOBY (
ID_OSOBY BIGINT NOT NULL,
IMIE VARCHAR(40) CHARACTER SET UTF8 NOT NULL COLLATE UNICODE_CI_AI,
NAZWISKO VARCHAR(120) CHARACTER SET UTF8 NOT NULL COLLATE UNICODE_CI_AI,
ADRES VARCHAR(150) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
KOD VARCHAR(6) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
MIASTO VARCHAR(30) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
TELEFON VARCHAR(12) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
EMAIL VARCHAR(60) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
DYSTRYBUTOR CHECKBOX,
EKSPERT CHECKBOX,
PRZEDSTAWICIEL CHECKBOX,
WLASCICIEL CHECKBOX,
UWAGI VARCHAR(500) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI
);
INSERT INTO OSOBY (ID_OSOBY, IMIE, NAZWISKO, ADRES, KOD, MIASTO, TELEFON, EMAIL, DYSTRYBUTOR, EKSPERT, PRZEDSTAWICIEL, WLASCICIEL, UWAGI) VALUES (137, 'TESTA', 'TESTb', 'xxx', '00-000', 'TestC', '1234567', 'DEMO@DEMO.DEMO', 0, 0, 0, 0, NULL);
INSERT INTO OSOBY (ID_OSOBY, IMIE, NAZWISKO, ADRES, KOD, MIASTO, TELEFON, EMAIL, DYSTRYBUTOR, EKSPERT, PRZEDSTAWICIEL, WLASCICIEL, UWAGI) VALUES (138, 'Jan', 'Kowalski', 'Aniołów 5', '83-100', 'Warszawa', '0123456', 'jan.kowalski@demo.demo', 0, 0, 0, 0, NULL);
COMMIT WORK;
/******************************************************************************/
/* Primary Keys */
/******************************************************************************/
ALTER TABLE OSOBY ADD CONSTRAINT PK_OSOBY PRIMARY KEY (ID_OSOBY);
/******************************************************************************/
/* Triggers */
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/* Triggers for tables */
/******************************************************************************/
/* Trigger: OSOBY_BI */
CREATE TRIGGER OSOBY_BI FOR OSOBY
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id_osoby is null) then
new.id_osoby = gen_id(gen_osoby_id,1);
end
^
SET TERM ; ^
And so reads the data:
*/
public static void main(String[] args) {
try {
FBWrappingDataSource pool = new FBWrappingDataSource();
pool.setMaxPoolSize(5);
pool.setMinPoolSize(2);
pool.setMaxStatements(2);
pool.setMaxIdleTime(30 * 60 * 60);
pool.setDatabase("<//127.0.0.1/C:/TEST.FDB>");
pool.setUserName("SYSDBA");
pool.setPassword("masterkey");
pool.setCharSet("UTF8");
pool.setEncoding("UTF8");
Connection connection = pool.getConnection();
try {
ResultSet result = null;
StringBuilder SBSQL = new StringBuilder();
SBSQL.append("SELECT * FROM (SELECT id_osoby, imie, nazwisko, adres, kod, miasto, telefon ,email, COALESCE(przedstawiciel,0) AS przedstawiciel, COALESCE(wlasciciel,0) AS wlasciciel, COALESCE(ekspert,0) AS ekspert, COALESCE(dystrybutor,0) AS dystrybutor, uwagi FROM osoby ) WHERE imie LIKE ? OR nazwisko LIKE ? OR adres LIKE ? OR kod LIKE ? OR miasto LIKE ? OR telefon LIKE ?");
PreparedStatement ps = connection.prepareStatement(SBSQL.toString());
ps.setString(1, "%TestA%");
ps.setString(2, "%TestA%");
ps.setString(3, "%TestA%");
ps.setString(4, "%TestA%");
ps.setString(5, "%TestA%");
ps.setString(6, "%TestA%");
result = ps.executeQuery();
while (result.next()) {
System.out.println(result.getInt("IMIE"));
}
} finally {
connection.close();
}
} catch (SQLException ex) {
Logger.getLogger(TestConnectionPool.class.getName()).log(Level.SEVERE, null, ex);
}
SQL query which I used here works without a problem in IBExpert. I think that the problem lies in the driver Javabird and not as previously thought on the length of the field.
maj 16, 2014 12:51:02 AM testconnectionpool.TestConnectionPool main
SEVERE: null
org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation
string right truncation
at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:801)
at org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:182)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.firebirdsql.pool.PooledPreparedStatementHandler.invoke(PooledPreparedStatementHandler.java:171)
at org.firebirdsql.pool.$Proxy1.executeQuery(Unknown Source)
at testconnectionpool.TestConnectionPool.main(TestConnectionPool.java:49)
Caused by: org.firebirdsql.gds.GDSException: Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation
string right truncation
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.readStatusVector(AbstractJavaGDSImpl.java:2092)
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2042)
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscDsqlExecute2(AbstractJavaGDSImpl.java:1149)
at org.firebirdsql.gds.impl.GDSHelper.executeStatement(GDSHelper.java:227)
at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:797)
... 8 more
My Firebird is: WI-6.3.0.26074 Firebird 2.5
My Javabird are: Jaybird-2.2.5-JDK_1.7
Regards