整数类型
tinyint
- 示例:假设
is_active
为tinyint(1)
用于表示布尔值。boolean is_active = rs.getboolean("is_active");
- 或者作为字节值:
byte value = rs.getbyte("column_name");
- 示例:假设
smallint
- 示例:
short small_value = rs.getshort("small_value");
- 示例:
int, integer
- 示例:
int int_value = rs.getint("int_value");
- 示例:
bigint
- 示例:
long big_value = rs.getlong("big_value");
- 示例:
浮点和固定点数字
float
- 示例:
float float_value = rs.getfloat("float_value");
- 示例:
double, double precision
- 示例:
double double_value = rs.getdouble("double_value");
- 示例:
decimal, numeric
- 示例:保持高精度计算:
bigdecimal decimal_value = rs.getbigdecimal("decimal_value");
- 示例:保持高精度计算:
字符串
char, varchar
- 示例:
string string_value = rs.getstring("string_value");
- 示例:
text, tinytext, mediumtext, longtext
- 示例:
string large_text = rs.getstring("large_text");
- 示例:
日期和时间
date
- 示例:使用java 8的
localdate
:localdate date = rs.getobject("date_column", localdate.class);
- 示例:使用java 8的
time
- 示例:使用java 8的
localtime
:localtime time = rs.getobject("time_column", localtime.class);
- 示例:使用java 8的
datetime, timestamp
- 示例:使用java 8的
localdatetime
:localdatetime datetime = rs.getobject("datetime_column", localdatetime.class);
- 示例:使用java 8的
二进制数据
- blob, tinyblob, mediumblob, longblob
- 示例:获取为字节数组:
byte[] blob_data = rs.getbytes("blob_column");
- 或者使用
inputstream
:inputstream blob_stream = rs.getbinarystream("blob_column");
- 示例:获取为字节数组:
其他类型
bit
- 示例:对于单个位值:
boolean bit_value = rs.getboolean("bit_column");
- 对于多个位:
byte[] bits = rs.getbytes("bits_column");
- 示例:对于单个位值:
enum
- 示例:通常映射为字符串:
string enum_value = rs.getstring("enum_column");
- 示例:通常映射为字符串:
set
- 示例:同样映射为字符串,然后解析:
string set_values = rs.getstring("set_column");
- 示例:同样映射为字符串,然后解析:
处理null值
在从数据库读取可能包含null
值的数据时,应该特别小心。例如:
integer nullable_int = rs.wasnull() ? null : rs.getint("nullable_int_column");
这确保了当数据库中的值为null
时,java对象也会被设置为null
,而不是默认值。
注意事项
- 时区问题:处理
timestamp
或datetime
类型时,注意时区的影响。可以考虑使用zoneddatetime
来处理不同地区的时区差异。 - 精度丢失:对于需要精确计算的情况(如货币),避免使用浮点类型,而是使用
bigdecimal
。 - 性能优化:当处理大量数据时,适当选择流式处理或其他优化手段以提高效率。例如,使用批量更新或批处理插入操作来减少数据库交互次数。