gpt4 book ai didi

java - JDBC 将 Boolean 转换为 mySQL 兼容的 Boolean 类型

转载 作者:行者123 更新时间:2023-11-29 10:59:14 25 4
gpt4 key购买 nike

这里有很多类似的问题,但没有一个具体回答这个问题。如何将 Java boolean 值转换为 mySQL 数据库可接受的格式?我尝试了几种不同的方法,并在这里阅读了一些类似的问题,但没有任何效果。详细信息如下:

我有一个 mySQL 数据库。我在 mySQL Workbench 中构建了它。它允许我为真/假值指定数据类型“boolean ”。它用 1/0 来表示这些。我知道有 1 个字节大小的tinyInt。

我正在使用 JDBC 为 Java 数据库构建一个接口(interface)。数据库中的每个表都有一个相应的 Java bean 类(用于创建表数据的实例)和一个 tableManager 类(包含在程序和数据库之间来回切换的代码)。

该程序还有一个 GUI。在 GUI 中我有三个复选框。我使用 checkBox.isSelected() 来检测复选框的状态。当按下按钮时。这将返回“true”或“false”值。然后使用它在相应的 Java Bean 类中设置 boolean 值。例如:

在图形用户界面中:

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 类中的值是 boolean 值,尽管我也尝试将其更改为 boolean 值,但这没有帮助。

从其他 Stack 帖子中,我认为应该发生的是 PreparedStatement.setBoolean() 方法应该处理将“true”/“false”值转换为 1 或0.这对我不起作用。所以我写了尝试两种不同的方法。第一个是将 true false 值转换为值 1 或 0 的 Int,然后将其传入。这不起作用。我想这可能是因为 int 比 byte 大。所以我尝试将其转换为这样的字节:

  stmt.setByte(2, (byte) booleanToByte(bean.getIsPersonNewContact()));

这也不起作用。我正在打印错误消息,但它们并没有透露太多信息。我可以获取字符串和日期值并将其放入数据库中,因此它不是连接本身。我确信一定有一种简单的方法来实现我想要做的事情。有人可以启发我吗?

**UPDATE**

根据下面的建议,我将数据库中的类型更改为字符串,然后写入方法来处理代码中字符串和 boolean 值之间的来回转换:

    //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. In your table set new_contact to String instead of Boolean.
  2. stmt.setString(2, Boolean.toString(bean.getIsPersonNewContact()));

当你从数据库取回字符串时

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

关于java - JDBC 将 Boolean 转换为 mySQL 兼容的 Boolean 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42539546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com