Skip to content

Commit 143e103

Browse files
ztarvosTotktonada
authored andcommitted
jdbc: fix date/time parameters binding
Fixed exception when packing date/time parameters of prepared statement. Added test for parameter binding methods. Closes #43
1 parent d38b8ad commit 143e103

File tree

2 files changed

+69
-3
lines changed

2 files changed

+69
-3
lines changed

src/main/java/org/tarantool/jdbc/SQLMsgPackLite.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ public class SQLMsgPackLite extends MsgPackLite {
1717
public void pack(Object item, OutputStream os) throws IOException {
1818
if(item instanceof Date) {
1919
super.pack(((Date)item).getTime(), os);
20-
} if(item instanceof Time) {
20+
} else if(item instanceof Time) {
2121
super.pack(((Time)item).getTime(), os);
22-
} if(item instanceof Timestamp) {
22+
} else if(item instanceof Timestamp) {
2323
super.pack(((Timestamp)item).getTime(), os);
24-
} if(item instanceof BigDecimal) {
24+
} else if(item instanceof BigDecimal) {
2525
super.pack(((BigDecimal)item).toPlainString(), os);
2626
} else {
2727
super.pack(item, os);

src/test/java/org/tarantool/jdbc/JdbcPreparedStatementIT.java

+66
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@
33
import org.junit.jupiter.api.Test;
44
import org.junit.jupiter.api.AfterEach;
55

6+
import java.math.BigDecimal;
7+
import java.sql.Date;
68
import java.sql.PreparedStatement;
79
import java.sql.ResultSet;
810
import java.sql.SQLException;
11+
import java.sql.Time;
12+
import java.sql.Timestamp;
913

1014
import static org.junit.jupiter.api.Assertions.assertEquals;
1115
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -64,4 +68,66 @@ public void testExecuteUpdate() throws Exception {
6468

6569
assertEquals("thousand", getRow("test", 1000).get(1));
6670
}
71+
72+
@Test
73+
public void testSetParameter() throws SQLException {
74+
prep = conn.prepareStatement("INSERT INTO test_types VALUES (" +
75+
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
76+
assertNotNull(prep);
77+
78+
prep.setInt(1, 1000);//INT
79+
prep.setString(2, (String)testRow[1]);//CHAR
80+
prep.setString(3, (String)testRow[2]);//VARCHAR
81+
prep.setString(4, (String)testRow[3]);//LONGVARCHAR
82+
prep.setBigDecimal(5, (BigDecimal)testRow[4]);//NUMERIC
83+
prep.setBigDecimal(6, (BigDecimal)testRow[5]);//DECIMAL
84+
prep.setBoolean(7, (Boolean)testRow[6]);//BIT
85+
prep.setByte(8, (Byte)testRow[7]);//TINYINT
86+
prep.setShort(9, (Short)testRow[8]);//SMALLINT
87+
prep.setInt(10, (Integer)testRow[9]);//INTEGER
88+
prep.setLong(11, (Long)testRow[10]);//BIGINT
89+
prep.setFloat(12, (Float)testRow[11]);//REAL
90+
prep.setDouble(13, (Double)testRow[12]);//FLOAT
91+
prep.setBytes(14, (byte[])testRow[13]);//BINARY
92+
prep.setBytes(15, (byte[])testRow[14]);//VARBINARY
93+
prep.setBytes(16, (byte[])testRow[15]);//LONGVARBINARY
94+
prep.setDate(17, (Date)testRow[16]);//DATE
95+
prep.setTime(18, (Time)testRow[17]);//TIME
96+
prep.setTimestamp(19, (Timestamp)testRow[18]);//TIMESTAMP
97+
98+
int count = prep.executeUpdate();
99+
assertEquals(1, count);
100+
101+
prep.close();
102+
103+
prep = conn.prepareStatement("SELECT * FROM test_types WHERE f1 = ?");
104+
prep.setInt(1, 1000);
105+
106+
ResultSet rs = prep.executeQuery();
107+
assertNotNull(rs);
108+
109+
assertTrue(rs.next());
110+
assertEquals(1000, rs.getInt(1));//INT
111+
assertEquals(testRow[1], rs.getString(2));//CHAR
112+
assertEquals(testRow[2], rs.getString(3));//VARCHAR
113+
assertEquals(testRow[3], rs.getString(4)); //LONGVARCHAR
114+
assertEquals(testRow[4], rs.getBigDecimal(5));//NUMERIC
115+
assertEquals(testRow[5], rs.getBigDecimal(6));//DECIMAL
116+
assertEquals(testRow[6], rs.getBoolean(7));//BIT
117+
assertEquals(testRow[7], rs.getByte(8));//TINYINT
118+
assertEquals(testRow[8], rs.getShort(9));//SMALLINT
119+
assertEquals(testRow[9], rs.getInt(10));//INTEGER
120+
assertEquals(testRow[10], rs.getLong(11));//BIGINT
121+
assertEquals((Float)testRow[11], rs.getFloat(12), 1e-10f);//REAL
122+
assertEquals((Double)testRow[12], rs.getDouble(13), 1e-10d);//FLOAT
123+
//Issue#45
124+
//assertTrue(Arrays.equals((byte[])testRow[13], rs.getBytes(14)));//BINARY
125+
//assertTrue(Arrays.equals((byte[])testRow[14], rs.getBytes(15)));//VARBINARY
126+
//assertTrue(Arrays.equals((byte[])testRow[15], rs.getBytes(16)));//LONGVARBINARY
127+
assertEquals(testRow[16], rs.getDate(17));//DATE
128+
assertEquals(testRow[17], rs.getTime(18));//TIME
129+
assertEquals(testRow[18], rs.getTimestamp(19));//TIMESTAMP
130+
131+
rs.close();
132+
}
67133
}

0 commit comments

Comments
 (0)