读书人

兑现通用的PreparedStatement插入记录

发布时间: 2013-03-17 13:48:32 作者: rapoo

实现通用的PreparedStatement插入记录的方法

准确的说是实现通用的PreparedStatement通配符对应的赋值方法。在合成PreparedStatement插入语句、找到SQL字段类型与Java类的对应关系之后,就可以实现通用的PreparedStatement插入数据的方法了。

在实现通用的PreparedStatement插入记录的方法过程中,JadePool已经解决好了以下的现实需求:

1、支持不同的数据类型的表单录入,除了流文件类型外,其它任何类型的数据均可以用字符串的形式表达;
2、支持图片、多媒体等所有流文件的录入;
3、支持主键键值的自动生成;
4、支持空值录入;
5、针对不同的数据录入,如有异常,则统一抛出SQLException异常;

6、拆分条件语句,更精准地表达逻辑,优先安排高频度数据类型进行条件判断;

7、提供了灵活方便的日期型数据的录入。


以下是实现PreparedStatement通配符对应的赋值方法的核心代码

                            //以下列出所有的PreparedStatement支持的数据类型,大约28个数据类型,近50个方法                                                        java.util.Calendar calendar = new GregorianCalendar(2013, 3 - 1, 13);                            Object value = new Object();                            int index = 1;                            int int_sqlType = java.sql.Types.INTEGER;//4                            int int_scaleOrLength = 4;                            int bytes_size = 256;                            int int_length = 10;                            long long_length = 10l;                            String str_sqlTypeName = "LONG";                            pstmt.setArray(index, (java.sql.Array) value);                            pstmt.setAsciiStream(index, (java.io.InputStream) value);                            pstmt.setAsciiStream(index, (java.io.InputStream) value, int_length);                            pstmt.setAsciiStream(index, (java.io.InputStream) value, long_length);                            pstmt.setBigDecimal(index, (java.math.BigDecimal) value);                            pstmt.setBinaryStream(index, (java.io.InputStream) value);                            pstmt.setBinaryStream(index, (java.io.InputStream) value, int_length);                            pstmt.setBinaryStream(index, (java.io.InputStream) value, long_length);                            pstmt.setBlob(index, (java.sql.Blob) value);                            pstmt.setBlob(index, (java.io.InputStream) value);                            pstmt.setBlob(index, (java.io.InputStream) value, long_length);                            pstmt.setBoolean(index, (Boolean) value);                            pstmt.setByte(index, (byte) 30);                            pstmt.setBytes(index, (byte[]) value);                            pstmt.setCharacterStream(index, (java.io.Reader) value);                            pstmt.setCharacterStream(index, (java.io.Reader) value, int_length);                            pstmt.setCharacterStream(index, (java.io.Reader) value, long_length);                            pstmt.setClob(index, (java.sql.Clob) value);                            pstmt.setClob(index, (java.io.Reader) value);                            pstmt.setClob(index, (java.io.Reader) value, long_length);                            pstmt.setDate(index, (java.sql.Date) value);                            pstmt.setDate(index, (java.sql.Date) value, calendar);                            pstmt.setDouble(index, (java.lang.Double) value);                            pstmt.setFloat(index, (java.lang.Float) value);                            pstmt.setInt(index, (java.lang.Integer) value);                            pstmt.setLong(index, (java.lang.Long) value);                            pstmt.setNCharacterStream(index, (java.io.Reader) value);                            pstmt.setNCharacterStream(index, (java.io.Reader) value, 123l);                            pstmt.setNClob(index, (java.sql.NClob) value);                            pstmt.setNClob(index, (java.io.Reader) value);                            pstmt.setNClob(index, (java.io.Reader) value, 123l);                            pstmt.setNString(index, (String) value);                            pstmt.setNull(index, int_sqlType);                            pstmt.setNull(index, int_sqlType, str_sqlTypeName);                            pstmt.setObject(index, value);                            pstmt.setObject(index, value, int_sqlType);                            pstmt.setObject(index, value, int_sqlType, int_scaleOrLength);                            pstmt.setRef(index, (java.sql.Ref) value);                            pstmt.setRowId(index, (java.sql.RowId) value);                            pstmt.setSQLXML(index, (java.sql.SQLXML) value);                            pstmt.setShort(index, (java.lang.Short) value);                            pstmt.setString(index, (java.lang.String) value);                            pstmt.setTime(index, (java.sql.Time) value);                            pstmt.setTimestamp(index, (java.sql.Timestamp) value);                            pstmt.setTimestamp(index, (java.sql.Timestamp) value, calendar);                            pstmt.setURL(index, (java.net.URL) value);                            pstmt.setUnicodeStream(index, (java.io.InputStream) value, int_length);

今后的建议
对于未实现的赋值方法,在需要的时候,可以既有的代码的条件部分加以实现;
对于未来未知的数据库供应商定义的Java类,如:com.sybase.jdbc2.tds.SybTimestamp,可以参照核心代码的相应部分实现







读书人网 >其他数据库

热点推荐