» »

[Java]Shranjevanje/Branje nastavitev za povezavo z podatkovno bazo

[Java]Shranjevanje/Branje nastavitev za povezavo z podatkovno bazo

KernelPanic ::

Spostovani!

Kateri class naj uporabim za branje/pisanje nastavitev iz/v xml file? Namrec, imam okno (JFrame), v katerem vnesem parametre za povezavo z mysql streznikom. To mi dela vse ok. Sedaj bi pa rad nastavitve shranil v xml datoteko in nato iz nje bral le-te. Gledam po javinem APIju in je ziljon classov za xml obdelavo in ne vem, katerega naj uporabim. Mi lahko kdo svetuje ali da "guidelines" za nadaljno delo?

Lp,
M.

Invictus ::

Zakaj pa mora biti XML file? A navadna txt datoteka ni dovolj dobra?
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

KernelPanic ::

Ja je, sam rad bi probal v xml! :D Je pa se wedno 0pcija ordinary file ...

usoban ::

DocumentBuilderFactory, DocumentBuilder in Document.

Tle imas primer, kako se dela z omenjenimi razredi:
http://stackoverflow.com/questions/5325...

Samo da bos za kreiranje namesto DocumentBuilder.parse() uporabil DocumentBuilder.newDocument()

Imas pa se eno opcijo, uporabo SAX parserja, ampak je za uporabo precej drugacen, v postev pa pride ko se ukvarjas z veliki XML datotekami. Ampak ce se ze ucis, ti skodit ne more :)

Zgodovina sprememb…

  • spremenil: usoban ()

KernelPanic ::

Torej, prebral sem dokumentacijo in imam kodo za zapisovanje nastavitev:
            Document doc=this.documentBuilder().newDocument();
            Element root=doc.createElement(NODE_SETTINGS);
            
            doc.appendChild(root);
            
            Element settingHost=doc.createElement(ELEMENT_HOST);
            //settingHost.setNodeValue(settings.dbHost());
            settingHost.setAttribute(ELEMENT_HOST,
                                     settings.dbHost());
            root.appendChild(settingHost);
            
            Element settingDatabaseName=doc.createElement(ELEMENT_DATABASE_NAME);
            //settingDatabaseName.setNodeValue(settings.dbName());
            settingDatabaseName.setAttribute(ELEMENT_DATABASE_NAME,
                                             settings.dbName());
            root.appendChild(settingDatabaseName);
            
            Element settingPort=doc.createElement(ELEMENT_PORT);
            //settingPort.setNodeValue(settings.dbPort());
            settingPort.setAttribute(ELEMENT_PORT,
                                     settings.dbPort());
            root.appendChild(settingPort);
            
            Element settingSSLEnabled=doc.createElement(ELEMENT_SSL_ENABLED);
            //settingSSLEnabled.setNodeValue((settings.sslEnabled())?"true":"false");
            settingSSLEnabled.setAttribute(ELEMENT_SSL_ENABLED,
                                           (settings.sslEnabled())?"true":"false");
            root.appendChild(settingSSLEnabled);
            
            Element settingUsername=doc.createElement(ELEMENT_USERNAME);
            //settingUsername.setNodeValue(settings.dbUsername());
            settingUsername.setAttribute(ELEMENT_USERNAME,
                                         settings.dbUsername());
            root.appendChild(settingUsername);
            
            Element settingPassword=doc.createElement(ELEMENT_PASSWORD);
            //settingPassword.setNodeValue(settings.dbPassword());
            settingPassword.setAttribute(ELEMENT_PASSWORD,
                                         settings.dbPassword());
            root.appendChild(settingPassword);
            
            TransformerFactory tf=TransformerFactory.newInstance();
            Transformer t=tf.newTransformer();
            DOMSource s=new DOMSource(doc);
            StreamResult r=new StreamResult(new File(SETTINGS_FILE_NAME));
            t.transform(s,
                        r);
, ki uspesno sproducira sledeci xml fajl:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<DatabaseSettings>
  <Host Host="192.168.1.20"/>
  <DatabaseName DatabaseName="db_name"/>
  <Port Port="3306"/>
  <SSLEnabled SSLEnabled="false"/>
  <Username Username="username"/>
  <Password Password="password"/>
</DatabaseSettings>
. To dela vse ok, vendar s spodnjo kodo za branje nastavitev pa dobim prazne stringe:
            this.setDocument(this.documentBuilder().parse(new File(SETTINGS_FILE_NAME)));
            
            NodeList settingHost=this.document().getElementsByTagName(ELEMENT_HOST);
            NodeList settingDatabaseName=this.document().getElementsByTagName(ELEMENT_DATABASE_NAME);
            NodeList settingPort=this.document().getElementsByTagName(ELEMENT_PORT);
            NodeList settingSSLEnabled=this.document().getElementsByTagName(ELEMENT_SSL_ENABLED);
            NodeList settingUsername=this.document().getElementsByTagName(ELEMENT_USERNAME);
            NodeList settingPassword=this.document().getElementsByTagName(ELEMENT_PASSWORD);
            
            settings=new CRecordDatabaseSettings(settingHost.item(0).getNodeValue(),
                                                 settingDatabaseName.item(0).getNodeValue(),
                                                 settingPort.item(0).getNodeValue(),
                                                 settingUsername.item(0).getNodeValue(),
                                                 settingPassword.item(0).getNodeValue(),
                                                 (settingSSLEnabled.item(0).getNodeValue()=="true")?true:false);
Zakaj mi prebere prazne nize in ne vrednosti, ki so uspesno bile zapisne v xml fajl?

Lp,
M.

arjan_t ::

ti bereš vsebino elementa zapisuješ pa v atribut

KernelPanic ::

Kako pa naj zapisem vsebino elemento namesto da zapisujem v atribut?

