JDBC将Boolean转换为mySQL兼容布尔类型

时间:2017-03-01 18:44:40

标签: java mysql jdbc

这里有很多类似的问题,但没有具体回答这个问题的问题。如何从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())); 

感谢您帮助解决此问题!

1 个答案:

答案 0 :(得分:0)

解决方法

  
      
  1. 在您的表中,将new_contact设置为String而不是Boolean。
  2.   
  3. stmt.setString(2,Boolean.toString(bean.getIsPersonNewContact()));
  4.   

从数据库中获取字符串时

  
      
  1. boolean yourBoolean = Boolean.valueOf(resultset.getString(" new_contact"));
  2.