【发布时间】:2012-04-25 22:15:12
【问题描述】:
您将如何从 java 程序将 .sql 文件加载到 mysql 数据库中?我尝试从自包含的 jar 中提取一个 sql 资源文件,我尝试使用 processBuilder 来定位和运行外部 shell 命令。我已经尝试了所有方法,但似乎没有一种方法是正确的。
所以要查看我遇到的问题,只需这样做:
在任何数据库上执行 mysqldump:mysqldump -uroot --routines myDB > ~/Desktop/myDB.sql
现在让我们尝试从 java/jdbc api 重新创建整个数据库。如何正确、正确地使用我们的 mydB.sql 文件?
认为您创建了一个很好的 jdbc 语句来循环您的数据库文件可能会很好,但是当您确实获得这样的转储部分时,它会变得丑陋和笨拙
下面会遇到问题:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `DOG`
--
DROP TABLE IF EXISTS `DOG`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `DOG` (
`DOG_ID` mediumint(9) NOT NULL,
`OWNER_ID` mediumint(9) NOT NULL,
PRIMARY KEY (`DOG_ID`),
KEY `CHANNEL_FK1` (`OWNER_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
这是jdbc的局限吗?是否有一些不错的 api 我可以调用,例如 mysql.createDatabase(myDB.sql)。
【问题讨论】:
-
它对你有用吗,你只是问一下这种方式的正确性还是它从来没有用过?如果没有,那么请说出问题所在:它是否在 jar 中定位文件?还是它在 ProcessBuilder 中运行文件?还是两者兼而有之?
-
@A.J.查看我刚刚发布的编辑。我一直在摸索试图让它发挥作用,但我从来不觉得它是一种专业的方法。我正在做一个黑客工作方法,我想看看正确的方法