假设我们有一个名为 FrmRegistration 的JFrame。它的功能是将数据插入名为 records 的表中。
MySQL的命令 desc记录会产生以下结果:
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id | varchar(7) | NO | PRI | | |
| name | varchar(100) | NO | | NULL | |
| birthday | date | NO | | NULL | |
+-----------+--------------+------+-----+---------+-------+
在 FrmRegistration 中,有一个生日输入的JFormattedTextField,我们称之为 ftfBirthday 。在Netbeans中,我们通过右键单击它们并转到Properties - >将名称放入组件中。代码标签 - >变量名。或者右键单击 - >自定义代码 - >重命名...按钮。
右键单击该字段并转到“属性”,然后在“FormatterFactory”中单击“...”按钮。使用以下命令创建自定义字段:#### / ## / ##
JFormattedTextField的原因是用户不会通过键入斜杠来浪费时间。它们会自动显示。
在 FrmRegistration 中名为Insert的按钮的源代码应该怎么做?
答案 0 :(得分:3)
在转到源代码之前,右键单击日期字段并转到“属性”。复制文本内容。它应该是(a =一个空格):
AAAA / AA / AA
它将用于“} else if(”/ /“.equals(birthday)){”line。
(参见适当参数的代码)
我添加了一些额外的东西,比如检查字段是否为空。
try {
Class.forName("com.mysql.jdbc.Driver");
try (Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost/database_name_here",
"username_here", "password_here")) {
String if = txtId.getText();
String name = txtName.getText();
String birthday = ftfBirthday.getText();
PreparedStatement stmt = con.prepareStatement(
"INSERT INTO records "
+ "(id, name, birthday)"
+ "VALUES(?,?,STR_TO_DATE(?,'%Y/%m/%d'))");
if (id.isEmpty()) {
JOptionPane.showMessageDialog(null,
"The ID field must be completed!");
} else if (name.isEmpty()) {
JOptionPane.showMessageDialog(null,
"The Name field must be completed!");
} else if (" / / ".equals(birthday)) {
JOptionPane.showMessageDialog(null,
"The Birthday field must be completed!");
} else {
stmt.setString(1, id);
stmt.setString(2, name);
stmt.setString(3, birthday);
stmt.executeUpdate();
JOptionPane.showMessageDialog(this, " Data was saved successfully! ");
}
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(this, "SQL command error "
+ e.getMessage());
} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(this,
" Database driver not found ");
}
就是这样。希望它可以帮到某人! : - )