2016-02-11 67 views
1

我得到了一個代碼,它正在搜索整個數據庫。一切正常,唯一的問題是,我想用整數和字符等發佈整個元組。java - 搜索數據庫後,打印結果的全行

package src; 
import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.Scanner; 
import java.util.regex.Pattern; 

/* 
PATTERN MATCHING 
*/ 
public class BigSearch { 

    public static void main(String[] args) { 

      try { 

       String keyword; 
       String schema = "public"; 
       Boolean caseAware = true; 

       System.out.println("Insert the term we shall look for in the database."); 
       Scanner s = new Scanner(System.in); 
       keyword = s.nextLine(); 

       System.out.println("Do you want the search to be case sensitve " 
         + "\n1 - case sensitive" 
         + "\n0 - case insensitive"); 

       int caseAwareInt = s.nextInt(); 

       while (caseAwareInt != 0 && caseAwareInt != 1) { 
        System.out.println("You need to enter 1 or 0. Enter again!"); 
        caseAwareInt = s.nextInt(); 
       } 


       if (caseAwareInt == 1) { 
        caseAware = true; 
       } else if (caseAwareInt == 0) { 
        caseAware = false; 
       } 

       System.out.println("Your search is now case "); 
       if (caseAware) { 
        System.out.println("sensitive!"); 
       } 
       if (!caseAware) { 
        System.out.println("insensitive!"); 
       } 

       String like = ""; 

       if (caseAware) { 
        like = "LIKE"; 
       } else { 
        like = "ILIKE"; 
       } 
       Connectivity connectivity = new Connectivity(); 
       conn = connectivity.getConnection(); 
       Statement stmt = conn.createStatement(); 
       Statement stmt2 = conn.createStatement(); 
       Statement stmt3 = conn.createStatement(); 
       Statement stmt4 = conn.createStatement(); 
       Statement stmt5 = conn.createStatement(); 

       ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM pg_catalog.pg_tables WHERE schemaname = '" + schema + "';"); 
       ResultSet tablenames = stmt2.executeQuery("SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = '" + schema + "';"); 
       rs.next(); 
       int counttables = rs.getInt(1); 
       System.out.println("Tabellen im Schema: " + counttables); 

       int appearance = 0; 
       int diftables = 0; 

       for (int i = 0; i < counttables; i++) { 
        tablenames.next(); 
        ResultSet columnnames = stmt3.executeQuery("SELECT * " + 
          "FROM information_schema.columns " + 
          "WHERE table_schema = '" + schema + 
          "' AND table_name = '" + tablenames.getString(1) + 
          "' AND data_type = 'character varying'"); 

        ResultSet rss = stmt4.executeQuery("SELECT COUNT(*) " + 
          "FROM information_schema.columns " + 
          "WHERE table_schema = '" + schema + 
          "' AND table_name = '" + tablenames.getString(1) + 
          "' AND data_type = 'character varying'"); 

        rss.next(); 
        int countcolumns = rss.getInt (1); 
        System.out.println("Spalten in der Tabelle " + tablenames.getString(1) + ": " + countcolumns); 

        int count = 0; 

        for (int i2 = 0; i2 < countcolumns; i2++) { 
         columnnames.next(); 
         columnnames.getString(1); 

         System.out.println("Spaltenname: " + columnnames.getString(1)); 
         System.out.println("Tabelle: " + tablenames.getString(1)); 

         ResultSet containsString; 


         containsString = stmt5.executeQuery("SELECT * " 
           + "FROM " + tablenames.getString(1) 
           + " WHERE " + columnnames.getString(1) + " " + like + " '%" + keyword + "%'"); 

         while (containsString.next()) { 
          System.out.println(containsString.getString(1) + " -- contains your keyword"); 
          appearance++; 
          count ++; 
         } 
        } 
        if (count > 0) { 
         diftables ++; 
        } 
       } 

       System.out.println("The keyword was found " + appearance + " times in " + diftables + " different tales."); 

      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 

    } 

} 

我認爲這個問題是下面的代碼:

while (containsString.next()) { 
          System.out.println(containsString.getString(1) + " -- contains your keyword"); 
          appearance++; 
          count ++; 
         } 

因此,有我說的getString(1),但我想打印的全行,因爲所有的表有不同的變量類型和它的不同數字,我不能說getString 1,2,3等等。 .getRow do not work is good。 任何想法?

回答

1

無法一次獲取所有值。你需要逐列獲取它們。您可以使用getObject並讓該對象的默認toString()處理它。另一種選擇是使用ResultSetMetaData來獲得正確的處理類型,但這可能對您的需求太複雜。

getRow不起作用,因爲它「檢索當前行號」。

某些JDBC驅動程序將爲大多數數據類型支持getString併爲您處理轉換。

+1

我剛剛意識到我從未給過任何反饋。無論如何,這一切都結束了。謝謝! – D0ubD3aD