将项目添加到数据库

时间:2019-05-23 08:43:01

标签: java javafx

我想将数据添加到数据库中,但是我经常遇到错误,无法在线找到解决问题的方法。

package sample;

import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

import java.io.IOException;
import java.sql.*;

public class vrachtwagentoevoegencontroller {
    public Button backbtn;
    public Button toevoegbtn;
    public TextField txtmodel;
    public TextField txtinhoud;
    public TextField txtaantal;

    public vrachtwagentoevoegencontroller() throws SQLException {
    }


    public void back(ActionEvent actionEvent) throws IOException {
        Parent root2 = FXMLLoader.load(getClass().getResource("VrachtwagenBeheer.fxml"));
        Stage stage1 = new Stage();
        stage1.setTitle("Vrachtwagen Beheer");
        stage1.setScene(new Scene(root2));
        stage1.show();
        Stage stage = (Stage) backbtn.getScene().getWindow();
        stage.close();
    }

    Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/dorb_logistics", "root", "jorisDJ1");
    PreparedStatement preparedStatement = null;
    int rs = 0;

    public void add(ActionEvent actionEvent) {
        String model = txtmodel.getText();
        String inhoud = txtinhoud.getText();
        String aantal = txtaantal.getText();

        String sql = "INSERT INTO vrachtwagens (Model, Inhoud, Aantal) VALUES ('"+model+"' and '"+inhoud+"' and '"+aantal+"');";



        try {
            preparedStatement = con.prepareStatement(sql);
            rs = preparedStatement.executeUpdate(sql);
            txtmodel.setText("");
            txtinhoud.setText("");
            txtaantal.setText("");

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

到目前为止,这是我所拥有的,每次我尝试使用executeUpdate时,它都希望我使用int,但是当我这样做时,它说列行计数与1或类似的值不匹配。有人可以帮我解决这个问题吗?这是错误:java.sql.SQLException:列数与第1行的值数不匹配

2 个答案:

答案 0 :(得分:2)

首先,您的查询未正确写入。插入查询中的值以逗号分隔:

String sql = "INSERT INTO vrachtwagens (Model, Inhoud, Aantal) VALUES ('"+model+"', '"+inhoud+"', '"+aantal+"');";

然后,您需要正确使用PreparedStatement,而不必在executeUpdate中传递查询。或者您只使用Statement

preparedStatement.executeUpdate();

由于您正在“使用” PreparedStatement,因此您实际上不应该串联值,而应使用参数并安全地设置值并防止SQL注入。

String sql = "INSERT INTO vrachtwagens (Model, Inhoud, Aantal) VALUES (?, ?, ?);";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, model);
ps.setString(2, inhoud);
ps.setString(3, aantal);

ps.executeUpdate();

答案 1 :(得分:0)

您应该将executeUpdate用于插入/更新命令,因为executeQuery需要一个resultSet,而不是这里。

参考:https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String)