Forum » Programiranje » [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.
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
http://goo.gl/2YuS2x
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 :)
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:
Lp,
M.
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.
keworkian ::
KernelPanic je izjavil:
Kako pa naj zapisem vsebino elemento namesto da zapisujem v atribut?
Zakomentiran imaš.
Obscenities in B-Flat
keworkian ::
Probaj tole
settingSSLEnabled.getFirstChild().setNodeValue((settings.sslEnabled())?"true":"false");
Obscenities in B-Flat
KernelPanic ::
Probaj toleAha, hvala, samo sedaj sem preprogamiral v:
settingSSLEnabled.getFirstChild().setNodeValue((settings.sslEnabled())?"true":"false");
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; } // readSettingsin 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:
HAHAHAHAH, g. D., dobro vprasanje! Tale xml je cista kaprica nadrejenega, nic drugega, saj sam ves, kako je s tem! :DJa 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?
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 ()
jlpktnst ::
Če ni nujno da uporabiš XML bi priporočal, da uporabiš Properties. Če ni tako pa lahko varno ignoriraš post.
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...
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 ::
Če ni nujno da uporabiš XML bi priporočal, da uporabiš Properties. Če ni tako pa lahko varno ignoriraš post.UU, dobra ideja, hvala, tole bo uporabno za druge stvari ... Hvala za link!
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...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Slo-Tech userscriptsOddelek: Izdelava spletišč | 5173 (2625) | jype |
» | getElementsByTagName ne dela v ChromuOddelek: Programiranje | 1678 (1416) | win64 |
» | Prenos podatka iz ene strani na drugo stranOddelek: Izdelava spletišč | 1326 (1064) | HardFu |
» | PHP XML->attributesOddelek: Programiranje | 1385 (1321) | keworkian |
» | Izpis XML-ja z JSOddelek: Izdelava spletišč | 1635 (1578) | gnomee |