2013-08-27 2 views
0

Я действительно помогаю кому-нибудь, кто был бы добр, чтобы помочь мне разрешить это. Я был с ним со вчерашнего дня.Запрос базы данных с помощью конструктора

Посмотрите, что я пытаюсь сделать, это создать класс запросов к базе данных, который я могу повторно использовать снова и снова как можно больше раз, без необходимости писать запрос каждый раз, когда мне нужно искать или отображать элементы из базы данных.

Я хотел бы иметь возможность передавать спецификации запроса через конструктор.

я однако, получаю эту ошибку:

run: 
Connecting to a selected database... 
Connected database successfully... 
Creating statement... 
org.h2.jdbc.JdbcSQLException: Data conversion error converting ; SQL statement: 

Это мой код до сих пор:

import java.sql.*; 

public class RsToAList { 
    private final String table; 
    private final String columns; 
    private final String whereColumn; 
    private final String equalsEntry; 

    public RsToAList (String columns, String table, String whereColumn, String equalsEntry) { 
     this.table = table; 
     this.columns = columns; 
     this.whereColumn = whereColumn; 
     this.equalsEntry = equalsEntry; 
    } 

    // JDBC driver name and database URL 
    static String JDBC_DRIVER = "org.h2.Driver"; 
    static String DB_URL = "jdbc:h2:file:C:/tryDb/tryDb"; 

    // Database credentials 
    static String USER = "sa"; 
    static String PASS = ""; 

    public static void main (String[] args) { 
     RsToAList tryAndGet = new RsToAList("fullNames", "CLIENT", "postOfficeBoxNumber", "6448"); 
     tryAndGet.ourQueryMethod(); 
    } 

    public void ourQueryMethod() { 
     Connection conn = null; 
     Statement stmt = null; 

     try { 
      // STEP 2: Register JDBC driver 
      Class.forName(getJDBC_DRIVER()); 

      // STEP 3: Open a connection 
      System.out.println("Connecting to a selected database..."); 
      conn = DriverManager.getConnection(getDB_URL(), getUSER(), getPASS()); 
      System.out.println("Connected database successfully..."); 

      // STEP 4: Execute a query 
      System.out.println("Creating statement..."); 
      stmt = conn.createStatement(); 

      String sql = "SELECT " + (columns) + " FROM " + (table) + " WHERE "+ (whereColumn) +" = "+ (equalsEntry) +""; 
      ResultSet rs = stmt.executeQuery(sql); 

      //STEP 5: Extract data from result set 
      while (rs.next()) { 
       // Retrieve by column name 
       String first = rs.getString(columns); 

       // Display values 
       System.out.print("ID: " + first); 
      } 

      rs.close(); 
     } catch (SQLException se) { 
      // Handle errors for JDBC 
      se.printStackTrace(); 
     } catch (Exception e) { 
      // Handle errors for Class.forName 
      e.printStackTrace(); 
     } finally { 
      // finally block used to close resources 
      try { 
       if (stmt != null) 
        conn.close(); 
      } catch (SQLException se) { 
      } // do nothing 
      try { 
       if (conn != null) 
        conn.close(); 
      } catch (SQLException se) { 
       se.printStackTrace(); 
      } // end finally try 
     } // end try 
     System.out.println("Goodbye!"); 
    } // end main 



    /** 
    * @return the JDBC_DRIVER 
    */ 
    public static String getJDBC_DRIVER() { 
     return JDBC_DRIVER; 
    } 

    /** 
    * @param aJDBC_DRIVER the JDBC_DRIVER to set 
    */ 
    public static void setJDBC_DRIVER(String aJDBC_DRIVER) { 
     JDBC_DRIVER = aJDBC_DRIVER; 
    } 

    /** 
    * @return the DB_URL 
    */ 
    public static String getDB_URL() { 
     return DB_URL; 
    } 

    /** 
    * @param aDB_URL the DB_URL to set 
    */ 
    public static void setDB_URL(String aDB_URL) { 
     DB_URL = aDB_URL; 
    } 

    /** 
    * @return the USER 
    */ 
    public static String getUSER() { 
     return USER; 
    } 

    /** 
    * @param aUSER the USER to set 
    */ 
    public static void setUSER(String aUSER) { 
     USER = aUSER; 
    } 

    /** 
    * @return the PASS 
    */ 
    public static String getPASS() { 
     return PASS; 
    } 

