macos – 尝试使用OSX使用schemacrawler连接到sqlite db – 为什么要求用户?

前端之家收集整理的这篇文章主要介绍了macos – 尝试使用OSX使用schemacrawler连接到sqlite db – 为什么要求用户?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
底部得出结论:

我正在尝试使用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即可继续成功.

解决方法

史蒂夫,

您需要像这样指定数据库

"-database=/Library/Application Support/MyApp/Data/MyApp.db"

请注意双引号以允许数据库文件的路径中的空间和-database命令行开关.我也删除了反斜杠,因为整个开关用双引号括起来.

有关命令行的帮助,只需运行:

java -classpath lib/*:. schemacrawler.tools.sqlite.Main

Sualeh Fatehi,SchemaCrawler

猜你在找的Sqlite相关文章