提交 adea42dc authored 作者: Philippe Marschall's avatar Philippe Marschall

Support more types in getObject

ResultSet#getObject is missing some conversions in table B.4 of the
JDBC specification.

- add support for Blob in getObject
- add support for Clob in getObject
- add support BigInteger <-> BIGINT
- add support java.util.Date <-> TIMESTAMP
- add support java.util.Calendar <-> TIMESTAMP
- add tests for SMALLINT
- add tests for BIGINT
上级 3e07806f
...@@ -8,6 +8,7 @@ package org.h2.jdbc; ...@@ -8,6 +8,7 @@ package org.h2.jdbc;
import java.io.InputStream; import java.io.InputStream;
import java.io.Reader; import java.io.Reader;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URL; import java.net.URL;
import java.sql.Array; import java.sql.Array;
import java.sql.Blob; import java.sql.Blob;
...@@ -3771,6 +3772,8 @@ public class JdbcResultSet extends TraceObject implements ResultSet, JdbcResultS ...@@ -3771,6 +3772,8 @@ public class JdbcResultSet extends TraceObject implements ResultSet, JdbcResultS
} }
if (type == BigDecimal.class) { if (type == BigDecimal.class) {
return type.cast(value.getBigDecimal()); return type.cast(value.getBigDecimal());
} else if (type == BigInteger.class) {
return type.cast(BigInteger.valueOf(value.getLong()));
} else if (type == String.class) { } else if (type == String.class) {
return type.cast(value.getString()); return type.cast(value.getString());
} else if (type == Boolean.class) { } else if (type == Boolean.class) {
...@@ -3793,6 +3796,12 @@ public class JdbcResultSet extends TraceObject implements ResultSet, JdbcResultS ...@@ -3793,6 +3796,12 @@ public class JdbcResultSet extends TraceObject implements ResultSet, JdbcResultS
return type.cast(value.getTime()); return type.cast(value.getTime());
} else if (type == Timestamp.class) { } else if (type == Timestamp.class) {
return type.cast(value.getTimestamp()); return type.cast(value.getTimestamp());
} else if (type == java.util.Date.class) {
return type.cast(new java.util.Date(value.getTimestamp().getTime()));
} else if (type == Calendar.class) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(value.getTimestamp());
return type.cast(calendar);
} else if (type == UUID.class) { } else if (type == UUID.class) {
return type.cast(value.getObject()); return type.cast(value.getObject());
} else if (type == byte[].class) { } else if (type == byte[].class) {
...@@ -3800,6 +3809,12 @@ public class JdbcResultSet extends TraceObject implements ResultSet, JdbcResultS ...@@ -3800,6 +3809,12 @@ public class JdbcResultSet extends TraceObject implements ResultSet, JdbcResultS
} else if (type == java.sql.Array.class) { } else if (type == java.sql.Array.class) {
int id = getNextId(TraceObject.ARRAY); int id = getNextId(TraceObject.ARRAY);
return type.cast(value == ValueNull.INSTANCE ? null : new JdbcArray(conn, value, id)); return type.cast(value == ValueNull.INSTANCE ? null : new JdbcArray(conn, value, id));
} else if (type == Blob.class) {
int id = getNextId(TraceObject.ARRAY);
return type.cast(value == ValueNull.INSTANCE ? null : new JdbcBlob(conn, value, id));
} else if (type == Clob.class) {
int id = getNextId(TraceObject.ARRAY);
return type.cast(value == ValueNull.INSTANCE ? null : new JdbcClob(conn, value, id));
} else if (type == TimestampWithTimeZone.class) { } else if (type == TimestampWithTimeZone.class) {
return type.cast(value.getObject()); return type.cast(value.getObject());
} else if (DataType.isGeometryClass(type)) { } else if (DataType.isGeometryClass(type)) {
......
...@@ -14,6 +14,7 @@ import java.io.Writer; ...@@ -14,6 +14,7 @@ import java.io.Writer;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.sql.Array; import java.sql.Array;
import java.sql.Blob;
import java.sql.Clob; import java.sql.Clob;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
...@@ -88,6 +89,8 @@ public class TestResultSet extends TestBase { ...@@ -88,6 +89,8 @@ public class TestResultSet extends TestBase {
assertTrue(stat.getMaxRows() == 6); assertTrue(stat.getMaxRows() == 6);
testInt(); testInt();
testSmallInt();
testBigInt();
testVarchar(); testVarchar();
testDecimal(); testDecimal();
testDoubleFloat(); testDoubleFloat();
...@@ -741,6 +744,260 @@ public class TestResultSet extends TestBase { ...@@ -741,6 +744,260 @@ public class TestResultSet extends TestBase {
stat.setMaxRows(0); stat.setMaxRows(0);
} }
private void testSmallInt() throws SQLException {
trace("Test SMALLINT");
ResultSet rs;
Object o;
stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY,VALUE SMALLINT)");
stat.execute("INSERT INTO TEST VALUES(1,-1)");
stat.execute("INSERT INTO TEST VALUES(2,0)");
stat.execute("INSERT INTO TEST VALUES(3,1)");
stat.execute("INSERT INTO TEST VALUES(4," + Short.MAX_VALUE + ")");
stat.execute("INSERT INTO TEST VALUES(5," + Short.MIN_VALUE + ")");
stat.execute("INSERT INTO TEST VALUES(6,NULL)");
// MySQL compatibility (is this required?)
// rs=stat.executeQuery("SELECT * FROM TEST T ORDER BY ID");
// check(rs.findColumn("T.ID"), 1);
// check(rs.findColumn("T.NAME"), 2);
rs = stat.executeQuery("SELECT *, NULL AS N FROM TEST ORDER BY ID");
// MySQL compatibility
assertEquals(1, rs.findColumn("TEST.ID"));
assertEquals(2, rs.findColumn("TEST.VALUE"));
assertTrue(rs.getRow() == 0);
assertResultSetMeta(rs, 3, new String[] { "ID", "VALUE", "N" },
new int[] { Types.INTEGER, Types.SMALLINT,
Types.NULL }, new int[] { 10, 5, 1 }, new int[] { 0, 0, 0 });
rs.next();
assertTrue(rs.getRow() == 1);
assertEquals(2, rs.findColumn("VALUE"));
assertEquals(2, rs.findColumn("value"));
assertEquals(2, rs.findColumn("Value"));
assertEquals(2, rs.findColumn("Value"));
assertEquals(1, rs.findColumn("ID"));
assertEquals(1, rs.findColumn("id"));
assertEquals(1, rs.findColumn("Id"));
assertEquals(1, rs.findColumn("iD"));
assertTrue(rs.getShort(2) == -1 && !rs.wasNull());
assertTrue(rs.getShort("VALUE") == -1 && !rs.wasNull());
assertTrue(rs.getShort("value") == -1 && !rs.wasNull());
assertTrue(rs.getShort("Value") == -1 && !rs.wasNull());
assertTrue(rs.getString("Value").equals("-1") && !rs.wasNull());
o = rs.getObject("value");
trace(o.getClass().getName());
assertTrue(o instanceof Short);
assertTrue(((Short) o).shortValue() == -1);
o = rs.getObject("value", Short.class);
trace(o.getClass().getName());
assertTrue(o instanceof Short);
assertTrue(((Short) o).shortValue() == -1);
o = rs.getObject(2);
trace(o.getClass().getName());
assertTrue(o instanceof Short);
assertTrue(((Short) o).shortValue() == -1);
o = rs.getObject(2, Short.class);
trace(o.getClass().getName());
assertTrue(o instanceof Short);
assertTrue(((Short) o).shortValue() == -1);
assertTrue(rs.getBoolean("Value"));
assertTrue(rs.getByte("Value") == (byte) -1);
assertTrue(rs.getInt("Value") == -1);
assertTrue(rs.getLong("Value") == -1);
assertTrue(rs.getFloat("Value") == -1.0);
assertTrue(rs.getDouble("Value") == -1.0);
assertTrue(rs.getString("Value").equals("-1") && !rs.wasNull());
assertTrue(rs.getShort("ID") == 1 && !rs.wasNull());
assertTrue(rs.getShort("id") == 1 && !rs.wasNull());
assertTrue(rs.getShort("Id") == 1 && !rs.wasNull());
assertTrue(rs.getShort(1) == 1 && !rs.wasNull());
rs.next();
assertTrue(rs.getRow() == 2);
assertTrue(rs.getShort(2) == 0 && !rs.wasNull());
assertTrue(!rs.getBoolean(2));
assertTrue(rs.getByte(2) == 0);
assertTrue(rs.getInt(2) == 0);
assertTrue(rs.getLong(2) == 0);
assertTrue(rs.getFloat(2) == 0.0);
assertTrue(rs.getDouble(2) == 0.0);
assertTrue(rs.getString(2).equals("0") && !rs.wasNull());
assertTrue(rs.getShort(1) == 2 && !rs.wasNull());
rs.next();
assertTrue(rs.getRow() == 3);
assertTrue(rs.getShort("ID") == 3 && !rs.wasNull());
assertTrue(rs.getShort("VALUE") == 1 && !rs.wasNull());
rs.next();
assertTrue(rs.getRow() == 4);
assertTrue(rs.getShort("ID") == 4 && !rs.wasNull());
assertTrue(rs.getShort("VALUE") == Short.MAX_VALUE && !rs.wasNull());
rs.next();
assertTrue(rs.getRow() == 5);
assertTrue(rs.getShort("id") == 5 && !rs.wasNull());
assertTrue(rs.getShort("value") == Short.MIN_VALUE && !rs.wasNull());
assertTrue(rs.getString(1).equals("5") && !rs.wasNull());
rs.next();
assertTrue(rs.getRow() == 6);
assertTrue(rs.getShort("id") == 6 && !rs.wasNull());
assertTrue(rs.getShort("value") == 0 && rs.wasNull());
assertTrue(rs.getShort(2) == 0 && rs.wasNull());
assertTrue(rs.getShort(1) == 6 && !rs.wasNull());
assertTrue(rs.getString(1).equals("6") && !rs.wasNull());
assertTrue(rs.getString(2) == null && rs.wasNull());
o = rs.getObject(2);
assertTrue(o == null);
assertTrue(rs.wasNull());
o = rs.getObject(2, Short.class);
assertTrue(o == null);
assertTrue(rs.wasNull());
assertFalse(rs.next());
assertEquals(0, rs.getRow());
stat.execute("DROP TABLE TEST");
stat.setMaxRows(0);
}
private void testBigInt() throws SQLException {
trace("Test SMALLINT");
ResultSet rs;
Object o;
stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY,VALUE BIGINT)");
stat.execute("INSERT INTO TEST VALUES(1,-1)");
stat.execute("INSERT INTO TEST VALUES(2,0)");
stat.execute("INSERT INTO TEST VALUES(3,1)");
stat.execute("INSERT INTO TEST VALUES(4," + Long.MAX_VALUE + ")");
stat.execute("INSERT INTO TEST VALUES(5," + Long.MIN_VALUE + ")");
stat.execute("INSERT INTO TEST VALUES(6,NULL)");
// MySQL compatibility (is this required?)
// rs=stat.executeQuery("SELECT * FROM TEST T ORDER BY ID");
// check(rs.findColumn("T.ID"), 1);
// check(rs.findColumn("T.NAME"), 2);
rs = stat.executeQuery("SELECT *, NULL AS N FROM TEST ORDER BY ID");
// MySQL compatibility
assertEquals(1, rs.findColumn("TEST.ID"));
assertEquals(2, rs.findColumn("TEST.VALUE"));
assertTrue(rs.getRow() == 0);
assertResultSetMeta(rs, 3, new String[] { "ID", "VALUE", "N" },
new int[] { Types.INTEGER, Types.BIGINT,
Types.NULL }, new int[] { 10, 19, 1 }, new int[] { 0, 0, 0 });
rs.next();
assertTrue(rs.getRow() == 1);
assertEquals(2, rs.findColumn("VALUE"));
assertEquals(2, rs.findColumn("value"));
assertEquals(2, rs.findColumn("Value"));
assertEquals(2, rs.findColumn("Value"));
assertEquals(1, rs.findColumn("ID"));
assertEquals(1, rs.findColumn("id"));
assertEquals(1, rs.findColumn("Id"));
assertEquals(1, rs.findColumn("iD"));
assertTrue(rs.getLong(2) == -1 && !rs.wasNull());
assertTrue(rs.getLong("VALUE") == -1 && !rs.wasNull());
assertTrue(rs.getLong("value") == -1 && !rs.wasNull());
assertTrue(rs.getLong("Value") == -1 && !rs.wasNull());
assertTrue(rs.getString("Value").equals("-1") && !rs.wasNull());
o = rs.getObject("value");
trace(o.getClass().getName());
assertTrue(o instanceof Long);
assertTrue(((Long) o).longValue() == -1);
o = rs.getObject("value", Long.class);
trace(o.getClass().getName());
assertTrue(o instanceof Long);
assertTrue(((Long) o).longValue() == -1);
o = rs.getObject("value", BigInteger.class);
trace(o.getClass().getName());
assertTrue(o instanceof BigInteger);
assertTrue(((BigInteger) o).longValue() == -1);
o = rs.getObject(2);
trace(o.getClass().getName());
assertTrue(o instanceof Long);
assertTrue(((Long) o).longValue() == -1);
o = rs.getObject(2, Long.class);
trace(o.getClass().getName());
assertTrue(o instanceof Long);
assertTrue(((Long) o).longValue() == -1);
o = rs.getObject(2, BigInteger.class);
trace(o.getClass().getName());
assertTrue(o instanceof BigInteger);
assertTrue(((BigInteger) o).longValue() == -1);
assertTrue(rs.getBoolean("Value"));
assertTrue(rs.getByte("Value") == (byte) -1);
assertTrue(rs.getShort("Value") == -1);
assertTrue(rs.getInt("Value") == -1);
assertTrue(rs.getFloat("Value") == -1.0);
assertTrue(rs.getDouble("Value") == -1.0);
assertTrue(rs.getString("Value").equals("-1") && !rs.wasNull());
assertTrue(rs.getLong("ID") == 1 && !rs.wasNull());
assertTrue(rs.getLong("id") == 1 && !rs.wasNull());
assertTrue(rs.getLong("Id") == 1 && !rs.wasNull());
assertTrue(rs.getLong(1) == 1 && !rs.wasNull());
rs.next();
assertTrue(rs.getRow() == 2);
assertTrue(rs.getLong(2) == 0 && !rs.wasNull());
assertTrue(!rs.getBoolean(2));
assertTrue(rs.getByte(2) == 0);
assertTrue(rs.getShort(2) == 0);
assertTrue(rs.getInt(2) == 0);
assertTrue(rs.getFloat(2) == 0.0);
assertTrue(rs.getDouble(2) == 0.0);
assertTrue(rs.getString(2).equals("0") && !rs.wasNull());
assertTrue(rs.getLong(1) == 2 && !rs.wasNull());
rs.next();
assertTrue(rs.getRow() == 3);
assertTrue(rs.getLong("ID") == 3 && !rs.wasNull());
assertTrue(rs.getLong("VALUE") == 1 && !rs.wasNull());
rs.next();
assertTrue(rs.getRow() == 4);
assertTrue(rs.getLong("ID") == 4 && !rs.wasNull());
assertTrue(rs.getLong("VALUE") == Long.MAX_VALUE && !rs.wasNull());
rs.next();
assertTrue(rs.getRow() == 5);
assertTrue(rs.getLong("id") == 5 && !rs.wasNull());
assertTrue(rs.getLong("value") == Long.MIN_VALUE && !rs.wasNull());
assertTrue(rs.getString(1).equals("5") && !rs.wasNull());
rs.next();
assertTrue(rs.getRow() == 6);
assertTrue(rs.getLong("id") == 6 && !rs.wasNull());
assertTrue(rs.getLong("value") == 0 && rs.wasNull());
assertTrue(rs.getLong(2) == 0 && rs.wasNull());
assertTrue(rs.getLong(1) == 6 && !rs.wasNull());
assertTrue(rs.getString(1).equals("6") && !rs.wasNull());
assertTrue(rs.getString(2) == null && rs.wasNull());
o = rs.getObject(2);
assertTrue(o == null);
assertTrue(rs.wasNull());
o = rs.getObject(2, Long.class);
assertTrue(o == null);
assertTrue(rs.wasNull());
assertFalse(rs.next());
assertEquals(0, rs.getRow());
stat.execute("DROP TABLE TEST");
stat.setMaxRows(0);
}
private void testVarchar() throws SQLException { private void testVarchar() throws SQLException {
trace("Test VARCHAR"); trace("Test VARCHAR");
ResultSet rs; ResultSet rs;
...@@ -1043,6 +1300,14 @@ public class TestResultSet extends TestBase { ...@@ -1043,6 +1300,14 @@ public class TestResultSet extends TestBase {
assertTrue(((java.sql.Timestamp) o).equals( assertTrue(((java.sql.Timestamp) o).equals(
java.sql.Timestamp.valueOf("2011-11-11 00:00:00.0"))); java.sql.Timestamp.valueOf("2011-11-11 00:00:00.0")));
assertFalse(rs.wasNull()); assertFalse(rs.wasNull());
o = rs.getObject(2, java.util.Date.class);
assertTrue(o.getClass() == java.util.Date.class);
assertEquals(((java.util.Date) o).getTime(),
java.sql.Timestamp.valueOf("2011-11-11 00:00:00.0").getTime());
o = rs.getObject(2, Calendar.class);
assertTrue(o instanceof Calendar);
assertEquals(((Calendar) o).getTime().getTime(),
java.sql.Timestamp.valueOf("2011-11-11 00:00:00.0").getTime());
rs.next(); rs.next();
date = rs.getDate("VALUE"); date = rs.getDate("VALUE");
...@@ -1057,6 +1322,7 @@ public class TestResultSet extends TestBase { ...@@ -1057,6 +1322,7 @@ public class TestResultSet extends TestBase {
assertEquals("02:02:02", time.toString()); assertEquals("02:02:02", time.toString());
assertEquals("2002-02-02 02:02:02.0", ts.toString()); assertEquals("2002-02-02 02:02:02.0", ts.toString());
rs.next(); rs.next();
assertEquals("1800-01-01", rs.getDate("value").toString()); assertEquals("1800-01-01", rs.getDate("value").toString());
if (LocalDateTimeUtils.isJava8DateApiPresent()) { if (LocalDateTimeUtils.isJava8DateApiPresent()) {
assertEquals("1800-01-01", rs.getObject("value", assertEquals("1800-01-01", rs.getObject("value",
...@@ -1073,6 +1339,7 @@ public class TestResultSet extends TestBase { ...@@ -1073,6 +1339,7 @@ public class TestResultSet extends TestBase {
LocalDateTimeUtils.getLocalDateTimeClass()).toString()); LocalDateTimeUtils.getLocalDateTimeClass()).toString());
} }
rs.next(); rs.next();
assertEquals("9999-12-31", rs.getDate("Value").toString()); assertEquals("9999-12-31", rs.getDate("Value").toString());
if (LocalDateTimeUtils.isJava8DateApiPresent()) { if (LocalDateTimeUtils.isJava8DateApiPresent()) {
assertEquals("9999-12-31", rs.getObject("Value", assertEquals("9999-12-31", rs.getObject("Value",
...@@ -1089,6 +1356,7 @@ public class TestResultSet extends TestBase { ...@@ -1089,6 +1356,7 @@ public class TestResultSet extends TestBase {
LocalDateTimeUtils.getLocalDateTimeClass()).toString()); LocalDateTimeUtils.getLocalDateTimeClass()).toString());
} }
rs.next(); rs.next();
assertTrue(rs.getDate("Value") == null && rs.wasNull()); assertTrue(rs.getDate("Value") == null && rs.wasNull());
assertTrue(rs.getTime("vALUe") == null && rs.wasNull()); assertTrue(rs.getTime("vALUe") == null && rs.wasNull());
assertTrue(rs.getTimestamp(2) == null && rs.wasNull()); assertTrue(rs.getTimestamp(2) == null && rs.wasNull());
...@@ -1102,6 +1370,7 @@ public class TestResultSet extends TestBase { ...@@ -1102,6 +1370,7 @@ public class TestResultSet extends TestBase {
"TIME '14:15:16', " + "TIME '14:15:16', " +
"TIMESTAMP '2007-08-09 10:11:12.141516171' TS FROM TEST"); "TIMESTAMP '2007-08-09 10:11:12.141516171' TS FROM TEST");
rs.next(); rs.next();
date = (Date) rs.getObject(1); date = (Date) rs.getObject(1);
time = (Time) rs.getObject(2); time = (Time) rs.getObject(2);
ts = (Timestamp) rs.getObject(3); ts = (Timestamp) rs.getObject(3);
...@@ -1256,12 +1525,14 @@ public class TestResultSet extends TestBase { ...@@ -1256,12 +1525,14 @@ public class TestResultSet extends TestBase {
stat.execute("INSERT INTO TEST VALUES(3,X'00')"); stat.execute("INSERT INTO TEST VALUES(3,X'00')");
stat.execute("INSERT INTO TEST VALUES(4,X'ffffff')"); stat.execute("INSERT INTO TEST VALUES(4,X'ffffff')");
stat.execute("INSERT INTO TEST VALUES(5,X'0bcec1')"); stat.execute("INSERT INTO TEST VALUES(5,X'0bcec1')");
stat.execute("INSERT INTO TEST VALUES(6,NULL)"); stat.execute("INSERT INTO TEST VALUES(6,X'03030303')");
stat.execute("INSERT INTO TEST VALUES(7,NULL)");
rs = stat.executeQuery("SELECT * FROM TEST ORDER BY ID"); rs = stat.executeQuery("SELECT * FROM TEST ORDER BY ID");
assertResultSetMeta(rs, 2, new String[] { "ID", "VALUE" }, assertResultSetMeta(rs, 2, new String[] { "ID", "VALUE" },
new int[] { Types.INTEGER, Types.BLOB }, new int[] { new int[] { Types.INTEGER, Types.BLOB }, new int[] {
10, Integer.MAX_VALUE }, new int[] { 0, 0 }); 10, Integer.MAX_VALUE }, new int[] { 0, 0 });
rs.next(); rs.next();
assertEqualsWithNull(new byte[] { (byte) 0x01, (byte) 0x01, assertEqualsWithNull(new byte[] { (byte) 0x01, (byte) 0x01,
(byte) 0x01, (byte) 0x01 }, (byte) 0x01, (byte) 0x01 },
rs.getBytes(2)); rs.getBytes(2));
...@@ -1271,6 +1542,7 @@ public class TestResultSet extends TestBase { ...@@ -1271,6 +1542,7 @@ public class TestResultSet extends TestBase {
rs.getObject(2, byte[].class)); rs.getObject(2, byte[].class));
assertTrue(!rs.wasNull()); assertTrue(!rs.wasNull());
rs.next(); rs.next();
assertEqualsWithNull(new byte[] { (byte) 0x02, (byte) 0x02, assertEqualsWithNull(new byte[] { (byte) 0x02, (byte) 0x02,
(byte) 0x02, (byte) 0x02 }, (byte) 0x02, (byte) 0x02 },
rs.getBytes("value")); rs.getBytes("value"));
...@@ -1280,19 +1552,34 @@ public class TestResultSet extends TestBase { ...@@ -1280,19 +1552,34 @@ public class TestResultSet extends TestBase {
rs.getObject("value", byte[].class)); rs.getObject("value", byte[].class));
assertTrue(!rs.wasNull()); assertTrue(!rs.wasNull());
rs.next(); rs.next();
assertEqualsWithNull(new byte[] { (byte) 0x00 }, assertEqualsWithNull(new byte[] { (byte) 0x00 },
readAllBytes(rs.getBinaryStream(2))); readAllBytes(rs.getBinaryStream(2)));
assertTrue(!rs.wasNull()); assertTrue(!rs.wasNull());
rs.next(); rs.next();
assertEqualsWithNull(new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff }, assertEqualsWithNull(new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff },
readAllBytes(rs.getBinaryStream("VaLuE"))); readAllBytes(rs.getBinaryStream("VaLuE")));
assertTrue(!rs.wasNull()); assertTrue(!rs.wasNull());
rs.next(); rs.next();
InputStream in = rs.getBinaryStream("value"); InputStream in = rs.getBinaryStream("value");
byte[] b = readAllBytes(in); byte[] b = readAllBytes(in);
assertEqualsWithNull(new byte[] { (byte) 0x0b, (byte) 0xce, (byte) 0xc1 }, b); assertEqualsWithNull(new byte[] { (byte) 0x0b, (byte) 0xce, (byte) 0xc1 }, b);
assertTrue(!rs.wasNull()); assertTrue(!rs.wasNull());
rs.next(); rs.next();
Blob blob = rs.getObject("value", Blob.class);
try {
assertTrue(blob != null);
assertEqualsWithNull(new byte[] { (byte) 0x03, (byte) 0x03,
(byte) 0x03, (byte) 0x03 }, readAllBytes(blob.getBinaryStream()));
assertTrue(!rs.wasNull());
} finally {
blob.free();
}
rs.next();
assertEqualsWithNull(null, readAllBytes(rs.getBinaryStream("VaLuE"))); assertEqualsWithNull(null, readAllBytes(rs.getBinaryStream("VaLuE")));
assertTrue(rs.wasNull()); assertTrue(rs.wasNull());
assertTrue(!rs.next()); assertTrue(!rs.next());
...@@ -1311,8 +1598,9 @@ public class TestResultSet extends TestBase { ...@@ -1311,8 +1598,9 @@ public class TestResultSet extends TestBase {
stat.execute("INSERT INTO TEST VALUES(3,'World!')"); stat.execute("INSERT INTO TEST VALUES(3,'World!')");
stat.execute("INSERT INTO TEST VALUES(4,'Hallo')"); stat.execute("INSERT INTO TEST VALUES(4,'Hallo')");
stat.execute("INSERT INTO TEST VALUES(5,'Welt!')"); stat.execute("INSERT INTO TEST VALUES(5,'Welt!')");
stat.execute("INSERT INTO TEST VALUES(6,NULL)"); stat.execute("INSERT INTO TEST VALUES(6,'Test2')");
stat.execute("INSERT INTO TEST VALUES(7,NULL)"); stat.execute("INSERT INTO TEST VALUES(7,NULL)");
stat.execute("INSERT INTO TEST VALUES(8,NULL)");
rs = stat.executeQuery("SELECT * FROM TEST ORDER BY ID"); rs = stat.executeQuery("SELECT * FROM TEST ORDER BY ID");
assertResultSetMeta(rs, 2, new String[] { "ID", "VALUE" }, assertResultSetMeta(rs, 2, new String[] { "ID", "VALUE" },
new int[] { Types.INTEGER, Types.CLOB }, new int[] { new int[] { Types.INTEGER, Types.CLOB }, new int[] {
...@@ -1345,19 +1633,34 @@ public class TestResultSet extends TestBase { ...@@ -1345,19 +1633,34 @@ public class TestResultSet extends TestBase {
trace(string); trace(string);
assertTrue(string != null && string.equals("World!")); assertTrue(string != null && string.equals("World!"));
rs.next(); rs.next();
string = readString(rs.getCharacterStream(2)); string = readString(rs.getCharacterStream(2));
assertTrue(!rs.wasNull()); assertTrue(!rs.wasNull());
trace(string); trace(string);
assertTrue(string != null && string.equals("Hallo")); assertTrue(string != null && string.equals("Hallo"));
rs.next(); rs.next();
string = readString(rs.getCharacterStream("value")); string = readString(rs.getCharacterStream("value"));
assertTrue(!rs.wasNull()); assertTrue(!rs.wasNull());
trace(string); trace(string);
assertTrue(string != null && string.equals("Welt!")); assertTrue(string != null && string.equals("Welt!"));
rs.next(); rs.next();
Clob clob = rs.getObject("value", Clob.class);
try {
assertTrue(clob != null);
string = readString(clob.getCharacterStream());
assertTrue(string != null && string.equals("Test2"));
assertTrue(!rs.wasNull());
} finally {
clob.free();
}
rs.next();
assertTrue(rs.getCharacterStream(2) == null); assertTrue(rs.getCharacterStream(2) == null);
assertTrue(rs.wasNull()); assertTrue(rs.wasNull());
rs.next(); rs.next();
assertTrue(rs.getAsciiStream("Value") == null); assertTrue(rs.getAsciiStream("Value") == null);
assertTrue(rs.wasNull()); assertTrue(rs.wasNull());
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论