Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle के विरुद्ध जावा में तैयार वक्तव्य प्रश्न

मैं इस दस्तावेज़ को देखकर थोड़ा हैरान हूँ। यह सच है कि आप इस प्रकार एक सरणी/संग्रह सेट नहीं कर सकते हैं (और यह डेटाबेस/जेडीबीसी ड्राइवर के उपयोग की परवाह किए बिना है):

String sql = "SELECT col FROM tbl WHERE id IN (?)";
statement = connection.prepareStatement(sql);
statement.setArray(1, arrayOfValues); // Fail.

लेकिन दस्तावेज़ में उल्लिखित क्वेरी को काम करना चाहिए। मैं इसे ojdbc14.jar के संयोजन में कम से कम Oracle 10g XE के अनुभव से बता सकता हूं . मुझे संदेह है कि या तो दस्तावेज़ के लेखक ने चीजों को भ्रमित किया है, या यह वास्तव में डीबी और/या जेडीबीसी ड्राइवर के एक अलग (पुराने?) संस्करण से संबंधित है।

उपयोग किए गए JDBC ड्राइवर की परवाह किए बिना निम्नलिखित को काम करना चाहिए (हालाँकि आप DB पर निर्भर हैं कि IN क्लॉज में कितने आइटम हो सकते हैं, Oracle (हाँ, फिर से) की सीमा लगभग 1000 आइटम है):

private static final String SQL_FIND = "SELECT id, name, value FROM data WHERE id IN (%s)";

public List<Data> find(Set<Long> ids) throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    List<Data> list = new ArrayList<Data>();
    String sql = String.format(SQL_FIND, preparePlaceHolders(ids.size()));

    try{
        connection = database.getConnection();
        statement = connection.prepareStatement(sql);
        setValues(statement, ids.toArray());
        resultSet = statement.executeQuery();
        while (resultSet.next()) {
            Data data = new Data();
            data.setId(resultSet.getLong("id"));
            data.setName(resultSet.getString("name"));
            data.setValue(resultSet.getInt("value"));
            list.add(data);
        }
    } finally {
        close(connection, statement, resultSet);
    }

    return list;
}

public static String preparePlaceHolders(int length) {
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < length;) {
        builder.append("?");
        if (++i < length) {
            builder.append(",");
        }
    }
    return builder.toString();
}

public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException {
    for (int i = 0; i < values.length; i++) {
        preparedStatement.setObject(i + 1, values[i]);
    }
}

TIMESTAMP के संबंध में प्रश्न, बस उपयोग करें PreparedStatement#setTimestamp()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में ABS () फ़ंक्शन

  2. अनुकूली गतिशील आँकड़े 12.1.0.2 आरएसी में प्रदर्शन को मारते हैं

  3. Oracle प्रबंधित ODP.NET tnsnames.ora नहीं ढूँढ सकता

  4. TRIM () Oracle में फंक्शन

  5. Oracle में कुछटेबल से COUNT(*) चुनने के लिए तेज़ विकल्प