Лекция№9 Основные способы взаимодействия в технологии клиент-сервер


Драйверді жүктеу / пайдалану үшін



Pdf көрінісі
бет3/9
Дата06.11.2022
өлшемі0,7 Mb.
#47908
1   2   3   4   5   6   7   8   9
Байланысты:
10. Клиент-сервер технологиясындағы өзара әрекеттесудің негізгі әдістері

Драйверді жүктеу / пайдалану үшін 
екі жолмен жүруге болады.
Біріншісі - драйвер атауын бағдарлама кодына енгізу. Бұл
жағдайда біз ДҚБЖ-ны қайта қоспай өзгерте алмаймыз.
Екіншісі - драйверді Java бұйрықтар жолынан (JVM) қосу.
Келесі жолда біз драйверді жүктейміз және ол JDBC-мен бірге
пайдалану үшін автоматты түрде тіркеледі.
Class.forName(“postgresql.Driver”);
Екінші жағдайда драйверді қосу үшін D кілтін қолданамыз.
java –Djdbc.drivers=postgresql.Driver myClass


Біз болашақта басқа ДҚБЖ-ге көшу керек пе, жоқ па, соны ескере
отырып, кез-келген әдісті таңдаймыз. Олай болса, екінші әдіс қолайлы
болады. Әсіресе көпшілікке арналған бағдарламалар жазатындар үшін
ыңғайлы. Ол нені қолдануды таңдағысы келеді.
Ескерту. Егер осы әдістердің бірі таңдалса, бірақ бағдарламаны
орындау кезінде no driver available қатесі пайда болса - бұл
CLASSPATH айнымалысында драйверге жол жоқ дегенді білдіреді.


Деректер базасына қосылу үшін Connection класын пайдаланамыз:
dbh = DriverManager.getConnection(url, user, passwd);
Мұнда url-бұл JDBC қосылымды қайдан, қайда және қалай орнату
керектігін анықтайтын жол. Ол келесі форматқа ие:
jdbc: postgresql: деректер_базасы
jdbc: postgresql: / / сервер / деректер_базасы
jdbc: postgresql: / / сервер: порт / дерекқор
Сервер ДҚБЖ орналасқан сервердің мекен – жайы болса, порт-бұл
байланыс орнатылатын tcp порты және деректер базасы – біз
пайдаланғымыз келетін мәліметтер базасының атауы.


DBI/DBD-де бұл жол мынадай болатынын айта кету керек:
dbi: postgres: dbname=мәліметтер база_; хост=сервер; порт=порт;
Көріп отырғанымыздай, олар өте ұқсас. Postgres / postgresql орнына
mySQL сияқты ДҚБЖ-мен жұмыс істеу үшін кез-келген драйвер тұра
алады.
Нәтижесінде бізде, мысалы:
Connection dbh = DriverManager.getConnection(
"jdbc:postgresql://127.0.0.1/flowers_db","alex","123456");


Қосылымды орнату арқылы біз дерекқорымызға sql сұрауларын
орындай
аламыз.
Мысалы,
Java-да
кодтың
кішкене
бөлігін
қарастырыңыз:
Statement st = dbh.createStatement();
ResultSet rs = st.executeQuery(
"select * from flowers_tbl where (flowers_id in (1,2,3,4,5,6,7,8,9))"
);
while (rs.next())
{
System.out.println(rs.getString(1));
}
rs.close();
st.close();
Бұл мысалдан мәліметтер базасына сұраныстар жіберу үшін
Statement st класының данасын жасау қажет екендігі айқын көрінеді.
Осы сыныптың executeQuery әдісі оған берілген сұранысты дерекқорға
жібереді және жауап ретінде нәтижені ResultSet класы ретінде
қайтарады.


Жалпы жағдайда, егер қандай да бір маңызды себептермен екіншісі
қажет болмаса, Statement класының бір данасын ғана пайдалануға
болады. Ағындармен жұмыс істеу жағдайында жағдай басқаша. Мұнда
әр ағынға бір Statement данасы болуы керек.
Біздің жағдайда RS айнымалысында сақталатын сұрау нәтижесінің
деректерін алудан бұрын next() әдісін орындау керек. Осы әдісті
орындағаннан кейін сұраныс жауабын беретін SQL кестесінің виртуалды
жазбасын алуға болады. Next () әдісі сұраныс бойынша
деректер
алынған болса немесе жауап жинағында әлі де деректер болса, true
қайтарады. Әйтпесе, next () жалған мәнін қайтарады.


Ал, getString () әдісі жол айнымалысын, берілген нөмірі бар жазу
өрісінің мәндерін қайтарады. Біздің жағдайда бұл 1.
Нәтижелерді
қолданғаннан кейін RS айнымалысын жабу керек(), содан кейін оны басқа
сұраныстар үшін қайта пайдалануға болады.
JDBC сипаттамасында мәндерді дәйекті түрде бір рет оқу арқылы
ResultSet-ті қолдануға болады. Бұл дегеніміз, бір рет мәнді алып, оны
қайтадан ала алмайсыз. Ол үшін қосымша айнымалыны қолданған дұрыс.
Көптеген ДҚБЖ драйверлері бұл шектеулерді алып тастауға мүмкіндік
берсе де, драйверге сенуден гөрі көмекші айнымалыны қолдануға кеңес
беріледі. Бұл әр түрлі ДҚБЖ арасындағы ауысымдылыққа шектеу қояды.


ExecuteQuery () әдісі деректер базасынан жауап күткен кезде ғана
ыңғайлы. Жауап қажет емес сұраулар үшін JDBC-де Statement класының
тағы бір әдісі енгізілді. Бұл-executeUpdate (). Осы типтегі сұрауларға
UPDATE, CREATE, INSERT және т. б. кіреді.:
st.executeUpdate("create database flowers");
st.executeUpdate("create table flowers_tbl (id integer, name char(25))");
Жоғарыда біз SQL сұрауларын әдеттегідей орындау үшін JDBC
мүмкіндіктерін қарастырдық. Алайда, JDBC мүмкіндіктері мұнымен
шектелмейді. Олардың көпшілігін JDBC ресми сипаттамасынан білуге
болады. SQL сұрауларын алдын-ала дайындап, содан кейін олардағы
мәндерді ауыстыру мүмкіндігін қарастырайық. Ол үшін Statement орнына
PreparedStatement класының данасын жасау керек:
PreparedStatement ps = dbh.prepareStatement("insert into flowers_tbl
values(?,?)");


Содан кейін setstring() әдісі '?'белгілерін мәндерге ауыстырады:
int a = 1;
String b = "rose";
ps.setString(1,a);
ps.setString(2,b);
Содан кейін біз executeUpdate () әдісін орындаймыз. Алайда, егер біз
Дерекқордың жауабын қайтаруымыз керек болса, онда executeUpdate()
әдісінің орнына біз executeQuery() әдісін параметрлерсіз қолданамыз. Бұл
екі жағдайда да мына түрде орындалады:
ps.executeUpdate()
// немесе
ResultSet rs = ps.exexuteQuery();




Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет