2010-02-09 7 views
13

मैं अपने आवेदन के हिस्से में javax.sql.rowset.CachedRowSet का उपयोग कर जांच कर रहा हूं, हालांकि मुझे केवल स्वामित्व वाले सूर्य कार्यान्वयन com.sun.rowset.CachedRowSetImpl या ओरेकल विशिष्ट कार्यान्वयन का उपयोग करने की जानकारी मिल सकती है।क्या स्वामित्व वाले सूर्य के अलावा कोई भी अच्छा कैशरोवसेट कार्यान्वयन है?

सूर्य कार्यान्वयन unsupported and subject to change है। इसका उपयोग करने से समस्याएं भी पैदा हो सकती हैं यदि मैं भविष्य में गैर-सूर्य वर्चुअल मशीनों पर तैनाती करना चाहता हूं, और आखिरकार यह हमारे बिल्ड लॉग में असम्पीडित चेतावनियां छोड़ देता है जो अन्य चेतावनियों को मुखौटा कर सकता है।

क्या कोई ओपन सोर्स वैकल्पिक कार्यान्वयन है जिसे हम अपने आवेदन के साथ तैनात कर सकते हैं जो कई डेटाबेसों में अच्छी तरह से काम करेगा? कम से कम कुछ जो MySQL का समर्थन करता है।

+0

आपके द्वारा उद्धृत लिंक विशेष रूप से 'सूर्य। *' पैकेज पर लागू होता है। यह 'com.sun। *' पैकेज पर लागू नहीं होता है। – EJP

+0

इसी तरह: http://stackoverflow.com/q/8217493/642706 –

उत्तर

16

आप सीधे CachedRowSet के कार्यान्वयन नहीं instantiating जाना चाहिए - एक उदाहरण प्राप्त करने के लिए अपने प्रदाता का उपयोग करें: http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/RowSetProvider.html देखते हैं (उपलब्ध JDK7 के बाद से)

, CachedRowSet की वास्तव में इंटरफेस और संबंधित कारखाने मानक/पोर्टेबल हैं।

कुछ shoud चाल करना निम्नलिखित की तरह:

CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet(); 
crs.populate(myResultSet); 
+1

यह तब उपलब्ध नहीं था जब मैंने मूल प्रश्न पूछा लेकिन यह जानना अच्छा है कि इस अंतर को जावा द्वारा अब संबोधित किया गया है, धन्यवाद। – BenM

+0

Google ने एक अद्यतन किया है और RowSetProvider क्लास अब श्वेतसूची नहीं है: java.lang.NoClassDefFoundError: javax.sql.rowset.RowSetProvider एक प्रतिबंधित वर्ग है। अधिक जानकारी के लिए कृपया Google App Engine डेवलपर की मार्गदर्शिका देखें। – mba12

3

MySQL 5.x नामों और लेबलों का समर्थन करने के लिए कैशर RowSetImpl का मेरा बेहतर कार्यान्वयन यहां दिया गया है। thiy पुरुष के कार्यान्वयन के आधार पर http://tech.groups.yahoo.com/group/Firebird-Java/message/10715

import java.math.BigDecimal; 
import java.sql.Array; 
import java.sql.Blob; 
import java.sql.Clob; 
import java.sql.Ref; 
import java.sql.SQLException; 
import java.util.Calendar; 
import java.util.Collection; 
import java.util.Hashtable; 

import javax.sql.rowset.RowSetMetaDataImpl; 

import com.sun.rowset.CachedRowSetImpl; 

public class FixedCachedRowSetImplMySql extends CachedRowSetImpl { 

    private static final long serialVersionUID = -9067504047398250113L; 
    private RowSetMetaDataImpl RowSetMD; 

    public FixedCachedRowSetImpl() throws SQLException { 
     super(); 
    } 

    public FixedCachedRowSetImpl(Hashtable env) throws SQLException { 
     super(env); 
    } 

    private int getColIdxByName(String name) throws SQLException { 
     RowSetMD = (RowSetMetaDataImpl) this.getMetaData(); 
     int cols = RowSetMD.getColumnCount(); 

     for (int i = 1; i <= cols; ++i) { 
      String colLabel = RowSetMD.getColumnLabel(i); 
      String colName = RowSetMD.getColumnName(i); 
      if (colName != null) if (name.equalsIgnoreCase(colName) || name.equalsIgnoreCase(RowSetMD.getTableName(i) + "." + colName)) {    
       return (i); 
      } 
      else if (colLabel != null) if (name.equalsIgnoreCase(colLabel)) { 
       return (i); 
      } 
      else 
       continue; 
     } 
     throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalcolnm").toString()); 
    } 

