Gyakorlati alapok III.
SQL (adatbázis)
Alapszintű JDBC-kapcsolódás és beszúrás preparedStatement függvénnyel
Az egyik előző, Alapszintű kapcsolódás, lekérdezés és beszúrás című fejezetben már többször is említettük a PreparedStatement (dinamikusan paraméterezett utasítás) lehetőségét. Ebben a rövid fejezetben ezen függvény alapszintű működését mutatjuk meg.
Előnye a Statement rutinnal szemben, hogy jóval gyakrabban szerepel éles kódkörnyezetben, mivel gyorsabb futásidejű és biztonságosabb.
Ismételjük meg ide vonatkozó megállapításainkat!
Az SQL-művelet végrehajtásához egy Statement példányt szükséges létrehoznunk, amelyek lehetnek:
-
Statement (statikus utasítás),
-
PreparedStatement (dinamikusan paraméterezett utasítás),
-
CallableStatement (tárolt eljáráshívás),
Emlékezzünk vissza: előzetesen az adatinzertálást egy Statement példány létrehozásával és a következő SQL-utasítással oldottuk meg:
sqlString = "INSERT INTO auto_csop VALUES ('BEYOND','500','20000')";
Ezen továbblépve a PreparedStatement fő jellegzetessége, hogy a paraméterek helyein ? karakter áll...
sqlString = "INSERT INTO auto_csop VALUES (?,?,?)";
...a konkrét paraméterértékeket pedig a függvény setter-metódusai adják át az adatbázisnak:
preparedStatement.setString(1, "BEYOND");
preparedStatement.setInt(2, 500);
preparedStatement.setInt(3, 20000);
A paraméterek között szereplő 1-2-3 számok a lekérdezés egyszerű sorszámai, amely sorrendet szintén kötelező beállítani.
Az inzertálást az executeUpdate() rutin "tölti fel" az adatbázisra.
Nézzük meg a módosított Java-kódot:
import java.sql.*;
public class Main {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DataBase_URL =
"jdbc:mysql://localhost/auto";
static final String USER = "root";
static final String PASSWORD = "";
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try{
Class.forName(JDBC_DRIVER);
System.out.println("Kapcsolodas az
adatbazishoz...");
connection =
DriverManager.getConnection(DataBase_URL,USER,PASSWORD);
String sqlString;
System.out.println("Statement
letesitese...");
sqlString = "INSERT INTO auto_csop
VALUES (?,?,?)";
PreparedStatement preparedStatement =
connection.prepareStatement(sqlString);
preparedStatement.setString(1,
"BEYOND");
preparedStatement.setInt(2, 500);
preparedStatement.setInt(3, 20000);
preparedStatement.executeUpdate();
sqlString = "SELECT auto_csop_nev, km_dij, napi_dij FROM auto_csop";
ResultSet resultSet =
preparedStatement.executeQuery(sqlString);
System.out.println();
while(resultSet.next()){
String
auto_csop_nev = resultSet.getString("auto_csop_nev");
int km_dij =
resultSet.getInt("km_dij");
int napi_dij
= resultSet.getInt("napi_dij");
System.out.print("Autokategoria: " +
auto_csop_nev + " - Km dij: " + km_dij + " - Napi dij: " + napi_dij);
System.out.println();
}
resultSet.close();
statement.close();
connection.close();
}catch(SQLException se){
se.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(statement
!= null)
statement.close();
}catch(SQLException se2){
}
try{
if(connection != null)
connection.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("\nViszlat!");
}
}
Végeredmény:
Kapcsolodas az adatbazishoz...
Statement letesitese...
Autokategoria: NORMAL - Km dij: 80 - Napi dij: 5000
Autokategoria: EXTRA - Km dij: 120 - Napi dij: 7500
Autokategoria: LUXUS - Km dij: 300 - Napi dij: 15000
Autokategoria: BEYOND - Km dij: 500 - Napi dij: 20000
Viszlat!