在第1行的'update,stock_id)值(0,0.0,10018,1,null,0,null,0)附近使用的正确语法

时间:2017-12-28 05:41:58

标签: java mysql spring

尝试将数据插入数据库。每次都显示此错误

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update, stock_id) values (0, 0.0, 10018, 1, null, 0, null, 0)' at line 1

数据库

CREATE TABLE `stock_log` (   
   `stock_id` int(11) NOT NULL AUTO_INCREMENT,   
   `added_employee` int(11) DEFAULT NULL,  
   `added_item` int(11) DEFAULT NULL,  
   `added_quantity` int(11) DEFAULT NULL,   
   `added-price` double DEFAULT NULL,   
   `supplier` int(11) DEFAULT NULL NOT,
   `update` varchar(45) DEFAULT NULL,  
   `update_reason` varchar(45) DEFAULT NULL,
   PRIMARY KEY (`stock_id`), 
   KEY `added_employee_idx` (`added_employee`),   
   KEY `added_item_idx` (`added_item`), 
   KEY `supplier_idx` (`employee`),
   CONSTRAINT `added_employee` FOREIGN KEY (`added_employee`) 
   REFERENCES `employee` (`employee_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
   CONSTRAINT `added_item` FOREIGN KEY (`added_item`) 
   REFERENCES `item_stock` (`item_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
   CONSTRAINT `supplier` FOREIGN KEY (`supplier`) 
   REFERENCES `supplier`(`supplier_id`) ON DELETE NO ACTION ON UPDATE NO ACTION )
   ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

模型

@Entity
@Table(name="stock_log") 
public class Stock {

    @Id
    @Column(name="stock_id")    
    private int stockId;
    @Column(name="added_employee" )     
    private int employee;
    @Column(name="added_item")  
    private int item; 
    @Column(name="added_quantity")  
    private int addQty;
    @Column(name="added_price")     
    private double addedPrice;
    @Column(name="supplier")    
    private int supplier;
    @Column(name="update")  
    private String update;
    @Column(name="update_reason")   
    private String reason;      

    public Stock() {
        super();        // TODO Auto-generated constructor stub     
    }

    public Stock(int stockId, int employee, int item, int addQty, 
               double addedPrice, int supplier, String update, String reason) {
        super();        
        this.stockId = stockId;
        this.employee = employee;
        this.item = item;
        this.addQty = addQty;
        this.addedPrice = addedPrice;
        this.supplier = supplier;
        this.update = update;
        this.reason = reason;   
    } 

    //getter setter

}

服务

public interface StockLogService {

  void saveAStock(Stock addedStock);

} 
@Service 
public class StockLogServiceImp implements StockLogService {

  @Resource     
  private StockLogRepository repository;

  @Override     
  public void saveAStock(Stock addedStock) {
    repository.saveAndFlush(addedStock);
  } 
}

存储库

public interface StockLogRepository extends JpaRepository<Stock, String> {   
}

控制器

@Controller 
public class CommonController {         
    @Autowired
    SupplierService supService;     
    @Autowired  
    StockLogService stockService;   
    Date todayDate = Calendar.getInstance().getTime();

    @RequestMapping(value="testing1")   
    public ModelAndView viewStock1() {      
        ModelAndView moView = new ModelAndView("testing1");             
        //Give empty stock object for ("/add")      
        moView.addObject("newStockCommand", new Stock());           
        return moView;  
    }   
    @RequestMapping(value="testing2")   
    public ModelAndView viewStock2(@ModelAttribute ("newStockCommand") Stock newStockCommand) {         
        ModelAndView moView = new ModelAndView("testing2");
        moView.addObject("addedStock", newStockCommand);
        stockService.saveAStock(newStockCommand);       
        return moView;  
     } 
}

JSP

JSP screenshot

2 个答案:

答案 0 :(得分:1)

update是一个关键字。尝试重命名表定义中的列

update varchar(45) DEFAULT NULL

答案 1 :(得分:0)

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException - 此异常表明语法存在一些问题。您可以直接转到语法以了解问题。列名&#34;更新&#34;是一个关键字,它用于编写查询以更新数据库中的任何记录。所以,这是抛出异常。我们不能在任何RDBMS中使用关键字作为列名。