Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java类型映射到Java SQL类型Util_Java_Sql_Hibernate_Jdbc_Jdbctemplate - Fatal编程技术网

Java类型映射到Java SQL类型Util

Java类型映射到Java SQL类型Util,java,sql,hibernate,jdbc,jdbctemplate,Java,Sql,Hibernate,Jdbc,Jdbctemplate,我正在使用java.sql.Connection.createArrayOf()方法为我的sql查询创建一个数组参数 例如: Long[] arrayOfLongs = {1L, 2L, 3L}; 需要调用conn.createArrayOf(“bigint”,arrayOfLongs) 当 我需要打电话 conn.createArrayOf("varchar", arrayOfStrings); 等等 我的问题是:是否有一个实用程序类将Java类型映射到SQL类型(作为字符串而不是作为in

我正在使用
java.sql.Connection.createArrayOf()
方法为我的sql查询创建一个数组参数

例如:

Long[] arrayOfLongs = {1L, 2L, 3L};
需要调用
conn.createArrayOf(“bigint”,arrayOfLongs)

我需要打电话

conn.createArrayOf("varchar", arrayOfStrings);
等等


我的问题是:是否有一个实用程序类将Java类型映射到SQL类型(作为字符串而不是作为int的Java.SQL.Types)?非常感谢

据我所知,直接映射(Java类型=>SQL类型)是不可能的,因为单个Java类型可以匹配许多SQL类型。您可以使用确认。例如,
字符串可以映射到
CHAR
VARCHAR
LONGVARCHAR
NCHAR
NVARCHAR
LONGNVARCHAR

基本上,您必须将Java类型映射到数据库表描述中使用的数据类型

更新:

所有JDBC数据库驱动程序都必须实现setter,它似乎是SQL数据类型的一种猜测功能。不幸的是,似乎不可能重用此函数来实现您想要的功能,但是通过查看源代码,您可以很好地了解它实际上在做什么

下面是MySQL猜测数据类型的示例:

public void setObject(int parameterIndex, Object  parameterObj)
     throws SQLException  {
     if (parameterObj == null) {
         setNull(parameterIndex, java.sql.Types.OTHER);
     } else {
         if (parameterObj instanceof Byte ) {
             setInt(parameterIndex, ((Byte ) parameterObj).intValue());
         } else if (parameterObj instanceof String ) {
             setString(parameterIndex, (String ) parameterObj);
         } else if (parameterObj instanceof BigDecimal ) {
             setBigDecimal(parameterIndex, (BigDecimal ) parameterObj);
         } else if (parameterObj instanceof Short ) {
             setShort(parameterIndex, ((Short ) parameterObj).shortValue());
         } else if (parameterObj instanceof Integer ) {
             setInt(parameterIndex, ((Integer ) parameterObj).intValue());
         } else if (parameterObj instanceof Long ) {
             setLong(parameterIndex, ((Long ) parameterObj).longValue());
         } else if (parameterObj instanceof Float ) {
             setFloat(parameterIndex, ((Float ) parameterObj).floatValue());
         } else if (parameterObj instanceof Double ) {
             setDouble(parameterIndex, ((Double ) parameterObj).doubleValue());
         } else if (parameterObj instanceof byte[]) {
             setBytes(parameterIndex, (byte[]) parameterObj);
         } else if (parameterObj instanceof java.sql.Date ) {
             setDate(parameterIndex, (java.sql.Date ) parameterObj);
         } else if (parameterObj instanceof Time ) {
             setTime(parameterIndex, (Time ) parameterObj);
         } else if (parameterObj instanceof Timestamp ) {
             setTimestamp(parameterIndex, (Timestamp ) parameterObj);
         } else if (parameterObj instanceof Boolean ) {
             setBoolean(parameterIndex,
                 ((Boolean ) parameterObj).booleanValue());
         } else if (parameterObj instanceof InputStream ) {
             setBinaryStream(parameterIndex, (InputStream ) parameterObj, -1);
         } else if (parameterObj instanceof java.sql.Blob ) {
             setBlob(parameterIndex, (java.sql.Blob ) parameterObj);
         } else if (parameterObj instanceof java.sql.Clob ) {
             setClob(parameterIndex, (java.sql.Clob ) parameterObj);
         } else {
             setSerializableObject(parameterIndex, parameterObj);
         }
     }
 }

是的,但是如果你考虑JDCDCAMPLE为例:<代码> INSERT .Update(“插入到人(FixNeNT,LASTEND)值(?))”,“新对象[]”“MyNeMe”,“MyLaStNeNe}”;<代码>JdbcTemplate如何知道Java.lang.String“MyName”映射到VARCHAR?看起来JdbcTemplate是数据类型。。。有时,它会让人感到惊讶。
public void setObject(int parameterIndex, Object  parameterObj)
     throws SQLException  {
     if (parameterObj == null) {
         setNull(parameterIndex, java.sql.Types.OTHER);
     } else {
         if (parameterObj instanceof Byte ) {
             setInt(parameterIndex, ((Byte ) parameterObj).intValue());
         } else if (parameterObj instanceof String ) {
             setString(parameterIndex, (String ) parameterObj);
         } else if (parameterObj instanceof BigDecimal ) {
             setBigDecimal(parameterIndex, (BigDecimal ) parameterObj);
         } else if (parameterObj instanceof Short ) {
             setShort(parameterIndex, ((Short ) parameterObj).shortValue());
         } else if (parameterObj instanceof Integer ) {
             setInt(parameterIndex, ((Integer ) parameterObj).intValue());
         } else if (parameterObj instanceof Long ) {
             setLong(parameterIndex, ((Long ) parameterObj).longValue());
         } else if (parameterObj instanceof Float ) {
             setFloat(parameterIndex, ((Float ) parameterObj).floatValue());
         } else if (parameterObj instanceof Double ) {
             setDouble(parameterIndex, ((Double ) parameterObj).doubleValue());
         } else if (parameterObj instanceof byte[]) {
             setBytes(parameterIndex, (byte[]) parameterObj);
         } else if (parameterObj instanceof java.sql.Date ) {
             setDate(parameterIndex, (java.sql.Date ) parameterObj);
         } else if (parameterObj instanceof Time ) {
             setTime(parameterIndex, (Time ) parameterObj);
         } else if (parameterObj instanceof Timestamp ) {
             setTimestamp(parameterIndex, (Timestamp ) parameterObj);
         } else if (parameterObj instanceof Boolean ) {
             setBoolean(parameterIndex,
                 ((Boolean ) parameterObj).booleanValue());
         } else if (parameterObj instanceof InputStream ) {
             setBinaryStream(parameterIndex, (InputStream ) parameterObj, -1);
         } else if (parameterObj instanceof java.sql.Blob ) {
             setBlob(parameterIndex, (java.sql.Blob ) parameterObj);
         } else if (parameterObj instanceof java.sql.Clob ) {
             setClob(parameterIndex, (java.sql.Clob ) parameterObj);
         } else {
             setSerializableObject(parameterIndex, parameterObj);
         }
     }
 }