Java 如何从Sql插入和获取数据

Java 如何从Sql插入和获取数据,java,spring-boot,vaadin,vaadin-flow,Java,Spring Boot,Vaadin,Vaadin Flow,我试图将我的Todo formm添加到sql中,但我得到一个空错误, 我用打印输出进行了测试,值在那里。 我的更新网格也没有在网格中显示任何内容,我在服务中测试了命令,似乎显示了,但网格没有显示我。 你能在这方面帮助我吗?非常感谢。 我的代码是: Todo.java package com.packagename.myapp.spring; import java.time.LocalDate; import java.util.Date; public class Todo {

我试图将我的Todo formm添加到sql中,但我得到一个空错误, 我用打印输出进行了测试,值在那里。 我的更新网格也没有在网格中显示任何内容,我在服务中测试了命令,似乎显示了,但网格没有显示我。 你能在这方面帮助我吗?非常感谢。 我的代码是: Todo.java

package com.packagename.myapp.spring;


import java.time.LocalDate;
import java.util.Date;

public class Todo {
    private  long userID;
    private String taskstatus;
    private long ID;
    private long customerID;
    private long descriptionID;
    private String taskStatus;
    private String Subject;
    private LocalDate Dudate;

    public Todo() // Def Ctor
    {

    }
 public Todo (String taskstatus,LocalDate dudate,String subject,long customerid){

     this.customerID= customerid;
     this.Subject = subject;
     this.Dudate = dudate;
     this.taskstatus = taskstatus;
 }
    public Todo(long id, long customerid, long descriptionid, String task) { // Ctor all
        this.ID=id;
        this.customerID=customerid;
        this.descriptionID=descriptionid;
        this.taskStatus=task;

    }

    public long getID() {
        return ID;
    }

    public void setID(long ID) {
        this.ID = ID;
    }

    public long getUserID() {
        return userID;
    }

    public void setUserID(long userID) {
        this.userID = userID;
    }

    public long getDescriptionID() {
        return descriptionID;
    }

    public void setDescriptionID(long descriptionID) {
        this.descriptionID = descriptionID;
    }

    public String getTaskStatus() {
        return taskStatus;
    }

    public void setTaskStatus(String taskStatus) {
        this.taskStatus = taskStatus;
    }

    public String getSubject() {
        return Subject;
    }

    public void setSubject(String subject) {
        this.Subject = subject;
    }

    public LocalDate getDudate() {
        return Dudate;
    }

    public void setDudate(LocalDate dudate) {
        this.Dudate = dudate;
    }

    public long getCustomerID() {
        return customerID;
    }

    public void setCustomerID(long customerID) {
        this.customerID = customerID;
    }
}

@Route(value = NAV,layout = MainView.class)
public class TodoView extends Composite<Div> {
    public static final String NAV = "todo";
    public Todo todo = new Todo();
    private Grid<Todo> todogrid = new Grid<>(Todo.class);
    private Binder<Todo> binder = new Binder<>(Todo.class);
    private TodoService service ;
    private  Button addButton = new Button("Save", e -> {
        try {
            binder.writeBean(todo);
           // System.out.println(todo.getCustomerID());
          //  System.out.println(todo.getTaskStatus());
          //  System.out.println(todo.getDudate());
          //  System.out.println(todo.getSubject());
            saveTodo();
           // updateGrid();
            binder.readBean(new Todo());
        } catch (ValidationException ex) {
            ex.printStackTrace();
        }
    });

    public TodoView(){

        //Layouts//
        HorizontalLayout todofields = new HorizontalLayout();
        VerticalLayout todoList = new VerticalLayout();
        HorizontalLayout subjects = new HorizontalLayout();
        todogrid.addThemeNames("no-border","no-row-borders","row-strips");
        GridMultiSelectionModel<Todo> selectionModel = (GridMultiSelectionModel<Todo>) todogrid
                .setSelectionMode(Grid.SelectionMode.MULTI);
        selectionModel.selectAll();


        //Layouts//



        //Fields//
        ComboBox<String> taskstatus = new ComboBox<>("TaskStatus:");
        taskstatus.setItems("Completed","OnProgress","Cancelled");
        TextField subject = new TextField();
        subject.setLabel("נושא:");
        TextField customerid = new TextField();
        customerid.setLabel("שם הלקוח:");
        DatePicker dudate = new DatePicker();
        dudate.setClearButtonVisible(true);
        dudate.setLabel("תאריך סיום:");
        //Binder//
        binder.forField(subject).bind(Todo::getSubject,Todo::setSubject);
        binder.forField(dudate).bind(Todo::getDudate,Todo::setDudate);
        binder.forField(taskstatus).bind(Todo::getTaskStatus,Todo::setTaskStatus);
        binder.forField(customerid).withConverter(new StringToLongConverter(""))
                .bind(Todo::getCustomerID,Todo::setCustomerID);
        //Binder//


        addButton.addClickShortcut(Key.ENTER);
        addButton.setThemeName("primary");


        //Fields//






        todofields.add(subject,customerid,dudate,taskstatus,addButton);
        todofields.setDefaultVerticalComponentAlignment(FlexComponent.Alignment.BASELINE);
        todoList.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.BASELINE);
        todofields.getElement().getStyle().set("margin-left","auto");
        getContent().add(todofields,subjects,todoList,todogrid);
        Direction.set(Direction.RTL);

    }

    private void saveTodo() {

        service.update(todo);
    }

    private void updategrid() {
        List<Todo> todo = service.findAll();
        todogrid.setItems(todo);
    }

}


