UUID Java 键入 SQL CHAR(40) - 无法存储到数组中

UUID Java Type to SQL CHAR(40) - Unable to store into Array

我正在创建动态 Web 应用程序,我必须使用 Java、HTML 和 MySQL。我在使用类型 UUID 时遇到问题。

SQLtable如下:

CREATE TABLE `logs` (
  `uuid` char(40) COLLATE utf8_unicode_ci NOT NULL,
  `title` char(128) COLLATE utf8_unicode_ci DEFAULT NULL,
  `content` text COLLATE utf8_unicode_ci,
  `createTimestamp` date DEFAULT NULL,
  PRIMARY KEY (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我有一个标准日志 class,每个变量都有 getters/setters。

我有一个 applicationDAO class 可以将日志插入数据库 - 这工作正常,但我必须将 UUID 转换为字符串才能将所有字段放入数据库。

public int insertLog(TextLog log) throws SQLException {
        
        int rows = 0;
          try { 
                
                connection = DBConnection.getConnectionToDatabase();
                PreparedStatement ps = connection.prepareStatement(INSERT_LOG_SQL);
                
                
                ps.setObject(1, log.getUUID().toString());
                ps.setString(2, log.getTitle());
                ps.setString(3, log.getContent());
                ps.setObject(4, java.sql.Date.valueOf(java.time.LocalDate.now()));
                
                rows = ps.executeUpdate();
                
            } catch (Exception e) {
            
                e.printStackTrace();
            }
        return rows;
        
    }

现在问题出在我尝试将 SQL table 存储到数组中时。

@Override
    public List<TextLog> listLogs() {
        
        TextLog log = null;
        List<TextLog> tl = new ArrayList<>();
        
        try { 
            
            connection = DBConnection.getConnectionToDatabase();
            Statement statement = connection.createStatement();
            ResultSet rs = statement.executeQuery(SELECT_ALL_LOGS);
        
            
            while (rs.next()) { 
                log = new TextLog();
                log.setUUID(rs.getObject("uuid", java.util.UUID.class));
                log.setTitle(rs.getString("title"));
                log.setContent(rs.getString("content"));
                log.setDate(rs.getDate("createTimestamp"));

                
            }
        
        } catch (Exception e) {
        
            e.printStackTrace();
        }
    
        
        return tl;
    }

因为 SQL 中的字段是 char(40),它没有将其作为 UUID 读取,我收到以下错误: java.sql.SQLException: 类型 java.util.UUID

不支持转换

请记住,我必须保持字段不变,无法调整。

关于如何解决此错误的任何想法?

提前致谢,

获取字符串,然后将其转换为 UUID:

log.setUUID(java.util.UUID.fromString(rs.getString("uuid")));