这里有很多类似的问题,但没有具体回答这个问题的问题。如何从Java布尔值到mySQL数据库可接受的格式?我已经尝试了几种不同的东西,并在这里阅读了一些类似的问题,但没有任何工作。以下是详细信息:
我有一个mySQL数据库。我在mySQL工作台中构建它。它允许我指定数据类型'布尔'对于真/假值。它用1/0代表这些。我知道有大小为1字节的tinyInts。
我正在使用JDBC为Java构建数据库接口。数据库中的每个表都有一个用于创建表数据实例的相应Java bean类和一个tableManager类,该类包含在程序和数据库之间来回传递的代码。
该程序还有一个GUI。在GUI中我有三个复选框。我使用checkBox.isSelected()
来检测复选框的状态。在按下按钮时。这将返回' true'或者' false'。然后,它用于在相应的Java Bean类中设置布尔值。例如:
在gui中:
private void updateContactActionPerformed (java.awt.event.ActionEvent evt) {
Person bean = new Person();
bean.setPersonID(Integer.parseInt(labelPid.getText());
bean.setPersonName(textfield.getText());
bean.setIsPersonNewContact(checkBoxContact.isSelected());
Boolean update = PeopleManager.update(bean); //pass the bean to the manager class
}
在经理班......
public static boolean update(Person bean) throws Exception {
String sql = "Update peopleTable SET name = ? new_contact = ? WHERE person_id = ?";
try(
PreparedStatement stmt = conn.prepareStatement(sql);) {
stmt.setString(1, bean.getPersonName());
stmt.setBoolean(2, bean.getIsPersonNewContact());
stmt.setInt(3, bean.getPersonID());
...The rest of the try/catch statement and exception handling stuff
}
正在设置的Bean类中的值是一个布尔值,但我也尝试将其更改为布尔值并且没有帮助。
从其他Stack帖子中我可以相信,应该发生的事情是PreparedStatement.setBoolean()
方法应该处理转换为真' /' false&#39 ;值为1或0.这对我没有用。所以我写了两种不同的方法。第一种方法是将真假值转换为值为1或0的Int,然后将其传入。这不起作用。我想这可能是因为int大于一个字节。所以我尝试将它转换为这样的字节:
stmt.setByte(2, (byte) booleanToByte(bean.getIsPersonNewContact()));
那也没有用。我打印错误信息,但他们并没有透露太多信息。我可以在数据库中获取并输入字符串和日期值,因此它不是连接本身。我确信必须有一种简单的方法来实现我想要做的事情。有人可以开导我吗?
**UPDATE**
根据下面的建议,我将数据库中的类型更改为字符串,然后写入方法来处理我的代码中字符串和布尔值之间的来回转换:
//Convert Boolean to string
private String booleanToString(Boolean b){
if(b){
String t = "true";
return t;
}
else {
String f = "false";
return f;
}
}
//convert String to Boolean
private Boolean stringToBoolean(String s) {
if (s == "true") {
Boolean t = true;
return t;
}
else {
Boolean f = false;
return f;
}
}
然后我用这些作为我现有的包装。例如,代码如下:
bean.setIsPersonNewContact(booleanToString(checkBoxContact.isSelected()));
感谢您帮助解决此问题!
答案 0 :(得分:0)
解决方法
- 在您的表中,将new_contact设置为String而不是Boolean。
- stmt.setString(2,Boolean.toString(bean.getIsPersonNewContact()));
醇>
从数据库中获取字符串时
- boolean yourBoolean = Boolean.valueOf(resultset.getString(" new_contact"));
醇>