나는 클래스에서이 방법은 오라클에 삽입 HANA의 DB에서 읽으려고 가지고결과 집합 유형 FORWARD_ONLY에 대해 조작을 해결하는 방법은 허용되지 않습니까?
private void selectZ_ITEM_MASTER() {
//System.out.println("entre al select");
try {
Statement stmt;
ResultSet rs = null;
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(getHec_driver());
ds.setUrl(getHec_url());
ds.setUsername(getHec_usuario());
ds.setPassword(getHec_clave());
ds.setMaxActive(-1);
Connection con = ds.getConnection();
stmt = con.createStatement(
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
String query = "SELECT ";
query += "MARA.MANDT, ";
query += "MARC.WERKS, ";
query += "MARA.MATNR, ";
query += "MAKT.MAKTX, ";
query += "MAKT.MAKTG, ";
query += "MARA.MATKL, ";
query += "T023T.WGBEZ, ";
query += "T023T.WGBEZ60, ";
query += "MARA.BRGEW, ";
query += "MARA.NTGEW, ";
query += "MARA.GEWEI, ";
query += "MARA.MEINS, ";
query += "MARA.SPART, ";
query += "TSPAT.VTEXT ";
query += "FROM ";
query += "SAPR3P.MARA MARA LEFT OUTER JOIN SAPR3P.MAKT MAKT ON MARA.MANDT = MAKT.MANDT AND ";
query += " MARA.MATNR = MAKT.MATNR ";
query += " LEFT OUTER JOIN SAPR3P.T023T T023T ON MARA.MANDT = T023T.MANDT AND ";
query += " MARA.MATKL = T023T.MATKL AND ";
query += " T023T.SPRAS = 'S' ";
query += " LEFT OUTER JOIN SAPR3P.TSPAT TSPAT ON MARA.MANDT = TSPAT.MANDT AND ";
query += " MARA.SPART = TSPAT.SPART AND ";
query += " TSPAT.SPRAS = 'S' ";
query += " LEFT OUTER JOIN SAPR3P.MARC MARC ON MARA.MANDT = MARC.MANDT AND ";
query += " MARA.MATNR = MARC.MATNR ";
query += "WHERE ";
query += "MARA.MANDT = '100' ";
//query += "AND MARC.WERKS IN ('3000') ";
//query += "AND MARA.MATNR IN ('000000004030005209','000000004030005215')";
query += "AND MARC.WERKS IN ('1000','2000') ";
query += "AND MARA.MATNR BETWEEN '000000001000000152' AND '000000001000000152' ";
query += "ORDER BY ";
query += "MARA.MANDT, MARC.WERKS, ";
query += "MARA.MATNR ";
//System.out.println(query);
try{
rs = stmt.executeQuery(query);
rows = 1;
rs.last();
rows = rs.getRow();
System.out.println("Cantidad de Registros:" + rows);
ResultSetMetaData rsmd = rs.getMetaData();
columns = rsmd.getColumnCount();
System.out.println("Cantidad de Columnas:" +columns);
arr = new String[rows][columns];
int i = 0;
rs.beforeFirst();
while (rs.next()){
for (int j = 0; j < columns; j++)
arr [i][j] = rs.getString(j+1);
i++;
}
} catch (SQLException e) {
e.printStackTrace();
insertLog("Z_ITEM_MASTER VEN: " + e.getMessage(),"error", "Z_ITEM_MASTER VEN");
}
stmt.close();
con.close();
rs.close();
} catch (Exception e) {
e.printStackTrace();
msj = e.getMessage();
insertLog("Z_ITEM_MASTER VEN: " + e.getMessage(),"error", "Z_ITEM_MASTER VEN");
}
}
내가 사용 CONCUR_READ_ONLY, CONCUR_UPDATABLE와 오류를 얻고 있었다
을 내가 잘못된 인수에 대해 연구하여 그것을 해결하기 위해 관리 result 동시성을 설정합니다. 그러나 이제는 또 다른 문제가 있습니다. 이것은 오류 메시지입니다 :
com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: The operation is not allowed for result set type FORWARD_ONLY.
at com.sap.db.jdbc.exceptions.SQLExceptionSapDB.createException(SQLExceptionSapDB.java:345)
at com.sap.db.jdbc.exceptions.SQLExceptionSapDB.generateSQLException(SQLExceptionSapDB.java:113)
at com.sap.db.jdbc.ResultSetSapDB.assertNotForwardOnly(ResultSetSapDB.java:2760)
at com.sap.db.jdbc.ResultSetSapDB.last(ResultSetSapDB.java:592)
at com.sap.db.jdbc.trace.ResultSet.last(ResultSet.java:972)
at org.apache.commons.dbcp.DelegatingResultSet.last(DelegatingResultSet.java:367)
at org.apache.commons.dbcp.DelegatingResultSet.last(DelegatingResultSet.java:367)
at org.inverpaca.integracion.Integracion.selectZ_ITEM_MASTER(Integracion.java:145)
at org.inverpaca.integracion.Integracion.insertDatos(Integracion.java:207)
at org.inverpaca.integracion.Integracion.main(Integracion.java:287)
누군가 나를 도울 수 있습니까?
일부 포럼에서는 올바른 결과 세트 또는 이와 유사한 명령문 설정과 관련이있는이 문제점을 참조합니다.
'rs.last()'는 (허용되지 않음) (https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#last())입니다. 결과 세트의 유형. 반복은 ** ** 한 번 앞으로 진행할 수 있으며 (예 : 마지막 레코드까지) 이동할 수 없습니다. –
나는이 문제가 마지막 행으로 이동하는'rs.beforeFirst()'_after_라고 생각한다. 'FORWARD_ONLY' 결과 세트에서 뒤로 스크롤 할 수 없습니다. –
해결 방법이 있습니까? 나는 rs.last()를 디버깅하는 동안 10 분 전에 그것을 알아 차렸다. 문제 였고, 내가 그것을 구분하지 않으려 고 할 때 y는 foward_only를 다시 사용하라고 말했습니다. 어떻게 결과를 추가 할 수 있습니까? 나는 목록을 첨부하는 것을 생각하고 있었지만 그것은 거의 구멍 방법을 바꾸는 것을 의미합니다. –