JOOQ - 更新新添加的列
JOOQ - Update newly added columns
我正在使用 JOOQ 和 Postgresql 数据库,我正在尝试向 table 添加新列,然后用值更新这些列。这些值对应于推文的情绪。
我目前的尝试(没有编译错误的那个:)是:
final String SENTIMENT_NEGATIVE = "sentiment_negative";
final String SENTIMENT_NEUTRAL = "sentiment_neutral";
final String SENTIMENT_POSITIVE = "sentiment_positive";
final String SENTIMENT_COMPOUND = "sentiment_compound";
context.alterTable(Tweets.TWEETS).addColumnIfNotExists(SENTIMENT_NEGATIVE, DOUBLE).execute();
context.alterTable(Tweets.TWEETS).addColumnIfNotExists(SENTIMENT_NEUTRAL , DOUBLE).execute();
context.alterTable(Tweets.TWEETS).addColumnIfNotExists(SENTIMENT_POSITIVE, DOUBLE).execute();
context.alterTable(Tweets.TWEETS).addColumnIfNotExists(SENTIMENT_COMPOUND, DOUBLE).execute();
// example usage
for (Record record: tweetsResult) {
String tweet = record.get(Tweets.TWEETS.CONTENT);
SentimentAnalyzer sentimentAnalyzer = new SentimentAnalyzer(tweet);
sentimentAnalyzer.analyze();
log.debug(sentimentAnalyzer.getPolarity() + " | " + tweet);
context.update(Tweets.TWEETS)
.set(
row(SENTIMENT_NEGATIVE,
SENTIMENT_NEUTRAL,
SENTIMENT_POSITIVE,
SENTIMENT_COMPOUND),
row(getPolarity(sentimentAnalyzer, SENTIMENT_NEGATIVE),
getPolarity(sentimentAnalyzer, SENTIMENT_NEUTRAL),
getPolarity(sentimentAnalyzer, SENTIMENT_POSITIVE),
getPolarity(sentimentAnalyzer, SENTIMENT_COMPOUND))
)
.where(Tweets.TWEETS.ID.eq(record.get(Tweets.TWEETS.ID)))
.execute();
}
但是我得到一个错误:
Exception in thread "main" org.jooq.exception.DataAccessException: SQL [update "public"."tweets" set (?, ?, ?, ?) = row (?, ?, ?, ?) where "public"."tweets"."id" = ?]; ERROR: syntax error at or near ""
我知道我可以根据数据库模式的变化重新生成我的源代码,但我想知道是否可以使用我的方法来做到这一点。
我正在使用 JOOQ 和 Postgresql 数据库,我正在尝试向 table 添加新列,然后用值更新这些列。这些值对应于推文的情绪。
我目前的尝试(没有编译错误的那个:)是:
final String SENTIMENT_NEGATIVE = "sentiment_negative";
final String SENTIMENT_NEUTRAL = "sentiment_neutral";
final String SENTIMENT_POSITIVE = "sentiment_positive";
final String SENTIMENT_COMPOUND = "sentiment_compound";
context.alterTable(Tweets.TWEETS).addColumnIfNotExists(SENTIMENT_NEGATIVE, DOUBLE).execute();
context.alterTable(Tweets.TWEETS).addColumnIfNotExists(SENTIMENT_NEUTRAL , DOUBLE).execute();
context.alterTable(Tweets.TWEETS).addColumnIfNotExists(SENTIMENT_POSITIVE, DOUBLE).execute();
context.alterTable(Tweets.TWEETS).addColumnIfNotExists(SENTIMENT_COMPOUND, DOUBLE).execute();
// example usage
for (Record record: tweetsResult) {
String tweet = record.get(Tweets.TWEETS.CONTENT);
SentimentAnalyzer sentimentAnalyzer = new SentimentAnalyzer(tweet);
sentimentAnalyzer.analyze();
log.debug(sentimentAnalyzer.getPolarity() + " | " + tweet);
context.update(Tweets.TWEETS)
.set(
row(SENTIMENT_NEGATIVE,
SENTIMENT_NEUTRAL,
SENTIMENT_POSITIVE,
SENTIMENT_COMPOUND),
row(getPolarity(sentimentAnalyzer, SENTIMENT_NEGATIVE),
getPolarity(sentimentAnalyzer, SENTIMENT_NEUTRAL),
getPolarity(sentimentAnalyzer, SENTIMENT_POSITIVE),
getPolarity(sentimentAnalyzer, SENTIMENT_COMPOUND))
)
.where(Tweets.TWEETS.ID.eq(record.get(Tweets.TWEETS.ID)))
.execute();
}
但是我得到一个错误:
Exception in thread "main" org.jooq.exception.DataAccessException: SQL [update "public"."tweets" set (?, ?, ?, ?) = row (?, ?, ?, ?) where "public"."tweets"."id" = ?]; ERROR: syntax error at or near ""
我知道我可以根据数据库模式的变化重新生成我的源代码,但我想知道是否可以使用我的方法来做到这一点。