keworkian ::

KernelPanic je izjavil:

Kako pa naj zapisem vsebino elemento namesto da zapisujem v atribut?

Zakomentiran imaš.
Obscenities in B-Flat

KernelPanic ::

aja :D no sam tudi tisto ne dela!!!

keworkian ::

Probaj tole

settingSSLEnabled.getFirstChild().setNodeValue((settings.sslEnabled())?"true":"false");
Obscenities in B-Flat

KernelPanic ::

keworkian je izjavil:

Probaj tole


settingSSLEnabled.getFirstChild().setNodeValue((settings.sslEnabled())?"true":"false");
Aha, hvala, samo sedaj sem preprogamiral v:
    public CRecordDatabaseSettings readSettings() throws Exception
    {
        CRecordDatabaseSettings settings=null;
        
        try
        {
            this.setDocument(this.documentBuilder().parse(new File(SETTINGS_FILE_NAME)));
            
            NodeList settingHost=this.document().getElementsByTagName(ELEMENT_HOST);
            NodeList settingDatabaseName=this.document().getElementsByTagName(ELEMENT_DATABASE_NAME);
            NodeList settingPort=this.document().getElementsByTagName(ELEMENT_PORT);
            NodeList settingSSLEnabled=this.document().getElementsByTagName(ELEMENT_SSL_ENABLED);
            NodeList settingUsername=this.document().getElementsByTagName(ELEMENT_USERNAME);
            NodeList settingPassword=this.document().getElementsByTagName(ELEMENT_PASSWORD);
            
            settings=new CRecordDatabaseSettings(settingHost.item(0).getAttributes().item(0).getNodeValue(),
                                                 settingDatabaseName.item(0).getAttributes().item(0).getNodeValue(),
                                                 settingPort.item(0).getAttributes().item(0).getNodeValue(),
                                                 settingUsername.item(0).getAttributes().item(0).getNodeValue(),
                                                 settingPassword.item(0).getAttributes().item(0).getNodeValue(),
                                                 (settingSSLEnabled.item(0).getAttributes().item(0).getNodeValue()=="true")?true:false);
        }
        catch(Exception ex)
        {
            throw new Exception(ex);
        }   // try-catch
        
        return settings;
    }   // readSettings
in dela lepo!

Spura ::

Jst bi za delo z bazo uporabil MyBatis. Ce pa ze kaj rabim serializacijo/deserializacijo v XML pa JAXB.

WarpedGone ::

Ja je, sam rad bi probal v xml! :D Je pa se wedno 0pcija ordinary file ...

To zato, ker je boš z 'ordinary file' prehitro fertig pa kasneje bo premal butastih problemov?
Zbogom in hvala za vse ribe

KernelPanic ::

WarpedGone je izjavil:

Ja je, sam rad bi probal v xml! :D Je pa se wedno 0pcija ordinary file ...

To zato, ker je boš z 'ordinary file' prehitro fertig pa kasneje bo premal butastih problemov?
HAHAHAHAH, g. D., dobro vprasanje! Tale xml je cista kaprica nadrejenega, nic drugega, saj sam ves, kako je s tem! :D

Spura ::

    catch(Exception ex)
    {
        throw new Exception(ex);
    } 
Wat?

KernelPanic ::

lol, da mi vn vrze exception (nadrejenemu objektu naprimer), vem, da ni najboljsa resitev, bom popravu ...

usoban ::

pol ne rabis try-catch, lahko samo dodas throws Exception v definicijo metode. Kar pa tudi ze imas.

Zgodovina sprememb…

  • spremenil: usoban ()

Spura ::

Stavek ne naredi nic, razen da maskira dejanski exception z novim.

jlpktnst ::

Če ni nujno da uporabiš XML bi priporočal, da uporabiš Properties. Če ni tako pa lahko varno ignoriraš post.

InputStream is = this.getClass().getClassLoader().getResourceAsStream("filename.properties") // datoteka naj bo v root mapi jar arhiva oz pač root mapa glede na classe, lahko imaš pa tudi brez getClassLoader() in ti loada iz istega paketa kot je class

Properties properties = new Properties();
properties.load(is);
properties.getProperty("dbHost"); // vrne string


Property file izgleda preprosto in so po vrsticah
propName=value
#komentarji

Lahko tudi shraniš propertye prek ostalih metod...

http://www.mkyong.com/java/java-propert...

KernelPanic ::

jlpktnst je izjavil:

Če ni nujno da uporabiš XML bi priporočal, da uporabiš Properties. Če ni tako pa lahko varno ignoriraš post.


InputStream is = this.getClass().getClassLoader().getResourceAsStream("filename.properties") // datoteka naj bo v root mapi jar arhiva oz pač root mapa glede na classe, lahko imaš pa tudi brez getClassLoader() in ti loada iz istega paketa kot je class

Properties properties = new Properties();
properties.load(is);
properties.getProperty("dbHost"); // vrne string


Property file izgleda preprosto in so po vrsticah
propName=value
#komentarji

Lahko tudi shraniš propertye prek ostalih metod...

http://www.mkyong.com/java/java-propert...
UU, dobra ideja, hvala, tole bo uporabno za druge stvari ... Hvala za link!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Slo-Tech userscripts

Oddelek: Izdelava spletišč
175174 (2626) jype
»

getElementsByTagName ne dela v Chromu

Oddelek: Programiranje
141680 (1418) win64
»

Prenos podatka iz ene strani na drugo stran

Oddelek: Izdelava spletišč
101330 (1068) HardFu
»

PHP XML->attributes

Oddelek: Programiranje
51390 (1326) keworkian
»

Izpis XML-ja z JS

Oddelek: Izdelava spletišč
81635 (1578) gnomee

Več podobnih tem