Java Database Connectivity ( eller JDBC ) API är en uppsättning av standard klasser utformade för att ge ett enda enhetligt gränssnitt för anslutning till alla större databaslösningar . Stöds databaser för JDBC inkluderar MySQL , Oracle , PostgreSQL , DB2 och Microsoft SQL Server . Denna artikel kommer att använda öppen programvara källkod databas , MySQL , för att illustrera JDBC principer . Ladda ner och Länk till MySQL JDBC Driver
JDBC kräver en drivrutin för varje typ av databas det kommer att ansluta till , och produktion och underhåll av den drivrutinen åligger utvecklarna av databasprogram . I fallet med MySQL , är den officiella JDBC drivrutin kallas MySQL :: Connector /J , och kan erhållas fritt från MySQL webbsida . Föraren kommer att vara en JAR -fil , och filen måste vara i Java classpath . De flesta Java IDE : s kommer att hantera detta automatiskt för dig om du lägger föraren filen som ett externt bibliotek .
Alla kommandon som behövs för att interagera med JDBC bör vara tillgängliga genom att importera java.sql . * På toppen av din klass fil . Addera registrera drivrutinen
Detta kräver inte att du skickar en anmälningsblankett till Sun. Detta är att berätta Java vilken databas drivrutin du ska använda med JDBC för följande frågor . Du registrerar föraren med följande kommando :
Driver d = ( Driver ) Class.forName ( " com.mysql.jdbc.Driver " ) newInstance ( ) ;
innehåll . förarens namn ( com.mysql.jdbc.Driver ) gäller endast för MySQL . Den exakta strängen behövs för andra databasdrivrutiner ( t.ex. PostgresSQL ) kommer att vara annorlunda .
P Om du får ett java.lang.ClassNotFoundException , detta troligen innebär att drivrutinen inte är på klassen vägen .
Addera upprätta anslutning
förbindelser upprättas med följande kommando :
Anslutning conn = DriverManager.getConnection ( URL , användarnamn , lösenord ) ;
Om databasen finns på samma maskin som Java-klient komma åt den , sedan " localhost " kommer att fungera som en adress i de flesta fall . Om portnumret för databasen är inte standard för den databasen paketet , då det kan läggas till URL med ett kolon . Är URL identifierare
Ett viktigt tillägg . Detta kommer att förändras för olika databasservrar . Men för MySQL , skulle följande gälla : String url = " jdbc : mysql ://localhost : 8080 " ;
Om en anslutning misslyckas av någon anledning , kommer en SQLException kastas , och den kommer att innehålla ett felmeddelande med mer information som du kan skriva ut till System.err för felsökning .
Databas Tidsgränser
p Det är viktigt att komma ihåg att , som för att skapa anslutningen , en aktiv anslutning mellan klient och server . Men många databaser har mycket snäva tid - out krav . Det är viktigt att en anslutning inte upprättas förrän frågor är redo . Hellre än att upprätta en anslutning och sedan vänta på användarens input att veta vilka frågor att köra , är det bättre att skapa ett test -anslutning , koppla ur och sedan en gång frågor finns tillgängliga .
Kör fråga och Fetch Results
att utfärda en fråga , måste du skapa ett uttalande med en aktiv anslutning till databasen
uttalande s = conn.createStatement ( ) , . s.executeQuery ( " SELECT * FROM " + tableName ) ;
att få fram resultaten , kan du köra direkt :
ResultSet rs = s.getResultSet ( ) ; Addera ResultSets
en viktig sak att veta om ResultSets är att de drar data från servern en rad i taget . Ovanstående kommando initierar bara ett ResultSet objekt och får lite metadata om objektet ( viktigast kolumnnamn och typer ) . Det faktiskt inte hämta några data . Data måste dras ut ur ett ResultSet och förvaras på en annan plats innan anslutningen avbryts , vanligen med en ögla ser något liknande :
LinkedList uppgifter = ny LinkedList ( ) , medan ( rs.next ( ) ) { data.add ( rs.getString ( 1 ) ) , //hämta alla data från den första kolumnen }
nära förbindelser
Merparten av tiden , den föraren kommer att hantera utgående anslutningar själv . Däremot kan det bidra till att förebygga problem senare om du alltid explicit stänger din ResultSet , Statement och anslutningar när du är klar med dem
rs.close ( ) , . S.close ( ) ; conn.close ( ) ; Addera