2015-02-27 5 views
0

Я работаю над школьным проектом, я студент и новичок в этом, поэтому, если мой вопрос кажется слишком простым или глупым, если на то пошло, пожалуйста голый со мной. Тем не менее,Мне нужен метод для возврата всех значений из запроса select

Я работал над проектом, который требует, чтобы я извлекал данные из базы данных mySQL. Метод содержится в классе, который содержит десятки других методов доступа к базе данных для моей java-программы. План состоит в том, чтобы вызывать эти методы из любого другого класса, который требует данных из базы данных. Проблема в java, вы можете вернуть только один тип данных, и все же мне нужно вернуть все данные из полученного кортежа.

Короче говоря, что это лучший способ, чтобы получить мой метод возврата (в другом классе, который вызывает этот метод) все данные из моего запроса

Вот фрагмент кода:

// SELECT QUERIES 
public void select_H_Customer_Table(int get_intCustomerID) { 
    int intCustomerID = get_intCustomerID; 
    sql = "SELECT intCustomerID, vachCustomerTitle, vachCustomerFirstName, vachCustomerSurnames, dteCustomerDOB, vachCustomerAddressStreet, vachCustomerAddressTown, vachCustomerAddressCounty, vachCustomerAddressPostalCode, intCustomerHomePhone, intCustomerWorkPhone, intCustomerMobilePhone, vachCustomerEmail FROM h_customers " + "WHERE" + " intCustomerID=?"; 
    try { 
    st.setInt(1, intCustomerID); 
    rs = st.executeQuery(); 
    while (rs.next()){ 
     int rs_intCustomerID = rs.getInt("intCustomerID"); 
     String rs_vachCustomerTitle = rs.getString("vachCustomerTitle");    
     String rs_vachCustomerFirstName = rs.getString("vachCustomerFirstName"); 
     String rs_vachCustomerSurnames = rs.getString("vachCustomerSurnames"); 
     String rs_dteCustomerDOB = rs.getString("dteCustomerDOB"); 
     String rs_vachCustomerAddressStreet = rs.getString("vachCustomerAddressStreet"); 
     String rs_vachCustomerAddressTown = rs.getString("vachCustomerAddressTown"); 
     String rs_vachCustomerAddressCounty = rs.getString("vachCustomerAddressCounty"); 
     String rs_vachCustomerAddressPostalCode = rs.getString("vachCustomerAddressPostalCode"); 
     int rs_intCustomerHomePhone = rs.getInt("intCustomerHomePhone"); 
     int rs_intCustomerWorkPhone = rs.getInt("intCustomerWorkPhone"); 
     int rs_intCustomerMobilePhone = rs.getInt("intCustomerMobilePhone"); 
     String rs_txtCustomerEmail = rs.getString("txtCustomerEmail"); 
    } 
    } catch (SQLException e) { 
    // TODO Auto-generated catch block e.printStackTrace(); 
    } 
} 
+0

Вы только сказали «вы можете вернуть только один тип данных». Пусть этот тип данных будет вашим обычным объектом. Создайте свой собственный класс, чтобы обернуть содержимое, которое вы извлекли из базы данных, и вернуть этот объект. В некоторых случаях вы можете использовать объект Map с именем столбца как «Ключ» и соответствующим значением столбца в качестве значения карты – HJK

+0

, пожалуйста, переформатируйте фрагмент кода, чтобы это не просто комментарий 1000 символов. Редактор markdown имеет форматирование кода, поэтому вы можете легко его легко отображать –

ответ

2

Вы должны создать Customer класс и методы запроса должен возвращать Customer

Объекта Клиент должен быть как :

class Customer { public Customer() {}; private int iD; private String title; private String firstName; private String surnames; private String dOB; private String addressStreet; private String addressTown; private String addressCounty; private String addressPostalCode; private int homePhone; private int workPhone; private int mobilePhone; private String customerEmail; // Generate getters and setters }

И метод запроса должен быть:

public Customer getCustomerById(int customerID) { 

    String sql = "SELECT intCustomerID, vachCustomerTitle, vachCustomerFirstName, vachCustomerSurnames, dteCustomerDOB, vachCustomerAddressStreet, vachCustomerAddressTown, vachCustomerAddressCounty, vachCustomerAddressPostalCode, intCustomerHomePhone, intCustomerWorkPhone, intCustomerMobilePhone, vachCustomerEmail FROM h_customers " + "WHERE" + " intCustomerID=?"; 
    try { 
     st.setInt(1, customerID); 
     rs = st.executeQuery(); 
     while (rs.next()){ 
      Customer customer = new Customer(); 
      customer.setId(rs.getInt("intCustomerID")); 
      customer.setTitle(rs.getString("vachCustomerTitle")); 
      customer.setFirstName(rs.getString("vachCustomerFirstName")); 
      //... 
      return customer; 
     } 
    } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 
     return null; 
    } finally { 
     if(rs != null) { 
      rs.close(); 
     } 
    } 
} 
+0

Метод принимает идентификатор клиента в качестве параметра, поэтому нет необходимости возвращать список объектов Customer. Но я бы предложил изменить имя метода на что-то вроде 'public Customer getCustomerById (int customerId)' –

+0

Вы правы. Я был смущен оригинальным именем метода. Благодаря! – Diego

+0

Спасибо за помощь Diego & @shikjohari, могу ли я спросить, как я получу возвращаемые данные и назначить их переменной, следует ли использовать список или массив? – MushTheRookie

3

Создайте pojo (класс сущности) и используйте select * query. После того как вы создать результирующий объект POJO и заполнить поля и вернуть

public class MyData{ 
    private String name; 
    private String desc; 
    //constructor or setter getter 
} 

И когда у вас есть создать new MyData() ResultSet с полями

MyData data = null; 
while(resultSet.next()){ 
    data = new MyData(resultSet.getString("NAME"), resultSet.getString("DESC")); 
} 
return data; 

Нечто подобное !!! Если у вас есть много полеев, я предпочел бы сеттер и добытчик вместо спараметрированного конструктора

+0

FYI: «pojo» означает Plain Old Java Object –

+0

Должно ли pojo быть внешним или вложенным классом? – MushTheRookie

+0

зависит от того, как вы хотите его использовать. Если вы хотите использовать его и в другом классе, то сделайте его как отдельный открытый класс. – shikjohari

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