见底部得出结论:
我正在尝试使用schemacrawler来绘制sqlite数据库.我的设置:
> OSX 10.8
>从Here下载的SchemaCrawler 10.5
>从Oracle下载的Java版本1.7.0_45
> sqlite版本:3.7.12 2012-04-03 19:43:07 86b8481be7e76cccc92d14ce762d21bfb69504af
我在安装schemacrawler的目录中,并使用以下命令行:
stebro$java -classpath lib/*:. schemacrawler.tools.sqlite.Main /Library/Application\ Support/MyApp/Data/MyApp.db -command="select count(*) from myTable" -infolevel=maximum SchemaCrawler 10.5 Copyright (c) 2000-2013,Sualeh Fatehi. SchemaCrawler is a database schema discovery and comprehension tool. You can search for database schema objects using regular expressions,and output the schema and data in a readable text format. You can find potential schema design issues with lint. The output serves for database documentation is designed to be diff-ed against other database schemas. SchemaCrawler also generates schema diagrams. password: java.sql.sqlException: Could not connect to database,for user null at schemacrawler.schemacrawler.BaseDatabaseConnectionOptions.getConnection(BaseDatabaseConnectionOptions.java:93) at schemacrawler.schemacrawler.BaseDatabaseConnectionOptions.getConnection(BaseDatabaseConnectionOptions.java:70) at schemacrawler.tools.commandline.SchemaCrawlerCommandLine.execute(SchemaCrawlerCommandLine.java:173) at schemacrawler.tools.commandline.SchemaCrawlerMain.main(SchemaCrawlerMain.java:93) at schemacrawler.tools.commandline.SchemaCrawlerMain.main(SchemaCrawlerMain.java:52) at schemacrawler.tools.sqlite.Main.main(Main.java:43) Caused by: java.lang.IllegalArgumentException: Insufficient parameters for database connection URL: missing [database] at schemacrawler.schemacrawler.DatabaseConfigConnectionOptions.getConnectionUrl(DatabaseConfigConnectionOptions.java:73) at schemacrawler.schemacrawler.BaseDatabaseConnectionOptions.getConnection(BaseDatabaseConnectionOptions.java:89) ... 5 more
如果我指定-password,我会得到相同的错误,并为-user指定各种值也是一样的. sqlite不需要用户/密码 – 为什么jdbc或schemacrawler会问我一个?
附录:
这是一系列特定的命令,它们创建一个简单的数据库,然后尝试使用schemacrawler绘制它:
bash-3.2$sqlite3 MyApp.db sqlite3 MyApp.db sqlite version 3.7.12 2012-04-03 19:43:07 Enter ".help" for instructions Enter sql statements terminated with a ";" sqlite> create table smbtest(col1 integer,col2 integer); create table smbtest(col1 integer,col2 integer); sqlite> ^D bash-3.2$~/bin/sunjava -classpath lib/*:. schemacrawler.tools.sqlite.Main -database=MyApp.db -infolevel=maximum -command=graph -outputformat=pdf -outputfile=myapp.pdf SchemaCrawler 10.5 Copyright (c) 2000-2013,and output the schema and data in a readable text format. You can find potential schema design issues with lint. The output serves for database documentation is designed to be diff-ed against other database schemas. SchemaCrawler also generates schema diagrams. password: Graphviz was not available to create the requested graph. Please reinstall Graphviz,and make it available on the system PATH. Meanwhile,a .dot text file has been created instead. This .dot file can be opened in any Graphviz file viewer. java.io.IOException: Cannot run program "dot": error=2,No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041) at schemacrawler.tools.integration.graph.ProcessExecutor.execute(ProcessExecutor.java:124) at schemacrawler.tools.integration.graph.GraphGenerator.generateDiagram(GraphGenerator.java:87) at schemacrawler.tools.integration.graph.GraphExecutable.executeOn(GraphExecutable.java:123) at schemacrawler.tools.executable.SchemaCrawlerExecutable.executeOn(SchemaCrawlerExecutable.java:87) at schemacrawler.tools.executable.BaseExecutable.execute(BaseExecutable.java:77) at schemacrawler.tools.commandline.SchemaCrawlerCommandLine.execute(SchemaCrawlerCommandLine.java:176) at schemacrawler.tools.commandline.SchemaCrawlerMain.main(SchemaCrawlerMain.java:93) at schemacrawler.tools.commandline.SchemaCrawlerMain.main(SchemaCrawlerMain.java:52) at schemacrawler.tools.sqlite.Main.main(Main.java:43) Caused by: java.io.IOException: error=2,No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:135) at java.lang.ProcessImpl.start(ProcessImpl.java:130) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022) ... 9 more
定论:
问题在于我的数据库的路径中有一个空格;没有反斜杠,双引号或单引号的组合,或两者都解决了问题.从与我的db文件相同的目录运行命令就可以了.空间问题可能是由于我不理解在bash中使用的正确转义序列 – 如果schemacrawler使用我的名字作为命令行的一部分产生其他进程,我可能必须双重转义空格.
但是,应用程序确实继续询问我的密码,但只需按Enter即可继续成功.