Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
cddcf363
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
cddcf363
编写于
4月 16, 2015
作者:
J
Juergen Hoeller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Polishing
上级
050e581c
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
33 addition
and
40 deletion
+33
-40
spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataProviderFactory.java
...ework/jdbc/core/metadata/CallMetaDataProviderFactory.java
+10
-9
spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java
...work/jdbc/core/metadata/GenericTableMetaDataProvider.java
+9
-19
spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataContext.java
...ingframework/jdbc/core/metadata/TableMetaDataContext.java
+11
-10
spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataProviderFactory.java
...work/jdbc/core/metadata/TableMetaDataProviderFactory.java
+3
-2
未找到文件。
spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataProviderFactory.java
浏览文件 @
cddcf363
/*
* Copyright 2002-201
2
the original author or authors.
* Copyright 2002-201
5
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -31,16 +31,14 @@ import org.springframework.jdbc.support.JdbcUtils;
import
org.springframework.jdbc.support.MetaDataAccessException
;
/**
* Factory used to create a {@link CallMetaDataProvider} implementation based on the type of databse being used.
* Factory used to create a {@link CallMetaDataProvider} implementation
* based on the type of databse being used.
*
* @author Thomas Risberg
* @since 2.5
*/
public
class
CallMetaDataProviderFactory
{
/** Logger */
private
static
final
Log
logger
=
LogFactory
.
getLog
(
CallMetaDataProviderFactory
.
class
);
/** List of supported database products for procedure calls */
public
static
final
List
<
String
>
supportedDatabaseProductsForProcedures
=
Arrays
.
asList
(
"Apache Derby"
,
...
...
@@ -51,6 +49,7 @@ public class CallMetaDataProviderFactory {
"PostgreSQL"
,
"Sybase"
);
/** List of supported database products for function calls */
public
static
final
List
<
String
>
supportedDatabaseProductsForFunctions
=
Arrays
.
asList
(
"MySQL"
,
...
...
@@ -59,6 +58,9 @@ public class CallMetaDataProviderFactory {
"PostgreSQL"
);
private
static
final
Log
logger
=
LogFactory
.
getLog
(
CallMetaDataProviderFactory
.
class
);
/**
* Create a CallMetaDataProvider based on the database metadata
* @param dataSource used to retrieve metadata
...
...
@@ -124,17 +126,16 @@ public class CallMetaDataProviderFactory {
}
provider
.
initializeWithMetaData
(
databaseMetaData
);
if
(
accessProcedureColumnMetaData
)
{
provider
.
initializeWithProcedureColumnMetaData
(
databaseMetaData
,
context
.
getCatalogName
(),
context
.
getSchemaName
(),
context
.
getProcedureName
());
provider
.
initializeWithProcedureColumnMetaData
(
databaseMetaData
,
context
.
getCatalogName
(),
context
.
getSchemaName
(),
context
.
getProcedureName
());
}
return
provider
;
}
});
}
catch
(
MetaDataAccessException
ex
)
{
throw
new
DataAccessResourceFailureException
(
"Error retr
ei
ving database metadata"
,
ex
);
throw
new
DataAccessResourceFailureException
(
"Error retr
ie
ving database metadata"
,
ex
);
}
}
}
spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java
浏览文件 @
cddcf363
/*
* Copyright 2002-201
4
the original author or authors.
* Copyright 2002-201
5
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -70,7 +70,7 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider {
Arrays
.
asList
(
"Apache Derby"
,
"HSQL Database Engine"
);
/** Collection of TableParameterMetaData objects */
private
List
<
TableParameterMetaData
>
insert
ParameterMetaData
=
new
ArrayList
<
TableParameterMetaData
>();
private
List
<
TableParameterMetaData
>
table
ParameterMetaData
=
new
ArrayList
<
TableParameterMetaData
>();
/** NativeJdbcExtractor that can be used to retrieve the native connection */
private
NativeJdbcExtractor
nativeJdbcExtractor
;
...
...
@@ -109,7 +109,7 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider {
@Override
public
List
<
TableParameterMetaData
>
getTableParameterMetaData
()
{
return
this
.
insert
ParameterMetaData
;
return
this
.
table
ParameterMetaData
;
}
@Override
...
...
@@ -376,17 +376,14 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider {
}
try
{
tableColumns
=
databaseMetaData
.
getColumns
(
metaDataCatalogName
,
metaDataSchemaName
,
metaDataTableName
,
null
);
metaDataCatalogName
,
metaDataSchemaName
,
metaDataTableName
,
null
);
while
(
tableColumns
.
next
())
{
String
columnName
=
tableColumns
.
getString
(
"COLUMN_NAME"
);
int
dataType
=
tableColumns
.
getInt
(
"DATA_TYPE"
);
if
(
dataType
==
Types
.
DECIMAL
)
{
String
typeName
=
tableColumns
.
getString
(
"TYPE_NAME"
);
int
decimalDigits
=
tableColumns
.
getInt
(
"DECIMAL_DIGITS"
);
//
o
verride a DECIMAL data type for no-decimal numerics
//
O
verride a DECIMAL data type for no-decimal numerics
// (this is for better Oracle support where there have been issues
// using DECIMAL for certain inserts (see SPR-6912))
if
(
"NUMBER"
.
equals
(
typeName
)
&&
decimalDigits
==
0
)
{
...
...
@@ -400,18 +397,11 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider {
}
}
boolean
nullable
=
tableColumns
.
getBoolean
(
"NULLABLE"
);
TableParameterMetaData
meta
=
new
TableParameterMetaData
(
columnName
,
dataType
,
nullable
);
this
.
insertParameterMetaData
.
add
(
meta
);
TableParameterMetaData
meta
=
new
TableParameterMetaData
(
columnName
,
dataType
,
nullable
);
this
.
tableParameterMetaData
.
add
(
meta
);
if
(
logger
.
isDebugEnabled
())
{
logger
.
debug
(
"Retrieved metadata: "
+
meta
.
getParameterName
()
+
" "
+
meta
.
getSqlType
()
+
" "
+
meta
.
isNullable
()
);
logger
.
debug
(
"Retrieved metadata: "
+
meta
.
getParameterName
()
+
" "
+
meta
.
getSqlType
()
+
" "
+
meta
.
isNullable
());
}
}
}
...
...
spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataContext.java
浏览文件 @
cddcf363
/*
* Copyright 2002-201
4
the original author or authors.
* Copyright 2002-201
5
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -202,7 +202,8 @@ public class TableMetaDataContext {
* @param generatedKeyNames name of generated keys
*/
public
void
processMetaData
(
DataSource
dataSource
,
List
<
String
>
declaredColumns
,
String
[]
generatedKeyNames
)
{
this
.
metaDataProvider
=
TableMetaDataProviderFactory
.
createMetaDataProvider
(
dataSource
,
this
,
this
.
nativeJdbcExtractor
);
this
.
metaDataProvider
=
TableMetaDataProviderFactory
.
createMetaDataProvider
(
dataSource
,
this
,
this
.
nativeJdbcExtractor
);
this
.
tableColumns
=
reconcileColumnsToUse
(
declaredColumns
,
generatedKeyNames
);
}
...
...
@@ -299,14 +300,14 @@ public class TableMetaDataContext {
}
StringBuilder
insertStatement
=
new
StringBuilder
();
insertStatement
.
append
(
"INSERT INTO "
);
if
(
this
.
getSchemaName
()
!=
null
)
{
insertStatement
.
append
(
this
.
getSchemaName
());
if
(
getSchemaName
()
!=
null
)
{
insertStatement
.
append
(
getSchemaName
());
insertStatement
.
append
(
"."
);
}
insertStatement
.
append
(
this
.
getTableName
());
insertStatement
.
append
(
getTableName
());
insertStatement
.
append
(
" ("
);
int
columnCount
=
0
;
for
(
String
columnName
:
this
.
getTableColumns
())
{
for
(
String
columnName
:
getTableColumns
())
{
if
(!
keys
.
contains
(
columnName
.
toUpperCase
()))
{
columnCount
++;
if
(
columnCount
>
1
)
{
...
...
@@ -319,11 +320,11 @@ public class TableMetaDataContext {
if
(
columnCount
<
1
)
{
if
(
this
.
generatedKeyColumnsUsed
)
{
logger
.
info
(
"Unable to locate non-key columns for table '"
+
this
.
getTableName
()
+
"' so an empty insert statement is generated"
);
getTableName
()
+
"' so an empty insert statement is generated"
);
}
else
{
throw
new
InvalidDataAccessApiUsageException
(
"Unable to locate columns for table '"
+
this
.
getTableName
()
+
"' so an insert statement can't be generated"
);
getTableName
()
+
"' so an insert statement can't be generated"
);
}
}
for
(
int
i
=
0
;
i
<
columnCount
;
i
++)
{
...
...
@@ -341,7 +342,7 @@ public class TableMetaDataContext {
* @return the array of types to be used
*/
public
int
[]
createInsertTypes
()
{
int
[]
types
=
new
int
[
this
.
getTableColumns
().
size
()];
int
[]
types
=
new
int
[
getTableColumns
().
size
()];
List
<
TableParameterMetaData
>
parameters
=
this
.
metaDataProvider
.
getTableParameterMetaData
();
Map
<
String
,
TableParameterMetaData
>
parameterMap
=
new
LinkedHashMap
<
String
,
TableParameterMetaData
>(
parameters
.
size
());
...
...
@@ -349,7 +350,7 @@ public class TableMetaDataContext {
parameterMap
.
put
(
tpmd
.
getParameterName
().
toUpperCase
(),
tpmd
);
}
int
typeIndx
=
0
;
for
(
String
column
:
this
.
getTableColumns
())
{
for
(
String
column
:
getTableColumns
())
{
if
(
column
==
null
)
{
types
[
typeIndx
]
=
SqlTypeValue
.
TYPE_UNKNOWN
;
}
...
...
spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataProviderFactory.java
浏览文件 @
cddcf363
/*
* Copyright 2002-201
2
the original author or authors.
* Copyright 2002-201
5
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -30,7 +30,8 @@ import org.springframework.jdbc.support.MetaDataAccessException;
import
org.springframework.jdbc.support.nativejdbc.NativeJdbcExtractor
;
/**
* Factory used to create a {@link TableMetaDataProvider} implementation based on the type of databse being used.
* Factory used to create a {@link TableMetaDataProvider} implementation
* based on the type of databse being used.
*
* @author Thomas Risberg
* @since 2.5
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录