是否可以在.sql转储文件上执行查询而不用将其导入数据库?
示例:stuff.sql:
CREATE TABLE IF NOT EXISTS `options` (
...
INSERT INTO `options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES
(1, 'siteurl', 'http://www.someurl.com', 'yes'),
...
然后执行一些SELECT
语句以获取选项数据。
当然,我可以在本地数据库中导入转储,执行我想要的操作,再次转储它并再次删除数据库,但有没有一种方法可以减少开销?
答案 0 :(得分:1)
根本没有进口,我不这么认为。但是你有其他选择。您可以将SQL转储导入临时内存专用数据库,然后查询该数据库。例如,如果你的sql是兼容的,那么这可能是一个SQLite :MEMORY:
数据库,或者你可以使用Engine=MEMORY
(或Engine=HEAP
用于旧版本)与MySQL" create table
" DDL创建一个内存表,然后查询该数据库(你必须在转储文件中用Engine MEM替换Engine = INNODB或Engine = MyISAM来导入它)。同样的想法。
显然,这取决于您要查询的数据的大小。 1TB数据库可能被证明无法导入RAM。
答案 1 :(得分:0)
你在找这个吗?
Process p = null;
try {
Runtime runtime = Runtime.getRuntime();
p = runtime.exec("mysqldump -uroot -pdbpass --add-drop-database -B dbname -r " + "filepath" + "Filename" + ".sql");
//change the dbpass and dbname with your dbpass and dbname
int processComplete = p.waitFor();
if (processComplete == 0) {
System.out.println("Backup created successfully!");
} else {
lblMessage.setText("Could not create the backup");
}
} catch (Exception e) {
e.printStackTrace();
}