Я пытаюсь вставить данные из моего jTable в базу данных, нажав кнопку. Я получаю исключение, говоря, что количество столбцов не соответствует количеству значений в строке 1
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try{
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/sms", "root", "");
String query = "insert into attendance(regNo,name,sClass,attendance,date) values('"+regNo+"','"+names+"','"+sClass+"','"+attendance+"')";
Statement st=connection.createStatement();
int row=jTable_Display_Student.getSelectedRow();
String regNo=(jTable_Display_Student.getValueAt(row, 0).toString());
String names=(jTable_Display_Student.getValueAt(row, 1).toString());
String sClass=(jTable_Display_Student.getValueAt(row, 2).toString());
String attendance=(jTable_Display_Student.getValueAt(row, 3).toString());
st.executeUpdate(query);
JOptionPane.showMessageDialog(null, "Selected Rows Submitted Successfully.");
}
catch(Exception e){
JOptionPane.showMessageDialog(null,e.getMessage());
}
}
Любая помощь будет принята с благодарностью.
Это потому, что есть пять полей, и вы отправляете только четыре значения в своем запросе.
5 столбцов в regNo,name,sClass,attendance,date, но только 4 значения приведены в values('"+regNo+"','"+names+"','"+sClass+"','"+attendance+"') - дата отсутствует ...
но как-то странно: вы создаете команду SQL, а после этого загружаете значения в переменные - Java так не работает. Когда он выполняет строку String query = ...., значения переменных в этот момент используются для создания строки. Переменная запроса не изменится, если переменные затем будут изменены (не говоря уже о том, что вы ДОЛЖНЫ объявить переменные перед использованием ...)
@CarlosHeuberger, поэтому я сказал, что код не компилируется. Переменные используются до их объявления.
@ f1sh а значит я не могу повторить? очевидно, он мог бы скомпилировать и выполнить его, иначе это не сгенерирует ЭТО исключение ...
Хорошо, эти четыре поля, которые я перечислил, находятся в jtable, а переменная даты - в jdatechooser. Мне трудно вставить данные из jTable в базу данных, нажав кнопку отправки. Если есть другой способ сделать это, я был бы признателен за помощь, пожалуйста, включите код




В этой части вашего кода:
String query = "insert into attendance(regNo,name,sClass,attendance,date) values('"+regNo+"','"+names+"','"+sClass+"','"+attendance+"')";
У вас 5 столбцов
(regNo,name,sClass,attendance,date)
и всего 4 значения для их заполнения
values('"+regNo+"','"+names+"','"+sClass+"','"+attendance+"')
Итак, вам нужно добавить date, который вам не хватает
Я сопоставил столбцы со значениями, и теперь я получаю исключение: «Обработка данных: данные слишком длинные для столбца 'regNo' в строке 1, но значение в этой ячейке представляет собой однозначное число
При попытке использовать SQL используйте PreparedStatement. Код легче читать и меньше подвержен ошибкам.
Базовый пример для начала:
String sql = "INSERT INTO Page (Name, Title) VALUES (?, ?)";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString( 1, nameValue );
stmt.setString( 2, titleValue );
stmt.executeUpdate();
Надеюсь, вы легко сможете сказать:
Хотя я мог бы использовать подготовленный оператор, но он работает только при вводе данных из других компонентов, таких как текстовое поле и поле со списком. Как указать столбцы таблицы с помощью prepareStatement
То же, что и в примере кода. Вы используете метод getValueAt (...) JTable.
Этот код не компилируется. И этот код не может привести к тому исключению. Думаю, у вас другая версия. А по поводу проблемы, которую вы опубликовали: что это исключение пытается вам сказать?