2017-08-17 95 views
0

我在postgresql中创建了一个函数,该函数接收两个varchar参数并返回void,它在pgadmin中执行它时正常工作,但我尝试从它调用它时遇到问题java的。我试着用executeQuery和其他一些我发现的例子来调用函数。问题是:在java中它似乎一切正常,但是当我在postgres中检查表时,它没有改变,当函数应该添加一个寄存器时。 我试着用这样的:从java调用postgres函数与JDBC不起作用

try (CallableStatement callableStatement = 
       dbConn.prepareCall("{ CALL prueba1(?,?) }")) { 
      callableStatement.setString(1,mun); 
      callableStatement.setString(2,edo); 
      callableStatement.execute(); 
      callableStatement.close(); 
     } 

而与此...

try (Connection conn = DBConnection.createConnection(); PreparedStatement pstmt = conn.prepareStatement("{call prueba1(?,?)}")) { 
     pstmt.setString(1,mun); 
     pstmt.setString(2,edo); 
     ResultSet rs = pstmt.executeQuery(); 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } 

但它仍然没有工作...任何帮助将是巨大的。

+0

难道是事务回滚? –

+0

你肯定会得到一个sql异常,因为executeQuery需要一个ResultSet,而你的sql语句是一个插入或更新。 –

+0

看起来像MySQL语法,而不是PostgreSQL。 –

回答

0

在你准备好的声明中尝试切换:

ResultSet rs = pstmt.executeQuery(); 

有了:

pstmt.executeUpdate(); 

因为你事先准备好的声明实际上返回void,没有结果集返回,这是更有效的一条指令像插入或更新 - 没有返回值。

+0

谢谢,我试过这个,但是我收到了消息“结果是在没有预期的情况下返回的。” 另外我改变了我的plpgsql函数的结果为整数,并在函数结束时返回“1”。在Java中,我得到了“1”,但表中的行仍然没有添加。 –