آموزش برنامه نویسی

تمام الفاظ جهان را در اختیار داشتیم و آن نگفتیم که به کار آید ...

نکته ای جالب درباره کار با OracleCachedRowSet
ساعت ۱۱:٤۱ ‎ق.ظ روز چهارشنبه ۱٥ اردیبهشت ۱۳۸٩  

خوب همون طور که میدونید یکی از روشهای اتصال به پایگاه های داده ، اتصال غیر متصله(Disconnected Mode ) ... و تفاوت این نوع اتصال با نوع مقابلش که روش متصله ( Connected ) اینه که پس از اجرای عملیات چه Callable Statement و یا اجرای Query به یکباره تمام اطلاعات رو دریافت میکنه و در حافظه برای استفاده نگهداری میکنه و خوب چون به سرعت کارشو با دیتابیس تموم میکنه و ارتباطو منتظر خوندن ما نمیذاره من خیلی دوستش دارم ...  کلاس OracleCachedRowSet هم دقیقا یکی از همین ابزار هاست و دقیقا همین کارو برای ما میکنه ... 1 - برقراری ارتباط  2 - انجام عملیات (مثلا Select )

3 - قطع ارتباط ... خیلی رویاییه نه ؟ اما تا حالا فکر کردین برای واکشی 8 میلیون رکورد  حداقل 8 فیلدی حالا با حجم متوسط چه باید کرد ؟ و این حجم دیتا کجا باید قرار بگیره ؟

خوب من با یک سیستم عامل Suse Linux  64 bit و 16 GB حافظه مشکل رو حل کردم و تقریبا 7 گیگا بایت از حافظه سرورم رو با یک Select  اشغال کردم ...اما اگه این حجم دیتا دوبرابر بشه چی ؟

برای رفع این مشکل حتما از Paging در OracleCachedRowSetاستفاده کنید و هربار تعداد مشخصی از دیتا رو برحسب مقدار حافظه تون واکشی کنید. مثلا برای 8 میلیون هر با 1 میلیون دیتا بردارید ... البته باید اینو هم در نظر بگیرید که هر بار  دیگه دیتاهای واکشی قبل رو در اختیار ندارید. پس سعی کنید در هر واکشی کارتونو با اون مقدار تموم کنید و نکته مهمتر اینکه این گونه کارها حتما باید با دیتابیس های آفلاین انجام بشه و گرنه با این مشکل اساسی برای دیتابیستون درست میکنید.


کلمات کلیدی:
 
الگوریتم BlueFish برای Encryption
ساعت ۱٠:۳٥ ‎ق.ظ روز چهارشنبه ۱٥ اردیبهشت ۱۳۸٩  

    String mode = "Blowfish/CBC/PKCS5Padding";
    String algorithm = "Blowfish";
    byte[] result = null;
    byte secret[] = "yourkey".getBytes();

    Key key = new SecretKeySpec(secret, algorithm);
    byte[] ivBytes =
        new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
    IvParameterSpec iv = new IvParameterSpec(ivBytes);

//  -------------------------------------------------------

    public byte[] Crypto(byte[] input,
                         int EnMode) throws NoSuchAlgorithmException,
                                            NoSuchPaddingException,
                                            InvalidKeyException,
                                            InvalidAlgorithmParameterException,
                                            IllegalBlockSizeException,
                                            BadPaddingException {


        Cipher cipher = null;
        byte[] coded = null;
        cipher = Cipher.getInstance(mode);
        cipher.init(EnMode, key, iv);
        coded = cipher.doFinal(input);
        return coded;
    }

فقط کافیه که متدش رو صدا بزنید و بایت های خودتونو برای Encryption ارسال کنید.


کلمات کلیدی:
 
نحوه استفاده از OracleDataSource ...
ساعت ۱٠:٢٧ ‎ق.ظ روز چهارشنبه ۱٥ اردیبهشت ۱۳۸٩  

    static {
        try {
            odsH = new OracleDataSource();
            odsH.setURL(cnnStr);
            odsH.setUser(UserName);
            odsH.setPassword(Pass);
            odsH.setConnectionCachingEnabled(true);
            odsH.setConnectionCacheName(CACHE_NAME);
            Properties cacheProps = new Properties();
            cacheProps.setProperty("PropertyCheckInterval", "1");
            cacheProps.setProperty("InitialLimit", "5");
            cacheProps.setProperty("MinLimit", "5");
            cacheProps.setProperty("MaxLimit", "20");
            cacheProps.setProperty("ValidateConnection", "True");
            odsH.setConnectionCacheProperties(cacheProps);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    public Connection getConnection() throws InterruptedException {
        int i = 0;
        Connection cnn = null;
        while (i < 10) {
            try {
                cnn = odsH.getConnection();
                break;
            } catch (SQLException e) {
                i++;
                Thread.sleep(500);
            }
        }
        return cnn;
    }

همینطور که میبینید با استفاده از این  DataSource مدیریت تعداد Connection و همینطور  Connection Pooling رو در اختیار این کلاس قرار میدیم ... این کلاس واقعا این کار رو راحت میکنه و من به شما توصیه میکنم اگه از JDBC استفاده میکنید حتما ازش استفاده کنید.


کلمات کلیدی: