2016-03-21 4 views
0

Я создал хранимую процедуру, где я могу выбрать столбец, который я адресую в своей хранимой процедуре через заявление о вызове. Я пытался использовать SELECT SECTION NAME FROM allsections_list WHERE SECTION_NAME = ? Как и синтаксис подготовленного заявления, но я думаю, что он несовместим с этим синтаксисом. Я просто изучаю этот mysql.Правильное использование хранимой процедуры с помощью Select

хранимых процедур

CREATE STORED PROCEDURE getSECTION_NAME(OUT SECTION_NAME VARCHAR) 
SELECT SECTION_NAME FROM allsections_list 

Код

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    String searchSection = Section_SearchSection_Textfield.getText(); 
    String searchSection_Name = Section_SectionName_TextField.getText(); 

    if (searchSection.isEmpty()) 
    { 
     JOptionPane.showMessageDialog(null, "Please fill up this fields"); 
    } 
    else 

     try (Connection myConn = DBUtil.connect(); 
      CallableStatement myCs = myConn.prepareCall("{call getSECTION_NAME(?)}")) 
     { 
      myCs.setString(1, searchSection_Name); 

      try (ResultSet myRs = myCs.executeQuery()) 
      { 
       int resultsCounter = 0; 
       while (myRs.next()) 
       { 
        String getSection_Name = myRs.getString(1); 
        Section_SectionName_TextField.setText(getSection_Name); 
        resultsCounter++; 
       } 
      } 
     } 
     catch (SQLException e) 
     { 
      DBUtil.processException(e); 
     } 

Когда я ищу записи. Если записи существуют, значение будет выводиться на текстовые поля. Но он не распечатывается. И это бросает мне ошибку getSECTION_NAME does not exist. Что делать, если я хочу выбрать несколько значений? Потому что у меня есть проект, в котором я создаю систему регистрации. Я выбираю эту хранимую процедуру специально, чем пакетное заявление, основанное на том, что я читал. Любая помощь будет оценена. Благодаря!

+0

старайтесь не использовать хранимые процедуры, они вносят зависимость от вашего db. Ваш db предназначен только для хранения данных. – NimChimpsky

+0

@NimChimpsky Что делать, если я хочу выбрать несколько значений? – Francisunoxx

+0

Динамические запросы почти никогда не являются хорошей идеей. – NimChimpsky

ответ

-1

Я не использую MySql, но вот пример в Oracle (я думаю, это работает и в MySql).

CREATE PROCEDURE get_section_name(OUT secName VARCHAR(100)) 
BEGIN 
SELECT SECTION_NAME INTO secName FROM allsections_list WHERE some_condition = 100; //your procedure does not use any input arguments if you want to return just one record then you'll probably need to specify a where clause 
END 
///when executing a stored procedure in a DB client you will need to specify a terminator character (in this case slash /) 

Обратите внимание, что нет оператора возврата, потому что мы используем параметры OUT.

Метод getOutValueForStoredProcedure вызывает хранимую процедуру и извлекает значение out.

public String getOutValueForStoredProcedure(String procedureName, int sqlType) throws EasyORMException{ 

    String out=null; 
    CallableStatement stmt=null; 
    try{ 
      //out parameters must me marked with question marks just as input parameters 
      sqlQuery = "{call " + procedureName +"(?)}"; 
      stmt=conn.prepareCall(sqlQuery);//I assume that a Connection has been created 

      stmt.registerOutParameter(1, sqlType); 

      stmt.execute();  

      out = stmt.getString(1);//you get the out variable through the Statement, not the ResultSet 

    }catch(Exception e){ 
      //log exception 
    }finally{ 
      //close stmt 
    } 
    return out; 
} 

Для вызова этой хранимой процедуры, вы можете использовать

String out = getOutValueForStoredProcedure("get_section_name", java.sql.Types.VARCHAR); 

Для создания хранимых процедур в MySql, проверьте эту ссылку http://code.tutsplus.com/articles/an-introduction-to-stored-procedures-in-mysql-5--net-17843

Для более сложного примера, проверить это http://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-out-parameter-example/

+0

@Downvoter, позаботьтесь, чтобы объяснить причину downvote, чтобы я мог улучшить свой ответ? –

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