Poprzedni program łączył się z bazą i wypisywał wyniki zapytań.

Ten będzie dodawał dane do bazy zapytaniem INSERT. Trzy rodzaje zapytania (INSERT, DELETE i UPDATE) wymagają uruchomiania executeUpdate() zamiast executeQuery()

Scanner podłączony do System.in czyta dane z klawiatury, delimiter to rodzaj separatora między zmiennymi.

Zapytanie SQL jest preparowane – tj. bezpieczne na próby wstrzyknięcia kodu (SQL Injection). Niestety wydłuża to kod przez przymus użycia ciągu funkcji setString() dla każdego parametru (?) zapytania SQL.

insertSQL.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.sql.*;
import java.util.Scanner;

public class insertSQL
{
  public static void main(String[] args)
             throws ClassNotFoundException,SQLException
  {
    String imie, nazwisko, pesel, adres;
    Scanner in = new Scanner(System.in);
    in.useDelimiter(System.getProperty("line.separator")); //ustawienie separatora między wprowadzanymi danymi - ENTER
    System.out.println("Podaj w osobnych liniach kolejno: pesel imię nazwisko adres: ");
    pesel = in.next();
    imie = in.next();
    nazwisko = in.next();
    adres = in.next(); //kilka slow
//////////  baza SQL:
    Class.forName("com.mysql.jdbc.Driver"); //zaladuj sterownik MySQL
    Connection SQL = DriverManager.getConnection("jdbc:mysql://localhost/baza" , "user", "haslo" );
    PreparedStatement zapytanie = SQL.prepareStatement("INSERT INTO klient VALUES( ?, ?, ?, ? );");
    zapytanie.setString(1, pesel);
    zapytanie.setString(2, imie);
    zapytanie.setString(3, nazwisko);
    zapytanie.setString(4, adres);
    zapytanie.executeUpdate();
    zapytanie.close();
    SQL.close();
  }
}