TodoView.java

package com.packagename.myapp.spring;


import java.time.LocalDate;
import java.util.Date;

public class Todo {
    private  long userID;
    private String taskstatus;
    private long ID;
    private long customerID;
    private long descriptionID;
    private String taskStatus;
    private String Subject;
    private LocalDate Dudate;

    public Todo() // Def Ctor
    {

    }
 public Todo (String taskstatus,LocalDate dudate,String subject,long customerid){

     this.customerID= customerid;
     this.Subject = subject;
     this.Dudate = dudate;
     this.taskstatus = taskstatus;
 }
    public Todo(long id, long customerid, long descriptionid, String task) { // Ctor all
        this.ID=id;
        this.customerID=customerid;
        this.descriptionID=descriptionid;
        this.taskStatus=task;

    }

    public long getID() {
        return ID;
    }

    public void setID(long ID) {
        this.ID = ID;
    }

    public long getUserID() {
        return userID;
    }

    public void setUserID(long userID) {
        this.userID = userID;
    }

    public long getDescriptionID() {
        return descriptionID;
    }

    public void setDescriptionID(long descriptionID) {
        this.descriptionID = descriptionID;
    }

    public String getTaskStatus() {
        return taskStatus;
    }

    public void setTaskStatus(String taskStatus) {
        this.taskStatus = taskStatus;
    }

    public String getSubject() {
        return Subject;
    }

    public void setSubject(String subject) {
        this.Subject = subject;
    }

    public LocalDate getDudate() {
        return Dudate;
    }

    public void setDudate(LocalDate dudate) {
        this.Dudate = dudate;
    }

    public long getCustomerID() {
        return customerID;
    }

    public void setCustomerID(long customerID) {
        this.customerID = customerID;
    }
}

@Route(value = NAV,layout = MainView.class)
public class TodoView extends Composite<Div> {
    public static final String NAV = "todo";
    public Todo todo = new Todo();
    private Grid<Todo> todogrid = new Grid<>(Todo.class);
    private Binder<Todo> binder = new Binder<>(Todo.class);
    private TodoService service ;
    private  Button addButton = new Button("Save", e -> {
        try {
            binder.writeBean(todo);
           // System.out.println(todo.getCustomerID());
          //  System.out.println(todo.getTaskStatus());
          //  System.out.println(todo.getDudate());
          //  System.out.println(todo.getSubject());
            saveTodo();
           // updateGrid();
            binder.readBean(new Todo());
        } catch (ValidationException ex) {
            ex.printStackTrace();
        }
    });

