Interaktywny Dostęp do Baz Danych Dostęp do baz danych z API © Michał Turek, AGH Kraków Java JDBC (I) Connector ODBC dla Javy. Przykład użycia (część 1): import java.net.*; import java.util.*; import java.sql.*; ( ... ) private Connection con = null; con = DriverManager.getConnection ("jdbc:odbc:baza_banych", „login”,”haslo”); Java JDBC (I) Przykład (cd): try{ Statement stm = con.createStatement(); ResultSet rs = stm.executeQuery("SELECT * FROM KLIENCI"); int licznik = 0; //licznik zwróconych // rekordów while (rs.next()) licznik++; //przeliczenie zwróconych // rekordów } catch (SQLException e) { } // try con.close(); Użycie ODBC w C++ z biblioteką MFC (I) Deklaracja klasy obsługi (nagłówek .h): class CTowarySet : public CRecordset { CTowarySet(CDatabase* pDatabase = NULL); DECLARE_DYNAMIC(CTowarySet) //{{AFX_FIELD(CTowarySet, CRecordset) long m_TOWAR_ID; CString m_TOWAR_NAZWA; //}}AFX_FIELD //{{AFX_VIRTUAL(CTowarySet) virtual CString GetDefaultConnect(); virtual CString GetDefaultSQL(); virtual void DoFieldExchange(CFieldExchange* pFX); //}}AFX_VIRTUAL }; Użycie ODBC w C++ z biblioteką MFC (II) Definicja istotnych przeciążonych metod klasy obsługi: CTowarySet::CTowarySet(CDatabase* pdb) : CRecordset(pdb) { //{{AFX_FIELD_INIT(CTest2Set) m_TOWAR_ID = 0; m_TOWAR_NAZWA = „”; m_nFields = 2; //}}AFX_FIELD_INIT } CString CTowarySet::GetDefaultConnect() { return _T("ODBC;DSN=hurtownia;UID=sa;PWD="); } Użycie ODBC w C++ z biblioteką MFC (III) Definicja istotnych przeciążonych metod klasy obsługi (cd): CString CTowarySet::GetDefaultSQL() { return _T("[dbo].[TOWARY]"); } void CTowarySet::DoFieldExchange(CFieldExchange* pFX) { //{{AFX_FIELD_MAP(CTowarySet) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Long(pFX, _T("[TOWAR_ID]"), m_TOWAR_ID); RFX_Text (pFX, _T("[TOWAR_NAZWA]"), m_TOWAR_NAZWA); //}}AFX_FIELD_MAP } Użycie ODBC w C++ z biblioteką MFC (IV) Użycie zdefiniowanej klasy obsługi #include "TowarySet.h" CTowarySet m_Towary; try { m_ Towary.Open(); m_Towary.m_strFilter = "[TOWAR_NAZWA] like 'za*'”; m_Towary m_strSort = „[TOWAR_NAZWA]”; m_Towary.Requery(); Użycie ODBC w C++ z biblioteką MFC (V) Użycie zdefiniowanej klasy obsługi (cd): while (!m_Towary.IsEOF()){ m_Towary.Edit(); m_Towary.m_TOWAR_NAZWA =„zmieniona”; m_Towary.Update(); m_Towary.MoveNext(); } m_Towary.Close(); } // try catch( CDBException* e ) { } Dostęp do DAO - C++ z biblioteką MFC (I) DAO to Data Access Objects - interfejs dostępu do procesora baz danych Microsoft Jet Kod wykorzystujący DAO jest bardzo zbliżony do poprzedniego przykładu. Różnice (1): Zastosowano inne nazewnictwo klas MFC, kolejno: CRecordSet -> CDaoRecordSet CDaoDatabase -> CDaoDatabase CFieldExchange-> CDaoFieldExchange Dostęp do DAO - C++ z biblioteką MFC (II) Różnice w kodzie (1): Zamiast GetDefaultConnect() przeciążamy GetDefaultDBName() prowadzącą do pliku z bazą danych: CString CDaoTowarySet::GetDefaultDBName() { return T("data/baza_danych.mdb"); } Dostęp do DAO - C++ z biblioteką MFC (III) Zmiany w obiekcie FieldExchange są następujące: void CDaoTowarySet::DoFieldExchange(CDaoFieldExchange* pFX) { pFX->SetFieldType(CDaoFieldExchange::outputColumn); DFX_Long(pFX, _T("[TOWAR_ID]"), m_TOWAR_ID); DFX_Text (pFX, _T("[TOWAR_NAZWA]"), m_TOWAR_NAZWA); } Dostęp do SQLServer ze skryptu WSH poprzez ADO (I) Const adOpenStatic = 3 Const adLockOptimistic = 3 Set objConnection = CreateObject("ADODB.Connection") Set objRecordSet = CreateObject("ADODB.Recordset") objConnection.Open "Provider=SQLOLEDB;User_ ID=sa;Password=;Initial Catalog=firma;Data Source=localhost” objRecordSet.Open "SELECT * FROM KLIENCI",objConnection,_ adOpenStatic , adLockOptimistic objRecordSet.AddNew objRecordSet("NAZWA") = "ATI” objRecordSet("NIP") = "593-45-65-124” objRecordSet.Update objRecordSet.Close objConnection.Close Dostęp do SQLServer ze skryptu WSH poprzez ADO (II) Const adOpenStatic = 3 Const adLockOptimistic = 3 Set objConnection = CreateObject("ADODB.Connection") Set objRecordSet = CreateObject("ADODB.Recordset") objConnection.Open "Provider=SQLOLEDB;User_ ID=sa;Password=;Initial Catalog=firma;Data Source=localhost" objRecordSet.Open "SELECT * FROM Klienci", _ objConnection, adOpenStatic, adLockOptimistic objRecordSet.MoveFirst Do Until objRecordset.EOF Wscript.Echo objRecordset.Fields.Item(”NAZWA") & _ vbTab & objRecordset.Fields.Item("NIP") objRecordset.MoveNext Loop ASP - ADO Obiekty ADO w przypadku ASP to: Connection - stanowi połączenie z źródłem danych Recordset - zawiera rekordy zwrócone po wykonaniu zapytania na bazie danych Field - zawiera dane z pojedynczej kolumny i informacje na temat tych danych; obiekt Recordset zawiera grupę Fields, która z kolei zawiera wszystkie obiekty Field Error - zawiera rozszerzoną informację o zwracanych błędach Command - dodatkowe komendy szablonowane - do wielokrotnego wykorzystania ASP - Recordset w dostępie do bazy danych Recordset jest grupą obiektów (wierszy), będących grupami obiektów (pól) stanowiącą odpowiednik lub odwzorowanie tabeli albo widoku w bazie danych Może być sprzężony z tabelą lub być jedynie wynikiem wykonania zapytania SQL Metody obiektu Recordset: MoveNext, MoveFirst, MoveLast AddNew Delete Requery i atrybut Filter Update ASP - dostęp do bazy SQLServer poprzez OLE-DB Przykład - wyświetlanie zawartości tabeli • Set oConn = Server.CreateObject("ADODB.Connection") • Set oConn.Open "Provider=SQLOLEDB;User ID=sa;Password=;Initial Catalog=firma;Data Source=localhost” • Set oRs = oConn.Execute ("select * from klienci" ) • While Not oRs.EOF • Response.Write("<p>NAZWA: " & oRs(”NAZWA") & "," & oRs(”NIP")) • oRs.MoveNext • oRs.Close • Set oRs= Nothing ASP - dostęp do bazy SQLServer poprzez ODBC Przykład - wyświetlanie zawartości tabeli • • • • • Set oConn = Server.CreateObject("ADODB.Connection") Set oConn.Open "DSN=firma;User ID=sa;Password=;” Set oRs = oConn.Execute ("select * from klienci" ) While Not oRs.EOF Response.Write("<p>NAZWA: " & oRs(”NAZWA") & "," & oRs(”NIP")) • oRs.MoveNext • oRs.Close • Set oRs= Nothing Dostęp do SQLServer z ASP.NET - założenia Zamiast obiektów ActiveX należy wykorzystać obiekty przestrzeni nazw maszyny wirtulanej .NET Obiekty z przestrzeni nazw (namespace) przechowywane są w tzw. Assemblies Każdą wykorzystywaną przestrzeń nazw należy w skrypcie zaimportować. W przypadku baz danych: <%@ import Namespace="System.Data" %> <%@ import Namespace="System.Data.SqlClient" %> Dostęp z ASP.NET - różnice w wersjach SQL Server Różnice występują tylko na poziomie ConnectionString: Należy odwołać się do innej instancji serwera Należy użyć stosownego trybu autoryzacji (włąsna lub z użyciem kont systemowych) Przykład ConnectionString dla SQL Server 6.0, 7.0: "server=localhost;uid=sa;pwd=;database=firma” Przykład ConnectionString dla SQL Server Express: "Data Source=.\SQLEXPRESS;Initial Catalog=firma;Integrated Security=True;” Dostęp do SQLServer z ASP.NET (I) Przykład (część 1): <%@ Page Language="vb" Debug="true" %> <%@ import Namespace="System.Data" %> <%@ import Namespace="System.Data.SqlClient" %> <script runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim conn As SqlConnection Dim cmd As SqlCommand Dim read As SqlDataReader conn = New SqlConnection( "server=localhost;uid=sa;pwd=;database=firma") conn.Open ‘ wariant SQL Server 6.0,7.0 Dostęp do SQLServer z ASP.NET (II) Przykład (część 2): cmd = New SqlCommand ("select nazwa,nip,miejscowosc from klienci",conn) read = cmd.ExecuteReader grid.DataSource = read grid.DataBind read.Close cmd.Dispose conn.Close End Sub </script> Dostęp do SQLServer z ASP.NET (III) Przykład (część 3): <html> <head> <title>ASP.NET - Test bazy danych</title> </head> <body text="#000000" bgcolor="#ffffff"> <h1>KLIENCI</h1> <asp:DataGrid id="grid" runat="server"></asp:DataGrid> </body> </html> Aplikacje .NET - połączenie z MS SQL Server (I) Sposób łączenia: C#: using System.Data.SqlClient; SqlConnection oSQLConn = new SqlConnection(); oSQLConn.ConnectionString="my connectionstring"; oSQLConn.Open(); VB.NET: Imports System.Data.SqlClient Dim oSQLConn As SqlConnection = New SqlConnection() oSQLConn.ConnectionString="my connectionstring” oSQLConn.Open() Aplikacje .NET - połączenie z MS SQL Server (II) Przykładowe Connection Strings: Dla połączenia do nazwanego źródła danych: "Data Source=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;" Dla Połączenia poprzez IP z dowolnym numerem portu innego serwera: "Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=pubs;User ID=sa;Password=asdasd;" Aplikacje .NET połączenie z Oracle Sposób łączenia: C#:using System.Data.OracleClient; OracleConnection oOracleConn = new OracleConnection(); oOracleConn.ConnectionString = "my connectionstring"; oOracleConn.Open(); VB.NET: Imports System.Data.OracleClient Dim oOracleConn As OracleConnection = New OracleConnection() oOracleConn.ConnectionString = "my connectionstring” oOracleConn.Open() Przykłądowy Connection String: "Data Source=Oracle8i;Integrated Security=yes"; Aplikacje .NET połączenie z mySQL Aby użyć mySQL należy zainstalować mySQL .NET Connector (http://mysql.org) jako global Assembly w .NET Assembly Cache Po instalacji możliwe są odwołania do przestrzeni MySql.Data.MySqlClient Aplikacje .NET połączenie z mySQL Nawiązanie połączenia: Dim myConnection As MySqlConnection Dim myDataAdapter As MySqlDataAdapter Dim myDataSet As DataSet myConnection = New MySqlConnection("server=localhost; user id=root; password=; database=firma; pooling=false;") myDataAdapter = New MySqlDataAdapter(„SELECT * FROM klienci;", myConnection) myDataSet = New Dataset() myDataAdapter.Fill(myDataSet, "mytable") PHP - połączenia z bazami danych Funkcjonalność gwarantująca komunikacją z bazami danych dostępna jest poprzez szereg modułów rozszerzających - indywidualnie dla każdego typu bazy danych. Przed wykorzystaniem modułu należy aktywować (standardowo są one nieaktywne) - dokonując zmian w pliku php.ini. Przykładowo: extension_dir = "c:/php/ext" extension=php_mysql.dll extension=php_oracle.dll extension=php_pgsql.dll Znak komentarza w pliku php.ini to ‘;’ PHP - łączenie z bazami pgSQL Przykład: <?php $conn_string = "host=srv1 port=5432 dbname=test user=usr1 password=pass”; $db = pg_connect ($conn_string); $result = pg_query($db, "SELECT * FROM klienci"); if (!$result) { echo "An error occured.\n";exit;} $arr = pg_fetch_all($result); var_dump($arr); pg_close($pgsql_conn)) ?> PHP - łączenie z bazami ORACLE Przykład: <?php $ora_conn = ora_logon("databaseName@service","pass"); $results = array(); $ora_cur = ora_do($ora_conn, "select * from KLIENCI;"); $numCols = ora_numcols($ora_cur); while (ora_fetch($ora_cur)) { $row = array(); for($i=0; $i<$numCols; $i++) $row[ora_columnname($ora_cur,$i)] = ora_getcolumn($ora_cur,$i); array_push($results,$row); } ora_logoff($ora_conn); ?> PHP - łączenie z bazami mySQL Przykład: <?php $link = mysql_connect("host", "uzytkownik", "haslo") mysql_select_db ("klienci"); $query = "SELECT * FROM tabela"; $result = mysql_query ($query); while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { foreach ($line as $col_value) print " | $col_value "; print "<br>"; } mysql_free_result($result); mysql_close($link); ?>