2013-07-17 4 views
0

я получил ошибку, давая вход, поэтому во избежание ошибок и хранить базу данных Postgre table_sp tableнужно вставить в таблицу базы данных

 package mypkg; 

     import java.sql.CallableStatement; 
     import java.sql.Connection; 
     import java.sql.DriverManager; 
     import java.sql.ResultSet; 
     import java.sql.SQLException; 
     import java.sql.Statement; 
     import java.util.Scanner; 

     public class PostgreSp { 

      public static void main(String args[]) throws SQLException, ClassNotFoundException { 
       Connection cn; 
       Statement st; 
       ResultSet rs; 

       try { 
        Scanner in = new Scanner(System.in); 

        System.out.println("Enter a PK"); 
        String pk = in.nextLine(); 
        System.out.println("Enter a user"); 
        String u = in.nextLine(); 
        System.out.println("Enter a pass"); 
        String ps = in.nextLine(); 
        Class.forName("org.postgresql.Driver"); 
        cn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/samples", "postgres", "analuo"); 

        CallableStatement calstat = cn.prepareCall("{call new(?,?,?)}"); 
        calstat.setString(1, pk); 
        calstat.setString(2, u); 
        calstat.setString(3, ps); 
        int i = calstat.executeUpdate(); 
        cn.close(); 
        calstat.close(); 
        System.out.println("Your data has been inserted into table."); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

ПРОЦЕДУРА STORE:

CREATE OR REPLACE FUNCTION new(pk character varying, u character varying,ps character varying) 
     RETURNS SETOF record AS 
    $BODY$ 
    BEGIN 

    RAISE NOTICE 'PK is %','--'pk; 
    EXECUTE 'INSERT INTO table_sp("pk_id","username","password")VALUES ('''||pk||''' ,'''||u||''','''||ps||''')' ; 
    END; 
    $BODY$ 
     LANGUAGE plpgsql VOLATILE 
     COST 100 
     ROWS 1000; 
    ALTER FUNCTION new(character varying, character varying,character varying) 
     OWNER TO postgres; 

SAMPLE OUTPUT:

run: 
Enter a PK 
1 
Enter a user 
admin 
Enter a pass 
admin 
org.postgresql.util.PSQLException: ERROR: a column definition list is required for functions returning "record" 
    Position: 15 
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) 
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:330) 
    at mypkg.PostgreSp.main(PostgreSp.java:37) 
BUILD SUCCESSFUL (total time: 36 seconds) 

Я прилагаю магазин процедура тоже. Как избежать ошибки и сохранить таблицу.

+3

Когда я выполняю поиск в Google для «ОШИБКИ: необходим список определения столбцов для возвращаемых функций», он приходит с этим в качестве первого ответа: http://stackoverflow.com/questions/8605174/postgresql-error-42601- a-column-definition-list-is-required-for-functions-ret - Google - отличное место для поиска ответов – DaveRlz

ответ

1

Вы определили функцию с RETURNS SETOF record, но тело функции ничего не возвращает. Глядя на ваш код Java, вы также не ожидаете, что он вернет что-либо. (using executeUpdate)

Измените функцию на RETURNS VOID, чтобы Postgres ничего не узнал.

Смежные вопросы