JDBC
JDBC Links
JDBC Anwendungen
Verbindung aufbauen:
String myURL="jdbc:MyDB:MYTable"
Connection conn=DriverManager.getConnection(myURL);
Connection conn=DriverManager.getConnection(myURL, "MyUserName", "MyPassword");
Andere Variante um Verbindung aufzubauen:
DataSource ds=ic.lookup("java:comp/env/jdbc/myDB");
DataSource ds=(DataSource) org.apache.derby.jdbc.ClientDataSource();
ds.setPort(1234);
ds.setHost("localhost");
ds.setUser("MyUserName");
ds.setPassoword("MyPassword");
Noch eine Variante um eine Verbindung aufzubauen (getestet mit Oracle). Die passende jar-Datei mit dem Thin-Client für den Zugriff auf Oracle Datenbanken gibt es hier: JDBC Client Oracle. Diese jar-Datei muss in das Projekt eingebunden werden.
ods.setUser("mrfoo");
ods.setPassword("supersecret");
ods.setServerName("myoracleserver.example.com");
ods.setDatabaseName("XE");
ods.setPortNumber(1521);
ods.setDriverType("thin");
OracleConnection conn = (OracleConnection)ods.getConnection();
Fehler:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
Der übergebene Datenbankname (hier XE) ist nicht auf dem Server bekannt. Wenn man nicht weiß wie die Datenbank heißt auf dem Server das Kommandozeilentool lsnrctl benutzen und nach Zeilen mit Instance suchen (in folgendem Beispiel heißt die Datenbank tatsächlich XE):
...
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
...
Instance "XE", status READY, has 1 handler(s) for this service...
...
Instance "XE", status READY, has 1 handler(s) for this service...
...
Instance "XE", status READY, has 1 handler(s) for this service...
...
The command completed successfully
Daten auslesen und schreiben
Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet srs=stmt.executeQuery("Select price FROM products WHERE price=11.24");
SQLWarning warn=srs.getWarnings();
if (warn!=null) { warn.getMessage(); warn.getSQLState(); warn.getErrorCode(); ... }
while (srs.next())
{
srs.updateFloat("price", srs.getFloat("Price")+2);
srs.updateRow(); // commit
}
ResultSet folgendes:
afterLast();
next();
previous();
relative(int r);
absoulute(int r); // *
- r=-2 wäre die zweit letzte Zeilen am Ende der Tabelle
Prepared Statements
Jetzt an zu benennender Stelle den zu nennenden Wert einsetzten:
ps.setString(2,'FOO');
ps.executeUpdate();
Das geht auch auch direkt mit einer normalen Query:
Stmt.executeUpdate("Select * FROM ...");
int ExecuteUpdate() liefert die Anzahl der Zeilen zurück die verändert wurden, ResultSet executeQuery() liefert das Ergebnis der Anfrage aus der DB.
Transaktionen
Connection con=null;
try
{
con=DriverManager.getConnection("jdbc:mySubprotocol:myDataSource");
con.setAutoCommit(false); // *
for (int i=...)
{
Statement stmt=con.createStatement();
stmt.executeUpdate("INSERT ...");
con.commit(); // *
}
stmt.close();
con.close();
}
catch (SQLException ex)
{
if (con!=null) con.rollback(); // *
}
Alternativ mit Savepoint
conn.rollback(s1);
Savepoints löschen:
Oder durch normalen commit Informationen speichern (geht savepoint auch verloren)
Stored Procedures Je nach DB etwas anderer Syntax, im pseudocode etwa so:
select name, age from FRIENDS where age > 50 and age < 75";
Jetzt in DB laden:
stmt.executeUpdate(myProcedure);
Und bei Bedarf aufrufen:
ResultSet rs=cs.executeQuery();
SQLite JDBC Java
Zurück zur .
Mit einem SQLite JDBC jar kann man via JDBC auf eine SQLite Datenbank Datei auf dem Computer zugreifen.
SQLite Java JDBC Beispiel
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SQLiteDemo
{
/**
* Init JDBC and return a connection for the SQLite DB your provide
* @param pSQLiteDB Your SQLite DB (complete path to file). Example: C:/temp/mySQLiteDatabase.db
* @return JDBC Connection
* @throws ClassNotFoundException
* @throws SQLException
*/
private Connection intAndConnection(String pSQLiteDB) throws ClassNotFoundException, SQLException
{
// load the sqlite-JDBC driver using the current class loader
Class.forName("org.sqlite.JDBC");
Connection connection = null;
try
{
// create a database connection
connection = DriverManager.getConnection("jdbc:sqlite:"+pSQLiteDB);
}
catch (SQLException e)
{
e.printStackTrace();
throw e;
}
return connection;
}
/**
* Example usage of SQLite JDBC usage
* @throws ClassNotFoundException
* @throws SQLException
*/
private void readData() throws ClassNotFoundException, SQLException
{
Connection connection_File=intAndConnection("C:/temp/SQLiteTest.db");
Connection connection_InMemory=intAndConnection("memory");
Statement statement = connection_File.createStatement();
statement.setQueryTimeout(10);
ResultSet rs = statement.executeQuery("select * from people");
while(rs.next())
{
System.out.println("name = " + rs.getString("name"));
}
}
}