我想将数据添加到数据库中,但是我经常遇到错误,无法在线找到解决问题的方法。
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行的值数不匹配
答案 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)