    @Override 
    public Collection<?> toCollection(String column) throws SQLException { 
     return toCollection(getColIdxByName(column)); 
    } 

    @Override 
    public String getString(String columnName) throws SQLException { 
     return getString(getColIdxByName(columnName)); 
    } 

    @Override 
    public boolean getBoolean(String columnName) throws SQLException { 
     return getBoolean(getColIdxByName(columnName)); 
    } 

    @Override 
    public byte getByte(String columnName) throws SQLException { 
     return getByte(getColIdxByName(columnName)); 
    } 

    @Override 
    public short getShort(String columnName) throws SQLException { 
     return getShort(getColIdxByName(columnName)); 
    } 

    @Override 
    public int getInt(String columnName) throws SQLException { 
     return getInt(getColIdxByName(columnName)); 
    } 

    @Override 
    public long getLong(String columnName) throws SQLException { 
     return getLong(getColIdxByName(columnName)); 
    } 

    @Override 
    public float getFloat(String columnName) throws SQLException { 
     return getFloat(getColIdxByName(columnName)); 
    } 

    @Override 
    public double getDouble(String columnName) throws SQLException { 
     return getDouble(getColIdxByName(columnName)); 
    } 

    @Override 
    public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException { 
     return getBigDecimal(getColIdxByName(columnName), scale); 
    } 

    @Override 
    public byte[] getBytes(String columnName) throws SQLException { 
     return getBytes(getColIdxByName(columnName)); 
    } 

    @Override 
    public java.sql.Date getDate(String columnName) throws SQLException { 
     return getDate(getColIdxByName(columnName)); 
    } 

    @Override 
    public java.sql.Time getTime(String columnName) throws SQLException { 
     return getTime(getColIdxByName(columnName)); 
    } 

    @Override 
    public java.sql.Timestamp getTimestamp(String columnName) throws SQLException { 
     return getTimestamp(getColIdxByName(columnName)); 
    } 

    @Override 
    public java.io.InputStream getAsciiStream(String columnName) throws SQLException { 
     return getAsciiStream(getColIdxByName(columnName)); 

    } 

    @Override 
    public java.io.InputStream getUnicodeStream(String columnName) throws SQLException { 
     return getUnicodeStream(getColIdxByName(columnName)); 
    } 

    @Override 
    public java.io.InputStream getBinaryStream(String columnName) throws SQLException { 
     return getBinaryStream(getColIdxByName(columnName)); 
    } 

    @Override 
    public Object getObject(String columnName) throws SQLException { 
     return getObject(getColIdxByName(columnName)); 
    } 

    @Override 
    public int findColumn(String columnName) throws SQLException { 
     return getColIdxByName(columnName); 
    } 

    @Override 
    public java.io.Reader getCharacterStream(String columnName) throws SQLException { 
     return getCharacterStream(getColIdxByName(columnName)); 
    } 

    @Override 
    public BigDecimal getBigDecimal(String columnName) throws SQLException { 
     return getBigDecimal(getColIdxByName(columnName)); 
    } 

    @Override 
    public boolean columnUpdated(String columnName) throws SQLException { 
     return columnUpdated(getColIdxByName(columnName)); 
    } 

    @Override 
    public void updateNull(String columnName) throws SQLException { 
     updateNull(getColIdxByName(columnName)); 
    } 

