Sql 如果数据库中存在字符串,则使用JDBC

Sql 如果数据库中存在字符串,则使用JDBC,sql,jdbc,Sql,Jdbc,我试图找到数据库(所有表)中存在特定字符串的位置。我有以下代码: DatabaseMetaData md = con.getMetaData(); ResultSet rs = md.getTables(null, null, "%", null); while (rs.next()) { stm = con.createStatement(); String sql;

我试图找到数据库(所有表)中存在特定字符串的位置。我有以下代码:

 DatabaseMetaData md = con.getMetaData();
           ResultSet rs = md.getTables(null, null, "%", null);
           while (rs.next()) {
                stm = con.createStatement();
                String sql;
                sql = "SELECT * FROM "+rs.getString(3)+"WHERE F01 = '0000000000998'";
                rs2 = stm.executeQuery(sql);
                while(rs2.next()){                   
                System.out.println(rs.getString(3));
             }                    
           }          

问题在于某些表F01不存在,因此它会引发异常。是否有任何方法可以在不指定列的情况下搜索整个表?

您使用的是哪个数据库

请查看此讨论帖子。在调用支票之前,您可能会对如何确保列存在有一些好主意

甲骨文 您可以检查这些查询

从“用户”选项卡中选择列名称、数据长度、数据类型,其中下(表名称)=“产品” 从用户选项卡上的列中选择表名、列名、数据长度、数据类型,其中上部(列名)='PRODUCTID'

所以你的电话应该是这样的

从用户选项卡的列中选择表名,其中上部(列名)=“F01” 然后 从“+rs.getString(1)+”中选择*其中F01='0000000000 998'


正如您看到的,我使用的是LOWER和UPPER,您需要确保包含它们,这是您可以理解的原因,即使SQL语句中不区分大小写,但是进行条件检查的值是区分大小写的。

以下Java代码循环遍历每个表中的每个VARCHAR/NVARCHAR列,并对该列执行
选择TOP 1
,以查看它是否命中:

import java.sql.*;
导入java.util.ArrayList;
导入java.util.List;
公共类JDBCQuery{
公共静态void main(字符串参数[]){
字符串textToSearchFor=“Gord”//测试数据
System.out.println(String.format(“在以下位置找到了值“%s”):,textToSearchFor);
连接conn=null;
PreparedStatement ps=null;
试一试{
forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
字符串连接字符串=
“jdbc:odbc:Driver={sqlserver};”+
“服务器=。\\SQLEXPRESS;”+
“受信任的连接=是;”+
“数据库=myDb”;
conn=DriverManager.getConnection(connectionString);
DatabaseMetaData md=conn.getMetaData();
ResultSet mdrs=md.getTables(null,null,“%”,新字符串[]{“TABLE”});
List tableList=new ArrayList();
while(mdrs.next()){
tableList.add(String.format(“[%s].[%s].[%s]”,mdrs.getString(1),mdrs.getString(2),mdrs.getString(3));
//即,[catalogName].[schemaName].[tableName]
}
mdrs.close();
for(字符串tableName:tableList){
语句stmt=conn.createStatement();
stmt.execute(“从“+tableName+”中选择*,其中0=1”);
ResultSet rs0=stmt.getResultSet();
ResultSetMetaData rsmd=rs0.getMetaData();
List columnList=new ArrayList();

对于(int colIndex=1;colIndex您需要获取每个表的元数据,首先检查是否包含该特定列。如果是,则执行查询。请查看api,因为我知道,我使用的是Microsoft SQL。我想知道是否有一种方法可以在不指定列的情况下检查条目。目前,这种方法可行,但如果我想使用sea的话在不同的列中搜索其他内容只需更改查询并将其提供给我,速度会快得多。我知道,我使用的是Microsoft SQL。我想知道是否有一种方法可以在不指定列的情况下检查条目。目前这可以行得通,但如果我想在不同的列中搜索其他内容,可能会很困难只需更改查询,它就会给我一个表。所有数据库服务器都有不同的模式,这种查询将取决于特定的数据库服务器类型