加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

macos – 尝试使用OSX使用schemacrawler连接到sqlite db – 为什

发布时间:2020-12-12 19:00:56 所属栏目:百科 来源:网络整理
导读:见底部得出结论: 我正在尝试使用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 我在安装schema
见底部得出结论:

我正在尝试使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读