问题描述
我用HyperSQL找到了下一个git repo。而且我正在检查JDBC interfaces的数据库使用情况。
例如,我想与数据库建立连接并执行一些语句:
Connection connection = ...
Statement statement = connection.createStatement();
String query = "CREATE TABLE mytable (id IDENTITY,value VARCHAR)";
statement.executeUpdate(query);
JDBCDriver -> JDBCConnection -> JDBCStatement -> Session -> Result (?) -> ? -> HsqlDB
public synchronized ResultSet executeQuery(
String sql) throws sqlException {
fetchResult(sql,StatementTypes.RETURN_RESULT,JDBCStatementBase.NO_GENERATED_KEYS,null,null);
return getResultSet();
}
private void fetchResult(String sql,int statementRetType,int generatedKeys,int[] generatedindexes,String[] generatednames) throws sqlException {
...
resultIn = connection.sessionProxy.execute(resultOut);
...
}
但是我在哪里可以找到负责通过DBMS引擎执行sql语句的代码?
解决方法
HSQLDB源代码位于SourceForge.net上托管的Subversion(而非Git)存储库中:https://sourceforge.net/p/hsqldb/svn/HEAD/tree/base/trunk/
如果遵循Session.execute(Result ...)方法,并找到EXECDIRECT的大小写,则将看到该语句首先被编译,然后被执行。您可以从那里开始,其中包括大量负责编译和执行不同类型的SQL语句的类。