
我倒是有个方法,以前我做个mysql数据库备份,备份的时候也就是赋值数据库的过程,当然能知道大小了,要是想实时获取的话那就就定义一个线程来空值就可以了,代码大概如下:其中赋值的过程楼主可省略,你要的就是一个值,就是sb的大小。。
package comhuagongbackdatabase;
import javaioFile;
import javaioIOException;
import javaioInputStream;
import javautilProperties;
public class BackmysqlUtil {
/
mysql数据备份 接收脚本名,并返回此路径
sql为备份的脚本名比如egsql
@throws IOException
/
public static void backup(String sqlname,String readlyPath) throws IOException {
Properties pros = getPprVue("backupproperties");
String username = prosgetProperty("username");
String password = prosgetProperty("password");
// 得到MYSQL的用户名密码后调用 mysql 的 cmd:
String databaseName = prosgetProperty("databaseName");
String address = prosgetProperty("address");
File backupath = new File(readlyPath);
if (!backupathexists()) {
backupathmkdir();
}
StringBuffer sb = new StringBuffer();
sbappend(" mysqldump ");
sbappend("--opt ");
sbappend("-h ");
sbappend(address);
sbappend(" ");
sbappend("--user=");
sbappend(username);
sbappend(" ");
sbappend("--password=");
sbappend(password);
sbappend(" ");
sbappend("--lock-all-tables=true ");
sbappend("--result-file=");
sbappend(readlyPath);
sbappend(sqlname);
sbappend(" ");
sbappend("--default-character-set=utf8 ");
sbappend(databaseName);
Runtime cmd = RuntimegetRuntime();
Process p = cmdexec(sbtoString());
prossetProperty("ss", "ss");
}
public static void load(String filename,String readlyPath) throws IOException {
Properties pros = getPprVue("backupproperties");
// 这里是读取的属性文件,也可以直接使用
String root = prosgetProperty("username");
String pass = prosgetProperty("password");
// 得到MYSQL的用户名密码后调用 mysql 的 cmd:
String filepath = readlyPath + filename; // 备份的路径地址
// 新建数据库newdb
String stmt1 = "mysqladmin -u " + root + " -p" + pass
+ " create newdb";
// -p后面加的是你的密码
String stmt2 = "mysql -u " + root + " -p" + pass + " newdb < "
+ filepath;
String[] cmd = { "cmd", "/c", stmt2 };
RuntimegetRuntime()exec(stmt1);
RuntimegetRuntime()exec(cmd);
Systemoutprintln("数据已从 " + filepath + " 导入到数据库中");
}
// 加载配置文件
public static Properties getPprVue(String properName) throws IOException {
InputStream inputStream = BackmysqlUtilclassgetClassLoader()
getResourceAsStream(properName);
Properties p = new Properties();
pload(inputStream);
inputStreamclose();
return p;
}
//测试
public static void main(String[] args) throws IOException {
backup("egsql","e:\\mysql\\");
//load("egsql","e:\\mysql\\");
}
}
配置文件:
backupproperties配置文件的内容如下,用户名和密码随便你改。
#mysqlpath = D:\\ProgramFiles\\wamp\\bin\\mysql\\mysql5132\\bin
#sqlpath = E:\\MySQl\\
username = root
password = cool
address=localhost
databaseName=huagongdb
最后你想什么时候调用直接就在程序里用一个线程控制调用就可以了。
1随机读取连续多条记录。经过实践,可以随机读取多条连续的数据记录,里头取值的一般都是主键ID来进行最大值、最小值的读取:
SELECT FROM example_table AS t1 JOIN (SELECT ROUND(RAND() ((SELECT MAX(id) FROM example_table)-(SELECT MIN(id) FROM example_table))+(SELECT MIN(id) FROM example_table)) AS id) AS t2 WHERE t1id >= t2id ORDER BY t1id LIMIT 5;2随机多条数据。以下两种都是随机读取数据,查询数据速度、随机范围都基本相差不大
SELECT FROM example_table WHERE id >= ((SELECT MAX(id) FROM example_table)-(SELECT MIN(id) FROM example_table)) RAND() + (SELECT MIN(id) FROM example_table) LIMIT 5;SELECT FROM example_table WHERE id>=(SELECT floor(RAND() ((SELECT MAX(id) FROM example_table)-(SELECT MIN(id) FROM example_table)) + (SELECT MIN(id) FROM example_table))) ORDER BY id LIMIT 5;mysql数据库软件的使用及连接方法:一、安装MySQL。
1、准备好安装包,双击Setupexe文件,开始mysql的安装。
2、按照提示一步一步往下执行直到安装完成。
3、安装完成之后配置MySQL服务,用以创建数据库及登录数据库账户密码:
选择Standard Configuration 标准配置,然后一路点next,直到配置好用户名密码。
在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的。下面我来介绍随机取数据一些优化方法。
SELECT
FROM
table_name
ORDER
BY
rand()
LIMIT
5;
rand在手册里是这么说的:
RAND()
RAND(N)
返回在范围0到10内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。
mysql>
select
RAND();
->
05925
mysql>
select
RAND(20);
->
01811
mysql>
select
RAND(20);
->
01811
mysql>
select
RAND();
->
02079
mysql>
select
RAND();
->
07888
你不能在一个ORDER
BY子句用RAND()值使用列,因为ORDER
BY将重复计算列多次。然而在MySQL323中,你可以做:
SELECT
FROM
table_name
ORDER
BY
RAND(),这是有利于得到一个来自SELECT
FROM
table1,table2
WHERE
a=b
AND
c<d
ORDER
BY
RAND()
LIMIT
1000的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。
网上基本上都是查询max(id)
rand()来随机获取数据。
SELECT
FROM
`table`
AS
t1
JOIN
(SELECT
ROUND(RAND()
(SELECT
MAX(id)
FROM
`table`))
AS
id)
AS
t2
WHERE
t1id
>=
t2id
ORDER
BY
t1id
ASC
LIMIT
5;
但是这样会产生连续的5条记录。解决办法只能是每次查询一条,查询5次。即便如此也值得,因为15万条的表,查询只需要001秒不到。
上面的语句采用的是JOIN,mysql的论坛上有人使用
SELECT
FROM
`table`
WHERE
id
>=
(SELECT
FLOOR(
MAX(id)
RAND())
FROM
`table`
)
ORDER
BY
id
LIMIT
1;
我测试了一下,需要05秒,速度也不错,但是跟上面的语句还是有很大差距
后来请教了baidu,得到如下代码
完整查询语句是:
SELECT
FROM
`table`
WHERE
id
>=
(SELECT
floor(
RAND()
((SELECT
MAX(id)
FROM
`table`)-(SELECT
MIN(id)
FROM
`table`))
+
(SELECT
MIN(id)
FROM
`table`)))
ORDER
BY
id
LIMIT
1;
SELECT
FROM
`table`
AS
t1
JOIN
(SELECT
ROUND(RAND()
((SELECT
MAX(id)
FROM
`table`)-(SELECT
MIN(id)
FROM
`table`))+(SELECT
MIN(id)
FROM
`table`))
AS
id)
AS
t2
WHERE
t1id
>=
t2id
ORDER
BY
t1id
LIMIT
1;
最后在php中对这两个语句进行分别查询10次,
前者花费时间
0147433
秒
后者花费时间
0015130
秒
执行效率需要002
sec可惜的是,只有mysql
41以上才支持这样的子查询
注意事项
查看官方手册,也说rand()放在ORDER
BY
子句中会被执行多次,自然效率及很低。
以上的sql语句最后一条,本人实际测试通过,100W数据,瞬间出结果。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
show tables即为显示当前数据库中所有的表。又如:
mysql> use mysql
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
28 rows in set (005 sec)
这个是显示“mysql”这个数据库中的所有的表,一共有28张。
以上就是关于java怎么获得 mysql 当前数据库大小全部的内容,包括:java怎么获得 mysql 当前数据库大小、MySQL实现随机获取几条数据的方法、应用怎么直接连接mysql数据库获取数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)