java - 通过 JavaWeb 在整个 MySQL 数据库中搜索关键字的推荐方法
问题描述
我正在尝试keyword search
通过 JSP 从我的整个 MySQL 数据库中实现一个,如果我选择的方法效率低下,我会感到困惑:(
我已经阅读information_schema
并发现所有列标签都在那里。
我尝试了下面的 SQL 语句来生成所有可能的查询:
SELECT CONCAT('SELECT * FROM ',table_schema,'.',table_name,
' WHERE ',column_name,' LIKE ','searchString',';')
FROM information_schema.columns
WHERE table_schema NOT IN ('information_schema','mysql','performance_schema')
AND (column_type LIKE 'char(%'
OR column_type LIKE 'varchar(%'
OR column_type LIKE '%text')
并尝试了 JSP 代码以获取所有可能的数据匹配。
<%
String searchString = "malayalam";
searchString = "''%"+searchString+"%'' ";
ArrayList<String> queries = new ArrayList<String>();
String sql="SELECT CONCAT('SELECT * FROM ',table_schema,'.',table_name,"
+ "' WHERE ',column_name,' LIKE ','"+searchString+"',';')"
+ "FROM information_schema.columns "
+ "WHERE table_schema NOT IN ('information_schema','mysql','performance_schema')"
+ "AND (column_type LIKE 'char(%'"
+ "OR column_type LIKE 'varchar(%'"
+ "OR column_type LIKE '%text')";
try{
DBConInfoSchema db = new DBConInfoSchema();
ResultSet rs = db.getData(sql);
while(rs.next()){
queries.add(rs.getString(1));
}
for(int i=0;i<queries.size();i++){
DBConInfoSchema dCon = new DBConInfoSchema();
ResultSet rsDemo = dCon.getData(queries.get(i));
if(rsDemo.next()){
out.print("<br/>Data found n query-"+i+" -> "+queries.get(i));
}
dCon.DBClose();
}
}catch(Exception w){
out.print("excep<br/>"+w);
}
%>
现在我得到了大量的查询。我很困惑它是好是坏?!在考虑效率时,这是一种不好的方法吗?
解决方案
在查询构建部分
SELECT CONCAT('SELECT * FROM ',table_schema,'.',table_name,
' WHERE ',column_name,' LIKE ','searchString',';')
FROM information_schema.columns
WHERE table_schema NOT IN ('information_schema','mysql','performance_schema')
AND (column_type LIKE 'char(%'
OR column_type LIKE 'varchar(%'
OR column_type LIKE '%text')
我已经更新了线路
WHERE table_schema NOT IN ('information_schema','mysql','performance_schema')
至
WHERE table_schema IN ('<my_table_name>')
生成所有搜索结果my_table_name
并保存ArrayList
并执行它们
ArrayList<String> queries = new ArrayList<String>();
DBConInfoSchema db = new DBConInfoSchema();
ResultSet rs = db.getData(sql_statement);
while(rs.next()){
queries.add(rs.getString(1));
}
从那里我整理出所需的数据。
-希望这可以帮助一些人。
注意:即使它对我有用,我仍然相信它天真纠正我如果有更好的方法来实现这一点
推荐阅读
- java - 从插件请求 Eclipse 重启的最佳实践是什么?
- html - 页脚上的图像不会停留在页脚上并在您向上/向下滚动时移动
- javascript - 为什么 Sequelize 使用 findAll() 只返回一个对象?
- amazon-web-services - 如何将 SonarQube 结果返回到 CodeBuild
- javascript - 如何上传完整文件夹及其文件
- reactjs - 两个带有 react-router 的独立路由系统
- tsql - 在一行中显示同一列中的多个项目时出现问题
- bash - 如何通过相似度对齐来自两个不同文件的行?
- reactjs - 如何使用反应路由器以编程方式导航
- rust - 如何在 Rust 的 cargo build 中指定 GLIBC 版本?