因此,对于一个学校项目,我正在构建一个不和谐的机器人。我内置的功能之一是,他可以从MySQL数据库检索gif链接,并将其发送给消息。现在,我的问题是我只能从数据库中检索一条记录,而没有其他记录。如果将我使用的查询放入MySQL工作台并运行它,它将检索这些记录。
这是检索gif的方法
public static ArrayList<Gif> GetGifsFromDB(String msg){
ArrayList<Gif> gifs = new ArrayList<>();
try(Connection conn = (Connection)DriverManager.getConnection(url, userName, password)){
Class.forName("com.mysql.jdbc.Driver").newInstance();
Statement stmnt = conn.createStatement();
String sql = "Select * from gif WHERE Type = '" + msg + "'";
stmnt.execute(sql);
try(ResultSet rs = stmnt.getResultSet()){
while(rs.next()){
Gif g = new Gif();
g.setID(rs.getInt("GifID"));
g.setURL(rs.getString("GifURL"));
System.out.println(g.getID() + g.getURL());
gifs.add(g);
}
rs.close();
conn.close();
}
}
catch(SQLException ex){
System.err.println(ex.getMessage());
}
catch(Exception ex){
System.err.println(ex.getMessage());
}
return gifs;
}
数据库中的“类型”只是一个类别。根据我所拥有的测试数据,这3种类型都不是,令人惊讶且孤独。只有no会返回gif。
答案 0 :(得分:0)
删除关闭的ResultSet和连接行:
rs.close();
conn.close();
您已经使用try-with-resources关闭了它
答案 1 :(得分:0)
问题最终导致MySql没有将记录提交到数据库。刷新工作台后,添加的记录消失。奇怪的是,即使记录不在数据库中,也可以对其进行检索。
答案 2 :(得分:0)
您的foreach
很可能与数据库library(foreach)
library(runjags)
#generate a random variable, mean of 25, sd = 5.----
y.list <- list()
for(i in 1:2){
y.list[[i]] <- rnorm(100, 25, sd = 5)
}
#Specify a JAGS model to fit an intercept.----
jags.model = "
model{
for(i in 1:N){
y.hat[i] <- intercept
y[i] ~ dnorm(y.hat[i], tau)
}
#specify priors.
intercept ~ dnorm(0,1E-3)
tau <- pow(sigma, -2)
sigma ~ dunif(0, 100)
}
"
n.cores <- 4
registerDoParallel(n.cores)
#Fit models in parallel, with chains running in parallel.----
#two processes that each require two cores (4 cores are registered and all that is required.)
output <- list()
output <-
foreach(i = 1:length(y.list)) %dopar% {
#specify data object.
jd <- list(y=y.list[[i]], N = length(y.list[[i]]))
#fit model.
jags.out <- run.jags(jags.model,
data=jd,
n.chains=2,
monitor=c('intercept','tau'),
method='rjparallel')
#return output
return(jags.out)
}
列的任何值都不完全匹配。
运行
msg
直接在数据库上手动执行此操作。
您也可以尝试将以下代码放在末尾:
Type
如果这些结果之一为零,则表示SELECT COUNT(*) FROM gif WHERE Type = '... put msg content here ...'
与System.out.println("Number of Selected Gifs: "+gifs.size());
不完全匹配。也许是大写/小写问题?
为避免SQL注入和其他问题,请强烈考虑使用msg
使用绑定变量。