如何用Java实现获得MySQL数据库中所有表的记录总数

在MySQL中,可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录。如果想知道某个数据库中所有别的记录总数应该怎么做呢?本文给出两种可行的Java程序,解决该问题。

1. 首先确定数据库中有多少个表,然后对每个表执行SELECT COUNT(*) FROM table_name

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Test {
	private static String driver = "com.mysql.jdbc.Driver";
	private static String url = "jdbc:mysql://127.0.0.1/";
	private static String db = "test";
	private static String user = "root";
	private static String pass = "test";

	static Connection conn = null;
	static Statement statement = null;
	static PreparedStatement ps = null;
	static ResultSet rs = null;
	
	static List<String> tables = new ArrayList<String>();
	
	public static void startMySQLConn() {
		try {
			Class.forName(driver).newInstance();
			conn = DriverManager.getConnection(url+db, user, pass);
			if (!conn.isClosed()) {
				System.out.println("Succeeded connecting to MySQL!");
			}
			
			statement = conn.createStatement();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void closeMySQLConn() {
		if(conn != null){
			try {
				conn.close();
				System.out.println("Database connection terminated!");
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void getTables() {
		String sql = "show tables;";
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while (rs.next()) {
				tables.add(rs.getString(1));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static long getDbSum() {
		long sum = 0;
		String sql = "select count(*) from ";
		try {
			for(String tblName: tables) {
				ps = conn.prepareStatement(sql + tblName + ";");
				rs = ps.executeQuery();
				while (rs.next()) {
					sum += rs.getInt(1);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sum;
	}
	
	public static void main(String[] args) {
		startMySQLConn();
		getTables();
		System.out.println(getDbSum());
		closeMySQLConn();
	}
}


2. 借助information_schema库的tables表

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Test {
	private static String driver = "com.mysql.jdbc.Driver";
	private static String url = "jdbc:mysql://127.0.0.1/";
	private static String db = "test";
	private static String user = "root";
	private static String pass = "test";

	static Connection conn = null;
	static Statement statement = null;
	static PreparedStatement ps = null;
	static ResultSet rs = null;
	
	public static void startMySQLConn() {
		try {
			Class.forName(driver).newInstance();
			conn = DriverManager.getConnection(url+db, user, pass);
			if (!conn.isClosed()) {
				System.out.println("Succeeded connecting to MySQL!");
			}
			
			statement = conn.createStatement();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void closeMySQLConn() {
		if(conn != null){
			try {
				conn.close();
				System.out.println("Database connection terminated!");
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void useDB() {
		String sql = "use information_schema;";
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static long getDbSum() {
		long sum = 0;
		String sql = "select table_name,table_rows from tables where TABLE_SCHEMA = '" +
				db + "' order by table_rows desc;";
		//System.out.println(sql);
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while (rs.next()) {
				sum += rs.getInt(2);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sum;
	}
	
	public static void main(String[] args) {
		startMySQLConn();
		useDB();
		System.out.println(getDbSum());
		closeMySQLConn();
	}
}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值