I am writing a simple CRUD API using spring boot. I just connected to h2 console. The ‘schema.sql’ file loads correctly and data is inserted from the ‘data.sql’ file in the TRANSACTION table. But after insertion I can not get the JSON from the page. It says bad sql grammar error. I don’t know what should I do. Thanks in advance.
Here is my code for the TranscationController.java
package com.zsgs.expenz.transaction;
import jakarta.validation.Valid;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/api/transactions")
public class TransactionController {
private final TransactionRepository transactionRepository;
public TransactionController(TransactionRepository transactionRepository) {
this.transactionRepository = transactionRepository;
}
@GetMapping("")
List<Transaction> findAll() {
return transactionRepository.findAll();
}
}
Here is my TransactionRepository.java
package com.zsgs.expenz.transaction;
import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.simple.JdbcClient;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@Repository
public class TransactionRepository {
private static final Logger log = LoggerFactory.getLogger(TransactionRepository.class);
private final JdbcClient jdbcClient;
public TransactionRepository(JdbcClient jdbcClient) {
this.jdbcClient = jdbcClient;
}
public List<Transaction> findAll() {
return jdbcClient.sql("SELECT * FROM TRANSACTION").query(Transaction.class).list();
}
}
Here is my schema.sql file
CREATE TABLE IF NOT EXISTS TRANSACTION (
id INT NOT NULL,
transaction_name varchar(250) NOT NULL,
t_date timestamp NOT NULL,
cost INT NOT NULL,
transaction_type varchar(15) NOT NULL,
PRIMARY KEY (id)
);
data.sql file
INSERT INTO TRANSACTION (id, transaction_name, t_date, cost, transaction_type)
VALUES (1, 'Grocery', '2024-06-07 06:00:00', 400, 'EXPENDITURE');
Transaction.java file
package com.zsgs.expenz.transaction;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Positive;
import java.util.Date;
public record Transaction(
Integer id,
@NotEmpty
String transactionName,
Date tDate,
@Positive
Integer cost,
TransactionType type
) {}