Я получаю сообщение об ошибке: «Количество столбцов не соответствует значению в строке 1», но я посчитал, у меня есть правильное количество столбцов, и я чувствую, что ошибка связана с методом setBoolean (). У меня есть 8 столбцов, и вы увидите, что я передаю 7 аргументов в моем методе, поскольку один из столбцов является AUTO_INCREMENTE. Мое кодирование работает прекрасно, если я не использую метод setBoolean, заменяя его на setString, setInt или что-то еще, но не тогда, когда я делаю это с setBoolean ().
Вот мой код, который, я надеюсь, прояснит мою проблему:
У меня есть автоматический c код в моем Java, который создает базу данных и соответствующие ей таблицы, если она не существует:
DB.createDB("userSecInfo");
DB.createTable("accountInfo", "userSecInfo", "("+
"Username VARCHAR(40) NOT NULL, "+
"Pass VARCHAR(40) NOT NULL, "+
"chkPwChange BOOLEAN NOT NULL DEFAULT FALSE, "+
"chkPwCntChange BOOLEAN NOT NULL DEFAULT FALSE, "+
"chkPwNoExpires BOOLEAN NOT NULL DEFAULT FALSE, "+
"chkPwExpires BOOLEAN NOT NULL DEFAULT FALSE, "+
"expirydays INT, "+
"UserID INT NOT NULL AUTO_INCREMENT, "+
"PRIMARY KEY (UserID))");
Я попытался определить все логические переменные для MySQL различными способами, такими как BOOL, также как BOOLEAN (как указано выше) и как TINYINT & TINYINT (1); но определение переменной, похоже, не является проблемой.
Затем программа, после создания базы данных и таблиц, продолжает извлекать информацию, введенную пользователем, и вставляет ее в базу данных:
DB.insertUserSecAccountInfo("userSecInfo", "accountInfo", tFUsername.getText(),
String.copyValueOf(pFPassword.getPassword()), chckbxUserMustChange.isSelected(),
chckbxUserCannotChange.isSelected(), chckbxPasswordNeverExpires.isSelected(),
chckbxPasswordExpiresAnd.isSelected(), Integer.parseInt(tFdays.getText()));
Метод insertUserSecAccountInfo, как показано ниже:
public void insertUserSecAccountInfo(String db_name,String table_name, String Username, String Pass,
boolean chkPwChange, boolean chkPwCntChange, boolean chkPwNoExpires,boolean chkPwExpires,
int expirydays) throws Exception {
try {
openConnection("whatever","password",db_name);
String Query ="INSERT into "+ table_name +" values(?,?,?,?,?,?,?)";
ps = Conexion.prepareStatement(Query);
ps.setString(1, Username);
ps.setString(2, Pass);
ps.setBoolean(3, chkPwChange);
ps.setBoolean(4, chkPwCntChange);
ps.setBoolean(5, chkPwNoExpires);
ps.setBoolean(6, chkPwExpires);
ps.setInt(7, expirydays);
ps.executeUpdate();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Error saving data"));
ex.printStackTrace();
} finally {
closeConnection();
}
}
Когда я его запускаю, он показывает мне ошибку: «Количество столбцов не соответствует количеству значений в строке 1». Но затем я в основном запускаю ту же строку прямо в MySQL, как показано ниже, и она вставляет ее совершенно нормально:
insert into accountInfo(Username,Pass,chkPwChange,chkPwCntChange,chkPwNoExpires,chkPwExpires,expirydays) values ('Hola','No',true,true,true,true,56);
Так что мне кажется, что это проблема с методом setBoolean (), который может не правильно отображать или передавать логические переменные из Java в MySQL; У кого-нибудь была подобная проблема? Я был бы очень признателен за любые указания с этим.
Заранее спасибо.