2015-11-10 1 views
3

Я пытаюсь написать метод, используя CachedRowSet для выполнения запросов SQl. Пример кода выглядит следующим образом (имя пользователя и пароль определен ранее),Как выполнять SQL-запросы с помощью CachedRowSet?

public CachedRowSet getContentsOfCoffeesTable(Connection connection) throws SQLException { 

    CachedRowSet crs = null; 

    try { 

     crs = new CachedRowSetImpl(); 

     crs.setType(ResultSet.TYPE_SCROLL_INSENSITIVE); 
     crs.setConcurrency(ResultSet.CONCUR_UPDATABLE); 
     crs.setUsername(user); 
     crs.setPassword(password); 


     crs.setCommand("select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES"); 
     crs.execute(); 


    } catch (SQLException e) { 

     e.printStackTrace(); 
    } 
    return crs; 
} 

Когда я пытаюсь прочитать данные, используя образец кода, я ничего не получаю.

CachedRowSet myValues = getContentsOfCoffeesTable(myConn); 
while(myValues != null && myValues.next()){ 

    // get the values of 2nd column of the table 
    System.out.println(myValues.getString(2)); 
} 

КОФЕ-таблица уже заселена. Как я могу улучшить код? Благодарю.

+1

Если вам удалось решить вашу проблему, тогда вы не должны редактировать свой вопрос, чтобы добавить решение, но вместо этого вы должны отправить ответ с помощью s olution. Это намного более ясно для других людей, а также позволит вам принять ваш собственный ответ. –

+1

Обратите внимание, что исходной причиной вашей проблемы является то, что вы не предоставили соединение с набором кешированных строк (либо с самим набором строк, либо с помощью метода execute), поэтому он просто не может запрашивать информацию, t есть соединение. –

+0

Спасибо большое, я буду заботиться об этом в будущем. –

ответ

1

я найти решение, как использовать CachedRowSet для выполнения запросов SQL и изменил метод следующим образом,

public CachedRowSet getContentsOfCoffeesTable(Connection mycConn) 
    throws SQLException { 

CachedRowSet crs = null; 
ResultSet resultSet = null; 
Statement stmt = null; 
String sql = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES"; 

try { 

    stmt = myConn.createStatement(); 
    resultSet = stmt.executeQuery(sql); 

    crs = new CachedRowSetImpl(); 
    crs.populate(resultSet); 

} 

catch (Exception e) { 

    e.printStackTrace(); 
} 

return crs; 
} 

Затем, можно вывести значения S следующее,

// I get the Connection myConn here 
// then pass the connection info to the method and get myValues 
// prit myValues for column index of 2 

CachedRowSet myValues = getContentsOfCoffeesTable(myConn); 
while(myValues != null && myValues.next()){ 

    // get the values of 2nd column of the table 
    System.out.println(myValues.getString(2)); 
} 
+1

Вам нужно прояснить, что именно вы изменили, чтобы заставить его работать. Не просто свалка кода. – EJP

0

I найти другой способ сделать это. В исходном посте URL-адрес информация не была представлена ​​следующим образом,

cr.setUrl(url); 

В случае, если значение URL,

url = "jdbc:mysql://localhost:3306/myDemo" 

Метод идет следующим образом,

private CachedRowSet getContentsOfCoffeesTable(Connection con) 
     throws SQLException { 

    CachedRowSet cr = null; 

    try { 

     cr = new CachedRowSetImpl(); 
     cr.setType(ResultSet.TYPE_SCROLL_INSENSITIVE); 
     cr.setConcurrency(ResultSet.CONCUR_UPDATABLE); 
     cr.setUsername(username); 
     cr.setPassword(password); 
     cr.setUrl(url); 

     cr.setCommand("select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES"); 
     cr.execute(); 

    } 

    catch (Exception ex) { 

     ex.printStackTrace(); 
    } 

    return cr; 
} 
Смежные вопросы