标签: spring-jdbc

springframework.jdbc.UncategorizedSQLException:无效的列类型-

您好,我正在尝试使用 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)

java sql spring-jdbc

2
推荐指数
1
解决办法
5万
查看次数

我可以使用 postgres JDBC 驱动程序从 java 调用 postgres“程序”(不是“函数”)吗?

我是 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(?) 作为结果

这是执行此转换的驱动程序中的方法: …

stored-procedures jdbc spring-jdbc postgresql-11

2
推荐指数
1
解决办法
5183
查看次数

使用 Spring JDBC 模板在单个事务中执行多个查询(插入和更新)

我正在尝试更新表 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)

java spring spring-jdbc jakarta-ee

2
推荐指数
1
解决办法
4821
查看次数

驱动程序 com.mysql.cj.jdbc.Driver 声称不接受 jdbcUrl

我开始用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?

mysql spring jdbc spring-jdbc spring-boot

2
推荐指数
1
解决办法
9345
查看次数

Spring boot Jdbctemplate 返回指定格式的输出

我正在为我的应用程序使用 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)

java spring-jdbc jdbctemplate spring-boot

2
推荐指数
1
解决办法
159
查看次数

相当于 Oracle DB SQL 中的 Number(38)?

我正在尝试将 Oracle SQL 数据导入 Java JBDC。

Number(38)Oracle 中的 Java 转换数据类型是什么?是BigInteger还是Long

create table Customers
(
    Customer_id                   NUMBER(38)   
      
Run Code Online (Sandbox Code Playgroud)

java oracle jdbc spring-jdbc jdbctemplate

2
推荐指数
1
解决办法
40
查看次数

带有Tomcat DBCP的Spring JDBC和多个数据源

我使用spring有多个数据源(适应多个mysql dbs)和使用tomcat dbcp.我得到一些奇怪的例外,比如

  • 找不到过程 - 当proc肯定存在于db中时
  • 无法从池中借用 - 本地开发设置,所以游泳池肯定不满

我觉得可能是这个问题,需要大家的投入:

jdbcTemplate在我的spring.xml每个查询中定义了一个对象,我需要触发,我调用jdbcTemplate.setDataSource()设置适当的数据源然后simplejdbccall(jdbctemplate)用来执行proc.

我是否应该同时定义多个jdbcTemplate对象,即每个定义的数据源一个.我在其上设置数据源jdbctemplate并执行存储过程的bean 被定义为prototype.

java spring spring-jdbc multiple-databases

1
推荐指数
1
解决办法
4682
查看次数

在spring jdbc模板中维护transcations

假设我想在10个不同的表中插入记录,这应该是原子的,所有插入应该在所有表中发生或者没有.如何在spring jdbc模板中维护这个transcation?

java spring transactions spring-jdbc

1
推荐指数
1
解决办法
947
查看次数

Spring JDBC模板.如何获取pl/sql脚本的结果变量

我正在使用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)

java plsql spring-jdbc

1
推荐指数
1
解决办法
9649
查看次数

JDBC是必需的,但无需使用jdbc

我一直在为我的春季项目编码。这是我的配置:-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 spring-boot

1
推荐指数
1
解决办法
2213
查看次数