Neodatis を使ってみた。


キーストン ホーム

前に戻る
Neodatis というオープンソースのオブジェクト指向データベースを使ってみた。
日本語を扱うには、最初にこいつを呼び出しておく必要があるようだ。
これを呼ばないと、文字化け状態。

org.neodatis.odb.OdbConfiguration.setDatabaseCharacterEncoding ("UTF-8");


ドキュメントでは以下のようになっている

Chapter 14. Database Encoding
NeoDatis uses "ISO8859-1" as its default encoding.
The OdbConfiguration.setDatabaseCharacterEncoding(Java Encoding) can be called to set the
desired encoding.
The OdbConfiguration.setLatinDatabaseCharacterEncoding() uses the ISO8859-1 encoding
and is suitable for most of Latin languages applications.
Warning 1 :Encoding must always be configured before opening the NeoDatis database
Warning 2 :In client server mode, the correct encoding must be set on both client and server side.



以下は、作ってみたサンプル。

// ----------------------------------------------------------------------------------------------------
package com.keystonebrand.squid.model;

import java.util.Vector;
import com.keystonebrand.squid.lib.KsIcallBackBasic;
import org.neodatis.odb.*;
import org.neodatis.odb.core.query.*;
import org.neodatis.odb.core.query.criteria.Where;
import org.neodatis.odb.impl.core.query.criteria.CriteriaQuery;

public class KsNeodatis implements KsIdbAccess {

    private String dbpath = null;
    private static ODB objectContainer = null;

    public KsNeodatis() {
        this.dbpath = com.keystonebrand.squid.property.KsInformation.dbpath;
    }

    public KsNeodatis(String aDbPath) {
        try
        {
	        if (aDbPath != null)
	        {
	            com.keystonebrand.squid.property.KsInformation.dbpath = aDbPath;
	            this.dbpath = com.keystonebrand.squid.property.KsInformation.dbpath;
	        }
        }
        catch(Exception e)
        {
            com.keystonebrand.squid.property.KsInformation.getLogger().warning(e.getMessage());
        }
    }

    public <T> void regist(T aObject) {
        try
        {
            getOC().store(aObject);
        }
        catch(Exception e)
        {
            com.keystonebrand.squid.property.KsInformation.getLogger().warning(e.getMessage());
        }
    }

    public static ODB openObjectContainer(String aDbPath)
    {
        try
        {
            org.neodatis.odb.OdbConfiguration.setDatabaseCharacterEncoding ("UTF-8");

            if (KsNeodatis.objectContainer == null)
            {
                KsNeodatis.objectContainer = ODBFactory.open(aDbPath);
            }
        }
        catch(Exception e)
        {
            com.keystonebrand.squid.property.KsInformation.getLogger().warning(e.getMessage());
        }

        return KsNeodatis.objectContainer;
    }

    public static void closeObjectContainer()
    {
        try
        {
            if (KsNeodatis.objectContainer != null)
            {
                KsNeodatis.objectContainer.close();
                KsNeodatis.objectContainer = null;
            }
        }
        catch(Exception e)
        {
            com.keystonebrand.squid.property.KsInformation.getLogger().warning(e.getMessage());
        }
    }
}


// ----------------------------------------------------------------------------------------------------
package com.keystonebrand.squid.property;

/**
 *
 * アプリケーションの管理情報いろいろ
 * まだとりあえずな状態。
 *
 * @author kanagawa
 */
public class KsInformation {

    public static String dbpath = "./keystone.db";
    public static String logpath = ".";
    public static String logname = "keystone.log";
    private static java.util.logging.Logger logger = null;

    public static java.util.logging.Logger getLogger() {
        try
        {
            String wFilePath = logpath + java.io.File.separator + logname;
            java.util.logging.FileHandler wHandler = new java.util.logging.FileHandler(wFilePath, true);
            wHandler.setFormatter(new java.util.logging.SimpleFormatter());
            KsInformation.logger = java.util.logging.Logger.getLogger(logname);
            KsInformation.logger.addHandler(wHandler);
            KsInformation.logger.setLevel(java.util.logging.Level.ALL);

        }
        catch(java.lang.Exception e)
        {
            KsInformation.logger.warning(e.getMessage());
        }
        return KsInformation.logger;
    }
}

// ----------------------------------------------------------------------------------------------------
package com.keystonebrand.squid.lib;

/**
 *
 * @author kanagawa
 */
public interface KsIblockBack<T> {
    public void exec(T aObject);
}


前に戻る