    public TodoView(){

        //Layouts//
        HorizontalLayout todofields = new HorizontalLayout();
        VerticalLayout todoList = new VerticalLayout();
        HorizontalLayout subjects = new HorizontalLayout();
        todogrid.addThemeNames("no-border","no-row-borders","row-strips");
        GridMultiSelectionModel<Todo> selectionModel = (GridMultiSelectionModel<Todo>) todogrid
                .setSelectionMode(Grid.SelectionMode.MULTI);
        selectionModel.selectAll();


        //Layouts//



        //Fields//
        ComboBox<String> taskstatus = new ComboBox<>("TaskStatus:");
        taskstatus.setItems("Completed","OnProgress","Cancelled");
        TextField subject = new TextField();
        subject.setLabel("נושא:");
        TextField customerid = new TextField();
        customerid.setLabel("שם הלקוח:");
        DatePicker dudate = new DatePicker();
        dudate.setClearButtonVisible(true);
        dudate.setLabel("תאריך סיום:");
        //Binder//
        binder.forField(subject).bind(Todo::getSubject,Todo::setSubject);
        binder.forField(dudate).bind(Todo::getDudate,Todo::setDudate);
        binder.forField(taskstatus).bind(Todo::getTaskStatus,Todo::setTaskStatus);
        binder.forField(customerid).withConverter(new StringToLongConverter(""))
                .bind(Todo::getCustomerID,Todo::setCustomerID);
        //Binder//


        addButton.addClickShortcut(Key.ENTER);
        addButton.setThemeName("primary");


        //Fields//






        todofields.add(subject,customerid,dudate,taskstatus,addButton);
        todofields.setDefaultVerticalComponentAlignment(FlexComponent.Alignment.BASELINE);
        todoList.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.BASELINE);
        todofields.getElement().getStyle().set("margin-left","auto");
        getContent().add(todofields,subjects,todoList,todogrid);
        Direction.set(Direction.RTL);

    }

    private void saveTodo() {

        service.update(todo);
    }

    private void updategrid() {
        List<Todo> todo = service.findAll();
        todogrid.setItems(todo);
    }

}



正如在评论中已经注意到的,您没有注入或初始化您的服务:

这是
TodoView.java
中的唯一一行,这里的服务为空

private-TodoService服务;
这就是为什么你会得到NPE的原因

private void saveTodo(){
服务更新(todo);
}
因为您正在对null调用方法

因此,一个快速的解决方案应该是添加

@Autowired
私人TodoService服务;
因为您已经在使用spring了


本文中有一个类似的例子:

为什么在clicklistener按钮中注释掉
updateGrid()
?如果您有错误消息,请将它们添加到问题中(位置、堆栈跟踪等).你可以添加stacktrace吗?你可以提供一个简短的说明如何重新创建你的错误吗?@KasparScherrer我只是检查一下。我删除了评论,它不起作用。meaby这和我的Todoservice有关?我没有在我的TodoView上使用它?@pikkuez我将数据放在表单上,然后单击“添加”按钮,我使用writebean创建了我的todo对象。然后使用saveTodo方法将数据插入SQL
java.lang.NullPointerException
    at com.packagename.ui.views.TodoView.saveTodo(TodoView.java:119)
    at com.packagename.ui.views.TodoView.lambda$new$259424d1$1(TodoView.java:52)
    at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:205)
    at com.vaadin.flow.component.ComponentEventBus.handleDomEvent(ComponentEventBus.java:373)
    at com.vaadin.flow.component.ComponentEventBus.lambda$addDomTrigger$dd1b7957$1(ComponentEventBus.java:264)
    at com.vaadin.flow.internal.nodefeature.ElementListenerMap.lambda$fireEvent$2(ElementListenerMap.java:441)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
    at com.vaadin.flow.internal.nodefeature.ElementListenerMap.fireEvent(ElementListenerMap.java:441)
    at com.vaadin.flow.server.communication.rpc.EventRpcHandler.handleNode(EventRpcHandler.java:59)
    at com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle(AbstractRpcInvocationHandler.java:64)
    at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:378)
    at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:359)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
    at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:359)
    at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:301)
    at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:87)
    at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
    at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1540)
    at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:246)
    at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:95)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
    at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141)
    at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:665)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:830)