    @Override 
    public void updateBoolean(String columnName, boolean x) throws SQLException { 
     updateBoolean(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateByte(String columnName, byte x) throws SQLException { 
     updateByte(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateShort(String columnName, short x) throws SQLException { 
     updateShort(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateInt(String columnName, int x) throws SQLException { 
     updateInt(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateLong(String columnName, long x) throws SQLException { 
     updateLong(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateFloat(String columnName, float x) throws SQLException { 
     updateFloat(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateDouble(String columnName, double x) throws SQLException { 
     updateDouble(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException { 
     updateBigDecimal(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateString(String columnName, String x) throws SQLException { 
     updateString(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateBytes(String columnName, byte x[]) throws SQLException { 
     updateBytes(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateDate(String columnName, java.sql.Date x) throws SQLException { 
     updateDate(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateTime(String columnName, java.sql.Time x) throws SQLException { 
     updateTime(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException { 
     updateTimestamp(getColIdxByName(columnName), x); 
    } 

    @Override 
    public void updateAsciiStream(String columnName, java.io.InputStream x, int length) throws SQLException { 
     updateAsciiStream(getColIdxByName(columnName), x, length); 
    } 

    @Override 
    public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException { 
     updateBinaryStream(getColIdxByName(columnName), x, length); 
    } 

    @Override 
    public void updateCharacterStream(String columnName, java.io.Reader reader, int length) throws SQLException { 
     updateCharacterStream(getColIdxByName(columnName), reader, length); 
    } 

    @Override 
    public void updateObject(String columnName, Object x, int scale) throws SQLException { 
     updateObject(getColIdxByName(columnName), x, scale); 
    } 

    @Override 
    public void updateObject(String columnName, Object x) throws SQLException { 
     updateObject(getColIdxByName(columnName), x); 
    } 

    @Override 
    public Object getObject(String columnName, java.util.Map<String, Class<?>> map) throws SQLException { 
     return getObject(getColIdxByName(columnName), map); 
    } 

    @Override 
    public Ref getRef(String colName) throws SQLException { 
     return getRef(getColIdxByName(colName)); 
    } 

    @Override 
    public Blob getBlob(String colName) throws SQLException { 
     return getBlob(getColIdxByName(colName)); 
    } 

    @Override 
    public Clob getClob(String colName) throws SQLException { 
     return getClob(getColIdxByName(colName)); 
    } 

    @Override 
    public Array getArray(String colName) throws SQLException { 
     return getArray(getColIdxByName(colName)); 
    } 

    @Override 
    public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException { 
     return getDate(getColIdxByName(columnName), cal); 
    } 

    @Override 
    public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException { 
     return getTime(getColIdxByName(columnName), cal); 
    } 

    @Override 
    public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException { 
     return getTimestamp(getColIdxByName(columnName), cal); 
    } 

    @Override 
    public void updateRef(String columnName, java.sql.Ref ref) throws SQLException { 
     updateRef(getColIdxByName(columnName), ref); 
    } 

    @Override 
    public void updateClob(String columnName, Clob c) throws SQLException { 
     updateClob(getColIdxByName(columnName), c); 
    } 

    @Override 
    public void updateBlob(String columnName, Blob b) throws SQLException { 
     updateBlob(getColIdxByName(columnName), b); 
    } 

    @Override 
    public void updateArray(String columnName, Array a) throws SQLException { 
     updateArray(getColIdxByName(columnName), a); 
    } 

    @Override 
    public java.net.URL getURL(String columnName) throws SQLException { 
     return getURL(getColIdxByName(columnName)); 
    } 
} 
+0

यह संकलित नहीं करता है। वर्ग का नाम और कन्स्ट्रक्टर नाम सहमत नहीं हैं। आपको कुछ समस्याएं बताई जानी चाहिए कि यह किस समस्या को हल करता है। – EJP

1

ओरेकल कार्यान्वयन है ओपन-सोर्स

सवाल गलत तरीके से ओरेकल rowset कार्यान्वयन मालिकाना है। यह नहीं; यह पहले से ही खुला स्रोत है।

स्रोत कोड को लाइसेंस के तहत "Classpath" exception के तहत मुफ्त सॉफ्टवेयर के रूप में जारी किया गया है। लाइसेंस देखने के लिए the source code पढ़ें।

इसलिए उन्हें वापस नहीं लिया जा सकता है। आप और अन्य इन कक्षाओं को बनाए रखने या संशोधित करने के लिए स्वतंत्र हैं बशर्ते आप जीपीएल की शर्तों का पालन करें।

JDBC ड्राइवर कार्यान्वयन

इसके अलावा, कुछ JDBC चालकों rowset के एक कार्यान्वयन प्रदान करते हैं। मुझे नहीं पता कि कोई ओपन-सोर्स है, लेकिन यह अन्वेषण करने का एक तरीका होगा।

संबंधित मुद्दे

 संबंधित मुद्दे