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")));
我正在创建动态 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")));