数据类型之间的转换

最后更新:2023-11-15 05:30:19 | 状态:未完成
在生成SQL的过程中,如果没有占位符,数字类型一般可以直接拼接,String类型需要加单引号,
而日期类型有些数据库可以实现隐式转换,加单引号即可,有些数据库不能实现,需要内置函数转换成日期类型
还有些更复杂的类型类byte,json,array,geometry等类型更需要内置函数

如果有占位符的也需要把占位值转换成相应的数据类型

1.完整的转换可以调用DriverAdapter的write方法实现

/**
* 通过占位符写入数据库前转换成数据库可接受的Java数据类型<br/>
* @param runtime 运行环境主要包含驱动适配器 数据源或客户端
* @param metadata Column 用来定位数据类型
* @param placeholder 是否占位符
* @param value value
* @return Object
*/
Object write(DataRuntime runtime, Column metadata, Object value, boolean placeholder);
如日期类型 
有占位符时会根据不同的数据库返回相应的Date类型
没有占位符时会根据不同的数据库调用相应的日期转换函数 to_date('2020-01-01', 'yyyy-mm-dd') 或to_timestamp()

Point类型
有占位符时会根据不同的数据库返回相应的Point类型也有可能是byte[]类型
没有占位符时会根据不同的数据库调用相应的几何图形Poin(1, 2)

以上方法中的adapter和runtime,因为与数据库类型以及数据库连接相关,一般在是系统启动后才能获取到准确的adapter和runtime

2.如果可以确定数据类型的可以直接调用相应的Writer
如org.anyline.data.jdbc.oracle.OracleWriter.DateWriter.write(Object value, boolean placeholder);

3.如果要求不是很严格,比如只生成SQL,不需要实际执行
ColumnType.write(Object value, Object def, boolean placeholder);

4.如果只是数据类型转换
ConvertAdapter.convert(Object value, Class writeClass, boolean isArray);

5.在创建表的过程中需要获取相应数据库中的数据类型,
如int类型在有些数据库中用int4,int8,integer
可以调用相应DriverAdapter.type(String type);返回当前数据库需要的类型
最近更新 搜索 提交