您好,我正在尝试使用 spring jbdc 执行 QueryForInt。查询返回一个简单的计数。执行时我得到 springframework.jdbc.UncategorizedSQLException:java.sql.SQLException: 无效的列类型。我确实找到了类似的帖子并尝试了建议,但我仍然陷入困境:(...任何帮助表示赞赏。
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue(DAOConstants.PROD_ID, custVo.getProdId(),OracleTypes.NUMBER);
params.addValue(DAOConstants.REQ_IND, DAOConstants.FLAG_Y,OracleTypes.VARCHAR);
Run Code Online (Sandbox Code Playgroud)
查询:
select count(1) from prod where prod_id = :PROD_ID and req_ind =:REQ_IND
Run Code Online (Sandbox Code Playgroud)
表定义
Name Null Type
----------------- -------- ------------
PROD_ID NOT NULL NUMBER(5)
REQ_IND VARCHAR2(10)
Run Code Online (Sandbox Code Playgroud)
日志..
Caused by: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback;
uncategorized SQLException for SQL [select count(1) from prod where prod_id = :PROD_ID and req_ind = :REQ_IND ]; SQL state [99999]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type
at …Run Code Online (Sandbox Code Playgroud) 我是 postgres 的新手,但我试图在 Postgres 11 中调用一个过程(新的“过程”而不是“函数”),从 java 作为 spring SimpleJDBCCall 调用(使用 Postgresql-42.2.5 jdbc 驱动程序)。但是,当我执行该过程时,遇到以下异常:
org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; 错误的 SQL 语法 [{call pa_test_schema.pr_dosomething(?)}]; 嵌套异常是 org.postgresql.util.PSQLException:错误:pa_test_schema.pr_dosomething(bigint) 是一个过程提示:要调用一个过程,请使用 CALL。位置:15 在 org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101) 在 org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) 在 org.springframework.jdbc AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) 在 org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:
我的程序代码:
CREATE PROCEDURE pa_test_schema.pr_DoSomething
( P_input_ID IN inputs.input_ID%TYPE
) AS $$
BEGIN
-- do something
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
我的Java代码:
SimpleJdbcCallOperations pr_DoSomething = new SimpleJdbcCall(jdbcTemplate)
.withSchemaName("pa_test_schema")
.withProcedureName("pr_DoSomething");
Map<String, Object> inputs = Maps.newHashMap();
inputs.put("p_input_id", 123456);
pr_DoSomething.execute(inputs);
Run Code Online (Sandbox Code Playgroud)
当我逐步执行代码时,我可以看到驱动程序正在将可调用语句的 sql 修改为调用 postgres 函数所需的语法:
select * from pa_test_schema.pr_dosomething(?) 作为结果
这是执行此转换的驱动程序中的方法: …
我正在尝试更新表 A 中的一行并在表 B 中插入一行。这需要在单次调用中发生。我正在使用 spring JDBC 来实现这一点。
示例代码
@Transactional
public boolean approveTenant(ApproveTenantRequest approveTenantRequest) throws ApplicationException {
LogUtil.debug(logger, "UserManagementDAO - approveTenant - Start");
try {
String updateSQL = "UPDATE tenant_master SET isactive=1, last_modified_by=:lastModifiedBy, last_modified_at= now() "
+ " WHERE tenant_id=:tenantid and tenant_community_id=:cmntId";
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("cmntId", approveTenantRequest.getCommunityId());
parameters.addValue("tenantid", Integer.parseInt(approveTenantRequest.getTenantId()));
parameters.addValue("lastModifiedBy", approveTenantRequest.getApprovedBy());
int updateEffectedRows = jdbcTemplate.update(updateSQL, parameters);
if(updateEffectedRows==1) {
String insertSql= "INSERT INTO users (username,password,isactive,community_id,userrole,created_by)" +
" values (:username,:password,1,:community_id,:userrole,:created_by)";
parameters.addValue("username", approveTenantRequest.getEmailId());
parameters.addValue("password", approveTenantRequest.getEmailId());
parameters.addValue("community_id", approveTenantRequest.getCommunityId());
parameters.addValue("userrole", "RESIDENT");
parameters.addValue("created_by", approveTenantRequest.getApprovedBy()); …Run Code Online (Sandbox Code Playgroud) 我开始用springboot开发,卡了2天了。当我启动我的应用程序时,我得到了这条线。
2020-07-08 11:54:46.377 WARN 33224 --- [ task-1] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata : Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, jbdc:mysql://localhost:3306/decormoi
I understand, there is a problem with my url which refers to my database, but which one?
PLEASE someone to help me?
我正在为我的应用程序使用 Spring Boot。使用 jdbctemplate 运行 MySQL 查询。
query = "Select * from users";
List<Map<String, Object>> response = jdbcTemplate.queryForList(query);
Run Code Online (Sandbox Code Playgroud)
电流输出:
[
{
"id": 1,
"firstname": "Sam",
"address": "US"
},
{
"id": 2,
"firstname": "Alex",
"address": "US"
}
]
Run Code Online (Sandbox Code Playgroud)
我想使用 jdbctemplate 返回如下输出。jdbctemplate 中是否有任何方法可以返回如下输出?
预期输出:
[
[
"id"
"firstname"
"address"
],
[
1,
"Sam",
"US"
],
[
2,
"Alex",
"US"
]
]
Run Code Online (Sandbox Code Playgroud) 我正在尝试将 Oracle SQL 数据导入 Java JBDC。
Number(38)Oracle 中的 Java 转换数据类型是什么?是BigInteger还是Long?
create table Customers
(
Customer_id NUMBER(38)
Run Code Online (Sandbox Code Playgroud) 我使用spring有多个数据源(适应多个mysql dbs)和使用tomcat dbcp.我得到一些奇怪的例外,比如
我觉得可能是这个问题,需要大家的投入:
我jdbcTemplate在我的spring.xml每个查询中定义了一个对象,我需要触发,我调用jdbcTemplate.setDataSource()设置适当的数据源然后simplejdbccall(jdbctemplate)用来执行proc.
我是否应该同时定义多个jdbcTemplate对象,即每个定义的数据源一个.我在其上设置数据源jdbctemplate并执行存储过程的bean 被定义为prototype.
假设我想在10个不同的表中插入记录,这应该是原子的,所有插入应该在所有表中发生或者没有.如何在spring jdbc模板中维护这个transcation?
我正在使用NamedParameterJdbcTemplate运行pl/sql脚本.但我不知道如何获得out变量的值(:id_out).提前致谢.
String script = "declare
begin
if myFunc(:id_in) is null then
:id_out := 0;
else
:id_out := 1;
end if;
end;";
Map<String,Object> bindVars = new HashMap<String, Object>();
bindVars.put(id_in,1);
bindVars.put(id_out,2);
jdbcTmpl.execute(script, bindVars, new PreparedStatementCallback<Object>() {
@Override public Object doInPreparedStatement(PreparedStatement cs)
throws SQLException, DataAccessException {
cs.execute();
return null;
}
}
);
Run Code Online (Sandbox Code Playgroud) 我一直在为我的春季项目编码。这是我的配置:-main类
@SpringBootApplication(
scanBasePackages ={"src.tl_client"}
)
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
private static SpringApplicationBuilder configureApplication(SpringApplicationBuilder builder) {
return builder.sources(Application.class).bannerMode(Banner.Mode.OFF);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
POM文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>src.tl_client</groupId>
<artifactId>src.tl_client</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<name>src.tl_client</name>
<description>Project for TE TECHLONG client side.</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<start-class>src.tl_client.Application</start-class>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies> …Run Code Online (Sandbox Code Playgroud) spring-jdbc ×10
java ×7
spring ×4
jdbc ×3
spring-boot ×3
jdbctemplate ×2
jakarta-ee ×1
mysql ×1
oracle ×1
plsql ×1
sql ×1
transactions ×1