    /** 
    * @param aPASS the PASS to set 
    */ 
    public static void setPASS(String aPASS) { 
     PASS = aPASS; 
    } 

} 

Я в JAVA/Программирование новичок, и я пытаюсь научить себя, как для кода из дома, если мой вопрос кажется слишком простым, или я, кажется, что-то пропустил в своем коде.

Edit:

Я не уверен, если это может помочь вам помочь мне, но это класс, который создает таблицу базы данных:

//STEP 1. Import required packages 
import java.sql.*; 

public class JDBCExampleCreateTables { 
    // JDBC driver name and database URL 
    private static String JDBC_DRIVER = "org.h2.Driver"; 
    private static String DB_URL = "jdbc:h2:file:C:/tryDb/tryDb"; 

    // Database credentials 
    private static String USER = "sa"; 
    private static String PASS = ""; 

    public static void main (String[] args) { 
     Connection conn = null; 
     Statement stmt = null; 

     try { 
      //STEP 2: Register JDBC driver 
      Class.forName(JDBC_DRIVER); 

      //STEP 3: Open a connection 
      System.out.println("Connecting to a selected database..."); 
      conn = DriverManager.getConnection(DB_URL, USER, PASS); 
      System.out.println("Connected database successfully..."); 

      //STEP 4: Execute a query 
      System.out.println("Creating table in given database..."); 
      stmt = conn.createStatement(); 

      String sql = "CREATE TABLE CLIENT " + 
        "(ID INT UNSIGNED NOT NULL AUTO_INCREMENT, " + 
        " fullNames VARCHAR(255), " + 
        " iDNumber VARCHAR(255), " + 
        " pINNumber VARCHAR(255), " + 
        " passportNumber VARCHAR(255), " + 
        " postOfficeBoxNumber VARCHAR(255), " + 
        " postalCode VARCHAR(255), " + 
        " telephoneNumberLandline VARCHAR(255), " + 
        " telephoneNumberMobile VARCHAR(255)) "; 

      stmt.executeUpdate(sql); 
      System.out.println("Created table in given database..."); 

     } catch (SQLException se) { 
      //Handle errors for JDBC 
      se.printStackTrace(); 
     } catch (Exception e) { 
      // Handle errors for Class.forName 
      e.printStackTrace(); 
     } finally { 
      // finally block used to close resources 
      try { 
       if (stmt!=null) 
        conn.close(); 
      } catch(SQLException se) { 
      } // do nothing 
      try { 
       if (conn!=null) 
        conn.close(); 
      } catch (SQLException se) { 
       se.printStackTrace(); 
      } // end finally try 
     } // end try 
     System.out.println("Goodbye!"); 
    } // end main 
} // end 
+0

Является ли столбец 'postOfficeBoxNumber' символом' int' или 'varchar'? – MadProgrammer

+0

Это тип варчара. Я также редактировал свой вопрос, чтобы включить класс, который создает таблицу. Надеюсь, это поможет. Спасибо, что посмотрел на мой вопрос и спросил. – ORey

ответ

1

Хотя вы не указали тип столбца для условия where. Но большинство proabably может быть пропускание строкового значения, где положения, но не заключая его в одинарных кавычках:

String sql = "SELECT " + (columns) + " FROM " + (table) + " WHERE "+ (whereColumn) +" = "+ (equalsEntry) +""; 

изменить его:

String sql = "SELECT " + (columns) + " FROM " + (table) + " WHERE "+ (whereColumn) +" ='"+ (equalsEntry) +"'"; 

Другим потенциальным кандидат на дефект это statementn:

String first = rs.getString(columns); 

может выдавать ошибку, если какой-либо из вашего типа столбца не VARCHAR

+0

Пожалуйста, оставьте первый комментарий, затем сделайте отрицательный голос. Спасибо за вашу критику. –

+0

@ user2718587 Вы уверены, что ваш equalsEntry в запросе select содержит одинарные кавычки? –

+0

Извините. Ваше решение сделало трюк. Огромное спасибо. – ORey

4

Похоже, ошибка в вашем SQL заявление. Убедитесь, что тип данных, который вы сравниваете, совместим.PreparedStatement удобен, а не конкатенации запросов.

PreparedStatement stm = conn.prepareStatement("select * from person where name=?"); 
stm.setString(1,"ABC"); 
ResultSet rs= stm.executeQuery(); 
+0

Благодарим вас за ответ. – ORey

Смежные вопросы