可以使用JDBC从数据库中检索一条记录,但不能检索另一条记录

时间:2018-12-03 14:24:25

标签: java mysql jdbc discord

因此,对于一个学校项目,我正在构建一个不和谐的机器人。我内置的功能之一是,他可以从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。

3 个答案:

答案 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使用绑定变量。