Sieci komputerowe

advertisement
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);
?>
Download