Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
javab_20230617
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
javab_20230617
Commits
30e8255e
Commit
30e8255e
authored
Jun 18, 2023
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Zapytania z parametrami i SQL injection
parent
cdb57456
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
144 additions
and
0 deletions
+144
-0
OdczytajNiektorych_v1.java
...ven/src/main/java/bazy/na_zywo/OdczytajNiektorych_v1.java
+50
-0
OdczytajNiektorych_v2.java
...ven/src/main/java/bazy/na_zywo/OdczytajNiektorych_v2.java
+48
-0
OdczytajNiektorych_v3.java
...ven/src/main/java/bazy/na_zywo/OdczytajNiektorych_v3.java
+46
-0
No files found.
PC22-BazyDanychMaven/src/main/java/bazy/na_zywo/OdczytajNiektorych_v1.java
0 → 100644
View file @
30e8255e
package
bazy
.
na_zywo
;
import
java.sql.Connection
;
import
java.sql.DriverManager
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
javax.swing.JOptionPane
;
/* Rozwiązanie 1:
Z bazy odczytujemy wszystkie rekordy, a po stronie w Javy, za pomocą equals filtrujemy rekordy i wyświeltlamy tylko te, które spełniają warunek.
Problem: niska wydajność.
Baza musi odczytać wszystkie rekordy z dysku (nawet, gdyby były zdefinioane indeksy),
wszystkie dane są transferowane przez sieć,
wszystkie dane są przeglądane przez Javę, co obciąża aplikację kliencką.
*/
public
class
OdczytajNiektorych_v1
{
public
static
void
main
(
String
[]
args
)
{
String
szukanyJob
=
JOptionPane
.
showInputDialog
(
"Podaj job_id, np. IT_PROG"
);
// Niech program wypisuje dane tylko tych pracowników, którzy mają takie job_id
String
url
=
"jdbc:postgresql://localhost:5432/hr"
;
try
(
Connection
c
=
DriverManager
.
getConnection
(
url
,
"kurs"
,
"abc123"
))
{
System
.
out
.
println
(
"connection: "
+
c
);
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
"SELECT * FROM employees"
))
{
System
.
out
.
println
(
"stmt: "
+
stmt
);
System
.
out
.
println
();
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
String
job
=
rs
.
getString
(
"job_id"
);
if
(
job
.
equals
(
szukanyJob
))
{
System
.
out
.
printf
(
"Pracownik nr %d, %s %s (%s) zarabia %s%n"
,
rs
.
getInt
(
"employee_id"
),
rs
.
getString
(
"first_name"
),
rs
.
getString
(
"last_name"
),
job
,
rs
.
getBigDecimal
(
"salary"
));
}
}
}
}
}
catch
(
SQLException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
}
PC22-BazyDanychMaven/src/main/java/bazy/na_zywo/OdczytajNiektorych_v2.java
0 → 100644
View file @
30e8255e
package
bazy
.
na_zywo
;
import
java.sql.Connection
;
import
java.sql.DriverManager
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
javax.swing.JOptionPane
;
/* Rozwiązanie 2:
* Za pomocą WHERE filtrujemy rekordy po stronie bazy danych, co poprawia wydajność.
*
* Ze względu na to, że zapytaniu budujemy samodzielnie sklejając kawałki tekstu, stwarzamy zagrożenie SQL Injection.
* Przykładowe wartości, które powodują SQL Injection:
* IT_PROG'; DROP TABLE employees CASCADE; SELECT '
* '; UPDATE employees SET salary = 1000 WHERE salary > 10000; UPDATE employees SET salary = 99000 WHERE last_name = 'Olson'; SELECT '
*/
public
class
OdczytajNiektorych_v2
{
public
static
void
main
(
String
[]
args
)
{
String
szukanyJob
=
JOptionPane
.
showInputDialog
(
"Podaj job_id, np. IT_PROG"
);
// Niech program wypisuje dane tylko tych pracowników, którzy mają takie job_id
String
url
=
"jdbc:postgresql://localhost:5432/hr"
;
try
(
Connection
c
=
DriverManager
.
getConnection
(
url
,
"kurs"
,
"abc123"
))
{
System
.
out
.
println
(
"connection: "
+
c
);
String
sql
=
"SELECT * FROM employees WHERE job_id = '"
+
szukanyJob
+
"'"
;
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
sql
))
{
System
.
out
.
println
(
"stmt: "
+
stmt
);
System
.
out
.
println
();
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
System
.
out
.
printf
(
"Pracownik nr %d, %s %s (%s) zarabia %s%n"
,
rs
.
getInt
(
"employee_id"
),
rs
.
getString
(
"first_name"
),
rs
.
getString
(
"last_name"
),
rs
.
getString
(
"job_id"
),
rs
.
getBigDecimal
(
"salary"
));
}
}
}
}
catch
(
SQLException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
}
PC22-BazyDanychMaven/src/main/java/bazy/na_zywo/OdczytajNiektorych_v3.java
0 → 100644
View file @
30e8255e
package
bazy
.
na_zywo
;
import
java.sql.Connection
;
import
java.sql.DriverManager
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
javax.swing.JOptionPane
;
/* Rozwiązanie 3:
* Za pomocą WHERE filtrujemy rekordy po stronie bazy danych, co poprawia wydajność.
* Tutaj prawidłowo używamy parametrów JDBC zapisywanych za pomocą ?
*/
public
class
OdczytajNiektorych_v3
{
public
static
void
main
(
String
[]
args
)
{
String
szukanyJob
=
JOptionPane
.
showInputDialog
(
"Podaj job_id, np. IT_PROG"
);
// Niech program wypisuje dane tylko tych pracowników, którzy mają takie job_id
String
url
=
"jdbc:postgresql://localhost:5432/hr"
;
try
(
Connection
c
=
DriverManager
.
getConnection
(
url
,
"kurs"
,
"abc123"
))
{
System
.
out
.
println
(
"connection: "
+
c
);
String
sql
=
"SELECT * FROM employees WHERE job_id = ?"
;
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
sql
))
{
System
.
out
.
println
(
"stmt: "
+
stmt
);
stmt
.
setString
(
1
,
szukanyJob
);
System
.
out
.
println
(
"stmt: "
+
stmt
);
System
.
out
.
println
();
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
System
.
out
.
printf
(
"Pracownik nr %d, %s %s (%s) zarabia %s%n"
,
rs
.
getInt
(
"employee_id"
),
rs
.
getString
(
"first_name"
),
rs
.
getString
(
"last_name"
),
rs
.
getString
(
"job_id"
),
rs
.
getBigDecimal
(
"salary"
));
}
}
}
}
catch
(
SQLException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment