mirror of
https://github.com/guilhermewerner/java-spark
synced 2025-06-15 11:44:19 +00:00
Setup postgresql connection
This commit is contained in:
5
pom.xml
5
pom.xml
@ -14,5 +14,10 @@
|
||||
<artifactId>slf4j-simple</artifactId>
|
||||
<version>1.7.21</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<version>42.2.16</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@ -1,123 +1,129 @@
|
||||
package dao;
|
||||
|
||||
import model.Produto;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.sql.*;
|
||||
|
||||
public class ProdutoDAO {
|
||||
private List<Produto> produtos;
|
||||
private int maxId = 0;
|
||||
private Connection conexao;
|
||||
|
||||
private File file;
|
||||
private FileOutputStream fos;
|
||||
private ObjectOutputStream outputFile;
|
||||
public ProdutoDAO() throws Exception {
|
||||
String driverName = "org.postgresql.Driver";
|
||||
|
||||
public int getMaxId() {
|
||||
return maxId;
|
||||
String server = "localhost";
|
||||
int porta = 5432;
|
||||
|
||||
String username = "postgres";
|
||||
String password = "1234";
|
||||
|
||||
String mydatabase = "postgres";
|
||||
|
||||
String url = "jdbc:postgresql://" + server + ":" + porta + "/" + mydatabase;
|
||||
Class.forName(driverName);
|
||||
|
||||
conexao = DriverManager.getConnection(url, username, password);
|
||||
}
|
||||
|
||||
public ProdutoDAO(String filename) throws IOException {
|
||||
file = new File(filename);
|
||||
produtos = new ArrayList<Produto>();
|
||||
if (file.exists()) {
|
||||
readFromFile();
|
||||
}
|
||||
|
||||
public int getRandomId() {
|
||||
return (int) (Math.random() * (1000));
|
||||
}
|
||||
|
||||
public void add(Produto produto) {
|
||||
public boolean close() {
|
||||
boolean status = false;
|
||||
|
||||
try {
|
||||
produtos.add(produto);
|
||||
this.maxId = (produto.getId() > this.maxId) ? produto.getId() : this.maxId;
|
||||
this.saveToFile();
|
||||
} catch (Exception e) {
|
||||
System.out.println("ERRO ao gravar o produto '" + produto.getDescricao() + "' no disco!");
|
||||
conexao.close();
|
||||
status = true;
|
||||
} catch (SQLException e) {
|
||||
System.err.println(e.getMessage());
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
public Produto get(int id) {
|
||||
for (Produto produto : produtos) {
|
||||
if (id == produto.getId()) {
|
||||
return produto;
|
||||
public boolean inserirProduto(Produto produto) {
|
||||
boolean status = false;
|
||||
|
||||
try {
|
||||
Statement st = conexao.createStatement();
|
||||
st.executeUpdate("INSERT INTO produto (id, descricao, preco, quantidade, dataFabricacao, dataValidade) "
|
||||
+ "VALUES (" + produto.getId() + ", '" + produto.getDescricao() + "', '" + produto.getPreco()
|
||||
+ "', '" + produto.getQuant() + "', '" + produto.getDataFabricacao() + "', '"
|
||||
+ produto.getDataValidade() + "');");
|
||||
st.close();
|
||||
status = true;
|
||||
} catch (SQLException u) {
|
||||
throw new RuntimeException(u);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
public boolean atualizarProduto(Produto produto) {
|
||||
boolean status = false;
|
||||
try {
|
||||
Statement st = conexao.createStatement();
|
||||
String sql = "UPDATE produto SET descricao = '" + produto.getDescricao() + "', preco = '"
|
||||
+ produto.getPreco() + "', quantidade = '" + produto.getQuant() + "', dataFabricacao = '"
|
||||
+ produto.getDataFabricacao() + "', dataValidade = '" + produto.getDataValidade() + "'"
|
||||
+ " WHERE id = " + produto.getId();
|
||||
st.executeUpdate(sql);
|
||||
st.close();
|
||||
status = true;
|
||||
} catch (SQLException u) {
|
||||
throw new RuntimeException(u);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
public boolean excluirProduto(int id) {
|
||||
boolean status = false;
|
||||
try {
|
||||
Statement st = conexao.createStatement();
|
||||
st.executeUpdate("DELETE FROM produto WHERE id = " + id);
|
||||
st.close();
|
||||
status = true;
|
||||
} catch (SQLException u) {
|
||||
throw new RuntimeException(u);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
public Produto[] getProdutos() {
|
||||
Produto[] produtos = null;
|
||||
|
||||
try {
|
||||
Statement st = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
|
||||
ResultSet rs = st.executeQuery("SELECT * FROM produto");
|
||||
if (rs.next()) {
|
||||
rs.last();
|
||||
produtos = new Produto[rs.getRow()];
|
||||
rs.beforeFirst();
|
||||
|
||||
for (int i = 0; rs.next(); i++) {
|
||||
produtos[i] = new Produto(rs.getInt("id"), rs.getString("descricao"), rs.getFloat("preco"),
|
||||
rs.getInt("quantidade")/* , rs.getDate("dataFabricacao"), rs.getDate("dataFabricacao") */);
|
||||
}
|
||||
}
|
||||
st.close();
|
||||
} catch (Exception e) {
|
||||
System.err.println(e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void update(Produto p) {
|
||||
int index = produtos.indexOf(p);
|
||||
if (index != -1) {
|
||||
produtos.set(index, p);
|
||||
this.saveToFile();
|
||||
}
|
||||
}
|
||||
|
||||
public void remove(Produto p) {
|
||||
int index = produtos.indexOf(p);
|
||||
if (index != -1) {
|
||||
produtos.remove(index);
|
||||
this.saveToFile();
|
||||
}
|
||||
}
|
||||
|
||||
public List<Produto> getAll() {
|
||||
return produtos;
|
||||
}
|
||||
|
||||
private List<Produto> readFromFile() {
|
||||
produtos.clear();
|
||||
public Produto getProduto(int id) {
|
||||
Produto produto = null;
|
||||
try (FileInputStream fis = new FileInputStream(file);
|
||||
ObjectInputStream inputFile = new ObjectInputStream(fis)) {
|
||||
|
||||
while (fis.available() > 0) {
|
||||
produto = (Produto) inputFile.readObject();
|
||||
produtos.add(produto);
|
||||
maxId = (produto.getId() > maxId) ? produto.getId() : maxId;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("ERRO ao gravar produto no disco!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
return produtos;
|
||||
}
|
||||
|
||||
private void saveToFile() {
|
||||
try {
|
||||
fos = new FileOutputStream(file, false);
|
||||
outputFile = new ObjectOutputStream(fos);
|
||||
|
||||
for (Produto produto : produtos) {
|
||||
outputFile.writeObject(produto);
|
||||
Statement st = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
|
||||
ResultSet rs = st.executeQuery("SELECT * FROM produto WHERE produto.id = " + id);
|
||||
if (rs.first()) {
|
||||
produto = new Produto(rs.getInt("id"), rs.getString("descricao"), rs.getFloat("preco"),
|
||||
rs.getInt("quantidade")/* , rs.getDate("dataFabricacao"), rs.getDate("dataFabricacao") */);
|
||||
}
|
||||
outputFile.flush();
|
||||
this.close();
|
||||
} catch (Exception e) {
|
||||
System.out.println("ERRO ao gravar produto no disco!");
|
||||
e.printStackTrace();
|
||||
st.close();
|
||||
} catch (SQLException u) {
|
||||
throw new RuntimeException(u);
|
||||
}
|
||||
}
|
||||
|
||||
private void close() throws IOException {
|
||||
outputFile.close();
|
||||
fos.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() throws Throwable {
|
||||
try {
|
||||
this.saveToFile();
|
||||
this.close();
|
||||
} catch (Exception e) {
|
||||
System.out.println("ERRO ao salvar a base de dados no disco!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
return produto;
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,15 @@ public class Produto implements Serializable {
|
||||
dataValidade = LocalDate.now().plusMonths(6); // o default é uma validade de 6 meses.
|
||||
}
|
||||
|
||||
public Produto(int id, String descricao, float preco, int quantidade) {
|
||||
setId(id);
|
||||
setDescricao(descricao);
|
||||
setPreco(preco);
|
||||
setQuant(quantidade);
|
||||
dataFabricacao = LocalDateTime.now();
|
||||
dataValidade = LocalDate.now().plusMonths(6); // o default é uma validade de 6 meses.
|
||||
}
|
||||
|
||||
public Produto(int id, String descricao, float preco, int quantidade, LocalDateTime fabricacao, LocalDate v) {
|
||||
setId(id);
|
||||
setDescricao(descricao);
|
||||
|
@ -1,9 +1,7 @@
|
||||
package service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import dao.ProdutoDAO;
|
||||
import model.Produto;
|
||||
import spark.Request;
|
||||
@ -14,9 +12,9 @@ public class ProdutoService {
|
||||
|
||||
public ProdutoService() {
|
||||
try {
|
||||
produtoDAO = new ProdutoDAO("produto.dat");
|
||||
} catch (IOException e) {
|
||||
System.out.println(e.getMessage());
|
||||
produtoDAO = new ProdutoDAO();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@ -24,14 +22,16 @@ public class ProdutoService {
|
||||
String descricao = request.queryParams("descricao");
|
||||
float preco = Float.parseFloat(request.queryParams("preco"));
|
||||
int quantidade = Integer.parseInt(request.queryParams("quantidade"));
|
||||
LocalDateTime dataFabricacao = LocalDateTime.parse(request.queryParams("dataFabricacao"));
|
||||
LocalDate dataValidade = LocalDate.parse(request.queryParams("dataValidade"));
|
||||
// LocalDateTime dataFabricacao =
|
||||
// LocalDateTime.parse(request.queryParams("dataFabricacao"));
|
||||
// LocalDate dataValidade =
|
||||
// LocalDate.parse(request.queryParams("dataValidade"));
|
||||
|
||||
int id = produtoDAO.getMaxId() + 1;
|
||||
int id = produtoDAO.getRandomId();
|
||||
|
||||
Produto produto = new Produto(id, descricao, preco, quantidade, dataFabricacao, dataValidade);
|
||||
Produto produto = new Produto(id, descricao, preco, quantidade/* , dataFabricacao, dataValidade */);
|
||||
|
||||
produtoDAO.add(produto);
|
||||
produtoDAO.inserirProduto(produto);
|
||||
|
||||
response.status(201); // 201 Created
|
||||
return id;
|
||||
@ -40,7 +40,7 @@ public class ProdutoService {
|
||||
public Object get(Request request, Response response) {
|
||||
int id = Integer.parseInt(request.params(":id"));
|
||||
|
||||
Produto produto = (Produto) produtoDAO.get(id);
|
||||
Produto produto = (Produto) produtoDAO.getProduto(id);
|
||||
|
||||
if (produto != null) {
|
||||
response.header("Content-Type", "application/xml");
|
||||
@ -60,7 +60,7 @@ public class ProdutoService {
|
||||
public Object update(Request request, Response response) {
|
||||
int id = Integer.parseInt(request.params(":id"));
|
||||
|
||||
Produto produto = (Produto) produtoDAO.get(id);
|
||||
Produto produto = (Produto) produtoDAO.getProduto(id);
|
||||
|
||||
if (produto != null) {
|
||||
produto.setDescricao(request.queryParams("descricao"));
|
||||
@ -69,7 +69,7 @@ public class ProdutoService {
|
||||
produto.setDataFabricacao(LocalDateTime.parse(request.queryParams("dataFabricacao")));
|
||||
produto.setDataValidade(LocalDate.parse(request.queryParams("dataValidade")));
|
||||
|
||||
produtoDAO.update(produto);
|
||||
produtoDAO.atualizarProduto(produto);
|
||||
|
||||
return id;
|
||||
} else {
|
||||
@ -82,11 +82,11 @@ public class ProdutoService {
|
||||
public Object remove(Request request, Response response) {
|
||||
int id = Integer.parseInt(request.params(":id"));
|
||||
|
||||
Produto produto = (Produto) produtoDAO.get(id);
|
||||
Produto produto = (Produto) produtoDAO.getProduto(id);
|
||||
|
||||
if (produto != null) {
|
||||
|
||||
produtoDAO.remove(produto);
|
||||
produtoDAO.excluirProduto(id);
|
||||
|
||||
response.status(200); // success
|
||||
return id;
|
||||
@ -98,7 +98,7 @@ public class ProdutoService {
|
||||
|
||||
public Object getAll(Request request, Response response) {
|
||||
StringBuffer returnValue = new StringBuffer("<produtos type=\"array\">");
|
||||
for (Produto produto : produtoDAO.getAll()) {
|
||||
for (Produto produto : produtoDAO.getProdutos()) {
|
||||
returnValue.append("\n<produto>\n" + "\t<id>" + produto.getId() + "</id>\n" + "\t<descricao>"
|
||||
+ produto.getDescricao() + "</descricao>\n" + "\t<preco>" + produto.getPreco() + "</preco>\n"
|
||||
+ "\t<quantidade>" + produto.getQuant() + "</quantidade>\n" + "\t<fabricacao>"
|
||||
|
Reference in New Issue
Block a user