programmera.net -> java -> normal     för utskrift      info@programmera.net

JDBC

1. Vad är JDBC?
2. JDBC-drivare
3. Anslutning och Datakälla

1. Vad är JDBC?

JDBC (Java Database Connectivity) är ett API för SQL-anrop mot databaser. Tanken med JDBC är att man kan använda samma kommandon, oavsett vilken databas man använder sig av. Riktigt så bra är det kanske inte, men man kan säga att JDBC är "ganska" databasoberoende. JDBC används vanligtvis på följande sätt:

  1. DriverManager.getConnection("jdbc:db:dbname" ): Det första man måste göra är att ansluta till databasen (connect). Man kan få en anslutning från klassen DriverManager.
  2. Utför SQL : Vi ska nu exekvera SQL-satsen. Om vi ska köra en SELECT-sats kan man använda "executeQuery()". Om det rör sig om någon annan sats kan man använda "executeUpdate()".
  3. Läs resultatet: Ibland producerar SQL-satsen ett resultat. Om det rör sig om en SELECT-sats kan man läsa resultatet genom titta i det "ResultSet" som returneras.
Vi ska snart titta på klassen JDBCTest.java, som är en HelloWorld applikation för JDBC. Nedan visas koden för JDBCTest.java:

// You need to import the java.sql package to use JDBC
import java.sql.*;


public class JDBCTest {

    public static void main ( String[] args ) {
	try{
	    int userId= login("olle","olle");       
	    System.out.println("User id= "+userId);
        }catch(Exception e){
	    e.printStackTrace();
        }
    }

    public static int login(String username, String pw) throws SQLException,ArrayStoreException {

 	System.out.println(" 1. Load the MySQL JDBC driver");
        DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
      
	System.out.println(" 2. Get the connection.");
        Connection conn = DriverManager.getConnection ("jdbc:mysql://localhost/gnomeshop?user=gnomeshop&password=gnomeshop" );
   
        System.out.println(" 3. Create a statement.");
        Statement stmt = conn.createStatement ();
        
        System.out.println(" 4. Do the SQL."); 
        String sql= "SELECT USER_ID FROM USER WHERE IS_BANNED='N' AND USER_NAME='"+username+"' AND PW='"+ pw +"'";

        ResultSet r = stmt.executeQuery ( sql );
        
        int userId=0;
        if (r.next ()){
	    System.out.println(" 5. Success.");
            userId = r.getInt(1);
        }else{
            System.out.println(" 5. Not allowed to login.");
            userId=  -1;
        }
        
        System.out.println(" 6. Close the result set, the statement and connect.");

        r.close();
        stmt.close();
        conn.close();
        
        return userId;
    }
}

2. JDBC-drivare

JDBC är en generell teknik som kan användas för att koppla upp sig mot vilken databas som helst. Det krävs dock att du har en JDBC-drivare (JDBC driver) installerad för den aktuella databasen, alltså, om du vill köra mot MySQL måste du ladda hem och installera en JDBC-drivare specifik för MySQL.

  • En JDBC-drivare kommunicerar med den specifika databasservern på databasens proprietära protokoll. På så sätt slipper programmeraren bekymra sig om hur kommunikationen med databasen EGENTLIGEN går till.
Du kan läsa mer om vilka drivare som finns på: Följande bild illustrerar arkitekturen för JDBC:



Bilden visar hur:
  • Olika databaser kan nås via samma API.
  • Olika JDBC-drivare kan kopplas in och hittas av "Driver Manager".

3. Anslutning och Datakälla

När man ansluter till en databas med DriverManager.getConnection() anger man en datakälla (data source) för att visa vilken databas man vill ansluta till. En datakälla ser ut på följande sätt:

  • jdbc:<underprotokoll>:<datakällans-namn>: Ett exempel är "jdbc:mysql://localhost/gnomeshop?user=gnomeshop&password=gnomeshop"
Delarna har följande innebörd:
  1. jdbc: Visar att vi använder JDBC.
  2. <underprotokoll>: Vilken typ av databas vi ansluter till, t.ex. "mysql".
  3. <datakällans-namn>: Namnet på eller sökvägen till datakällan, t.ex. "//localhost/gnomeshop?user=gnomeshop&password=gnomeshop". Här ansluter vi till en databas "gnomeshop" med användaren "gnomeshop" och lösenordet "gnomeshop".