Java 如果可能,如何将MySQL查询结果保存在int变量中
在创建另一个表之前,我想知道一个表是否存在。在执行命令后,是否有任何方法将结果保存在变量中,我正在使用这段代码,但即使表不存在,它也只给出trueJava 如果可能,如何将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 =
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)>0每个JDBC指南都会告诉您,在执行查询之后,您需要调用next()
前进到下一行/第一行,然后调用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;}```