MySQL 报错 mysql Failed to open file 'sqlname.sql', error: 2

在 linux 下msql 运行  .sql 报错

source   /usr/tmp/xxx.sql;

确定 .sql文件没有问题 

原因 后面路径是按照相对路径来的 故可以

cd /usr/tmp

mysql -u root -p root

source xxx.sql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一段使用Druid实现SQL解析的Java代码,可以解析MySQL、ClickHouse和Elasticsearch的SQL语句,并提取出其中的表和字段信息,构建出血缘关系对象: ```java import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.clickhouse.parser.ClickhouseStatementParser; import com.alibaba.druid.sql.dialect.elasticsearch.parser.ElasticsearchStatementParser; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.util.JdbcConstants; import java.util.ArrayList; import java.util.List; public class SQLParser { public static void main(String[] args) { String mysqlSQL = "SELECT t1.id, t2.name FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id WHERE t1.status = 1"; String clickhouseSQL = "SELECT id, name FROM table WHERE status = 1"; String elasticsearchSQL = "{\"query\":{\"match\":{\"name\":\"john\"}}}"; Bloodline bloodline = parseSQL(mysqlSQL); System.out.println(bloodline); bloodline = parseSQL(clickhouseSQL); System.out.println(bloodline); bloodline = parseSQL(elasticsearchSQL); System.out.println(bloodline); } public static Bloodline parseSQL(String sql) { Bloodline bloodline = new Bloodline(); String dbType = JdbcConstants.MYSQL; if (sql.startsWith("{")) { dbType = JdbcConstants.ELASTIC_SEARCH; } else if (sql.toUpperCase().startsWith("SELECT")) { dbType = JdbcConstants.CLICKHOUSE; } List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType); for (SQLStatement stmt : stmtList) { parseTableAndColumn(stmt, bloodline); } return bloodline; } private static void parseTableAndColumn(SQLObject sqlObject, Bloodline bloodline) { if (sqlObject instanceof SQLName) { SQLName sqlName = (SQLName) sqlObject; String tableName = sqlName.getSimpleName(); bloodline.addTable(tableName); } else if (sqlObject instanceof SQLExpr) { SQLExpr sqlExpr = (SQLExpr) sqlObject; String columnName = sqlExpr.toString(); bloodline.addColumn(columnName); } else { List<SQLObject> childObjects = sqlObject.getChildren(); for (SQLObject childObject : childObjects) { parseTableAndColumn(childObject, bloodline); } } } } ``` 在这个代码中,我们使用了Druid提供的SQL解析工具类`SQLUtils`对输入的SQL语句进行解析,并根据不同的数据库类型选择不同的解析器。对于MySQL和ClickHouse,我们选择了对应的解析器`MySqlStatementParser`和`ClickHouseStatementParser`;对于Elasticsearch,我们使用了通用的解析器`ElasticsearchStatementParser`。 解析出的SQL语句被转换成了一个`SQLStatement`对象列表,我们遍历这个列表,将其中的表名和列名提取出来,并添加到血缘关系对象中。具体来说,我们使用了递归的方式遍历SQL语法树,对于每个`SQLName`节点,我们将其中的表名添加到血缘关系对象中;对于每个`SQLExpr`节点,我们将其中的列名添加到血缘关系对象中。 需要注意的是,我们在解析Elasticsearch语句时,将其作为一个JSON字符串进行解析,并且不对其中的内容进行深度解析。因此,如果需要对Elasticsearch语句进行更详细的解析,可以参考Druid的官方文档,使用Elasticsearch的Java客户端库来对查询请求进行解析。 在pom.xml文件中,需要添加Druid的依赖(可以根据实际需要选择不同的版本): ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency> ``` 同时,为了解析ClickHouse和Elasticsearch语句,需要添加对应的Druid插件的依赖(同样可以根据实际需要选择不同的版本): ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-parser-clickhouse</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-parser-elasticsearch</artifactId> <version>1.2.6</version> </dependency> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值