2012-05-16 4 views
0

У меня есть метод:Возвращение значения из метода ничтожной в Java

public void dbQuery(String query, String what) { 
    try { 
     Statement stmt = conn.createStatement(); 
     ResultSet rs = stmt.executeQuery(query); 

     if(what.equals("temp_table")) { 
      String temporary_table = rs.getString("table_name_temp"); 
      System.out.println(temporary_table); 
      return; 
     } 

     } 

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

    finally { 
     if (rs != null) rs.close(); 
     if (stmt != null) stmt.close(); 
     } 

} 



String query = "EXEC temptables.dbo.create_temp_cdr 'SIP'"; 
String temporary_table = db.dbQuery(query,"temp_table"); 

Как получить возврат в void использовать его в другом db.dbQuery()?

PS: Мне нужно значение из dbQuery() так что я могу построить еще один query называть dbQuery() снова

+0

Возвращение пустоте? – ChadNC

+0

Я показал вам, как это сделать здесь: http://stackoverflow.com/questions/10617128/java-sql-connections-via-class/10617251#10617251 – duffymo

+0

@duffymo, это просто китайский ... Я хочу сделать это медленно – pufos

ответ

1

Вы можете иметь ваш метод не аннулируются, и имеют тип возвращаемого значения, то вы можете иметь линию

return temporary_table; 

, который будет возвращать temporary_table переменную.

Другим способом было бы перейти по ссылке на метод. Например, вы можете передать объект StringBuilder в этот метод. Любые изменения этого объекта в методе будут также применяться после возврата метода.

public void addToString(StringBuilder query, String toAdd) { 
    query.append(toAdd); 
} 

Вызов этого метода

StringBuilder query = new StringBuilder("start"); 
System.out.println(query.toString()); 
addToString(query, "end"); 
System.out.println(query.toString()); 

будет иметь выход:

начала
startend

+0

спасибо человеку .. оценен – pufos

8

Как получить возврат пустоты, чтобы использовать его в другом db.dbQuery()?

Что вы подразумеваете под «возвращением пустоты»? Если вы имеете в виду «возвращаемое значение», то не один - это точка метода, объявленная как void.

Если вы хотите возвращать значение, то не делают это метод недействительным ... учитывая это:

String temporary_table = db.dbQuery(query,"temp_table"); 

это выглядит, как вы просто хотите изменить dbQuery вернуть String. Обратите внимание, что вам нужно будет решить, что вернуть, если whatне являетсяtemp_table. (Вы также должны исправить обработку исключений - просто распечатка трассировки стека на стандартный вывод, а затем продолжается независимо почти никогда не правильный подход.)

+2

Человек, я пришел с php и теперь ... java дует мой разум ...: | – pufos

+0

Мне нужно значение из 'dbQuery()', поэтому я могу построить еще один 'запрос' для вызова' dbQuery() 'снова – pufos

+1

@pufos: что у него в голове? Мне это кажется довольно простым. Если вы пытаетесь выполнить Java методом проб и ошибок, я настоятельно рекомендую вам вместо этого получить книгу (или, по крайней мере, прочитать учебник) ... что-то, что будет охватывать то, что означают разные биты объявления метода. –

0

Вы не можете вернуть значение из метода, который определяется как void - по определению это означает, что он не возвращает никакой ценности.

Если вы видите оператор return; в методе void, это в основном означает, что это закончит текущий метод и вернет обработку обратно вызывающему.

0

Я бы сделал ваш метод string вместо bool. Пустота ничего не вернет.

0

метод недействительным является то, что не вернуть что-нибудь. Но ваше требование кажется, что вы должны использовать значение, генерируемое в этом методе в предыдущем слое. Одним из очевидных решений для этого является изменение типа возврата с void на String. Но, если вы не хотите этого делать, просто передайте еще один параметр строки вашему методу. String - это объект, поэтому, когда вы передаете его методу, вы фактически передаете ссылку на этот объект. Просто установите значение сгенерированного значения в этой строке, и вы сможете получить к нему доступ в предыдущем слое с помощью этой строковой переменной (это похоже на Pass by Reference в C). Надеюсь, это решение проблемы будет решить вашу проблему. Пожалуйста, исправьте меня, если я ошибаюсь.

0

На самом деле он хочет иметь что-то подобное, как функции в VB или около того. Во-первых, создайте свою пустоту, как обычно.

private Void getheightoflistview(ListView nameOfListView){ 
    //do whatever you want to do 
    int numberOfItems = nameOfListView.getCount(); 
    //You want to return the numberOfItems 
} 

Так что, если вы хотите вернуть целочисленное значение, просто замените Пустота с Integer

private Integer getheightoflistview(ListView nameOfListView){ 
    //do whatever you want to do 
    int numberOfItems = nameOfListView.getCount(); 
    //You want to return the numberOfItems 
    return numberOfItems; //this is the Integer you want to return 

} 

и добавить возвращаемое значение

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