Java 如果可能,如何将MySQL查询结果保存在int变量中

Java 如果可能,如何将MySQL查询结果保存在int变量中,java,mysql,database,Java,Mysql,Database,在创建另一个表之前,我想知道一个表是否存在。在执行命令后,是否有任何方法将结果保存在变量中,我正在使用这段代码,但即使表不存在,它也只给出true public static boolean checkBefore(){ boolean r = false; try{ query = "SELECT COUNT(*)FROM information_schema.tables WHERE table_schema = 'sms' AND table_name =

在创建另一个表之前,我想知道一个表是否存在。在执行命令后,是否有任何方法将结果保存在变量中,我正在使用这段代码,但即使表不存在,它也只给出true

public static boolean checkBefore(){
    boolean r = false;
    try{
        query = "SELECT COUNT(*)FROM information_schema.tables WHERE table_schema = 'sms' AND table_name = 'auth';";
        con = connectsms();
        st = con.createStatement();
        ResultSet rs = st.executeQuery(query);
        r = rs.next();
    }catch(SQLException e){
        JOptionPane.showMessageDialog(errorMsg,"Exeption Fount: "+e,"Opps! Exception Found in checkBefore()",JOptionPane.ERROR_MESSAGE); 
    }
    System.out.println(r);
    return r;
}

更改
r=rs.next()
rs.next()然后添加
r=rs.getInt(1)>0next()
前进到下一行/第一行,然后调用getter方法来检索该行的列值

使用聚合函数(
COUNT
MIN
MAX
等)而没有
GROUP BY
子句的查询将始终只返回一行,因此对于这些类型的查询,您无需检查
next()
中的返回值。对于几乎所有其他查询,您都可以

调用返回资源的JDBC方法时,应该使用try with resources确保正确清理这些资源

查询字符串不需要以
结尾分号

这意味着您的代码应该是:

public static boolean checkBefore() {
    String sql = "SELECT COUNT(*)" +
                  " FROM information_schema.tables" +
                 " WHERE table_schema = 'sms'" +
                   " AND table_name = 'auth'";
    try ( Connection con = connectsms();
          Statement st = con.createStatement();
          ResultSet rs = st.executeQuery(sql);
    ) {
        rs.next(); // exactly one row returned, so next() always returns true here
        int count = rs.getInt(1); // get value from first column
        System.out.println("count = " + count);
        return (count != 0);
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(errorMsg, "Exeption Fount: " + e,
                                      "Opps! Exception Found in checkBefore()",
                                      JOptionPane.ERROR_MESSAGE);
        return 0;
    }
}

这是对我有效的查询:

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'databse_name';
我使用的代码是正确的:

public static boolean checkBefore(){
    boolean result = false;
    try{
        query = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'sms'";
        con = connectsms();
        st = con.createStatement();
        ResultSet rs = st.executeQuery(query);
        result = rs.next();
        System.out.println();
    }catch(SQLException e){
       JOptionPane.showMessageDialog(errorMsg,"Exeption Fount: "+e,"Opps! Exception Found in checkBefor()",JOptionPane.ERROR_MESSAGE); 
    }
    try{
        con.close();
        }
    catch(SQLException e){JOptionPane.showMessageDialog(errorMsg,"Exeption Fount: "+e,"unable to close connection",JOptionPane.ERROR_MESSAGE); }

    System.out.println(result);
   return result;
}

您的代码没有显示创建另一个表的逻辑。你到底想要实现什么?检查语句
ResultSet rs=st.executeQuery(查询)返回任何内容?我还没有包含创建表的代码,我想创建逻辑来检查,如果表不存在,则返回false。该语句返回一些字符串,但每次执行代码时它都是常量。您是否从
中检查了select语句
COUNT(*)?在
中的
之前添加一个空格。是否尝试过?在调用
rs.getInt(…)
之前不能调用
rs.next()
我是否应该使用此代码来满足我的需要``public static boolean checkBefore(){boolean r=false;尝试{query=“SELECT COUNT(*)FROM userdata”;con=connectsms();st=con.createStatement();ResultSet rs=st.executeQuery(查询);返回true;}catch(SQLException e){return false;}```