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