ошибка приведения соединения на postgres - PullRequest
1 голос
/ 07 января 2012

Доброй ночи всем, это мой первый вопрос.

У меня возникла проблема при запуске приложения ZK с веб-сервером tomcat

java.lang.ClassCastException: org.postgresql.jdbc4.Jdbc4Connection не может быть приведен к controller.connection controller.connection. (connection.java:27) controller.lap_keuangan.lk_Controller.preparelistlk (lk_Controller.java:34) controller.lap_keuangan.lk_Controller.doAfterCompose (lk_Controller.java:30)

это мой класс соединения:

package controller;

//import ommited


public class connection {

  private static final String url="jdbc:postgresql://192.168.56.101:5432/adempiere";
  private static final String user = "postgres";
  private static final String pwd = "auliaardy";
  private connection conn;

  public connection()throws Exception{
      try {
          DriverManager.registerDriver(new org.postgresql.Driver());
          conn =  (connection) DriverManager.getConnection(url,user,pwd);

      } catch (SQLException e) {
          System.out.println("Driver tidak ditemukan"+e);
      }
  }

  public Connection getConnection(){
      return (Connection) conn;
  }

  public void closeConnection(){
      try {
          conn.closeConnection();
      } catch (Exception e) {
          System.out.println("gagal menutup koneksi disebabkan: "+e);
      }
  }

  }

и это мой контроллер класса

//import ommited here

public class lk_Controller extends GenericForwardComposer {

    private Listbox listlk;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        preparelistlk();
    }

    public void preparelistlk() throws Exception {
        connection c = new connection();
        try {
            l_keuangan lk = new l_keuangan(c.getConnection());
            List<tbl_lk> llk = lk.getLKeuangan();
            ListModelList lml = new ListModelList(llk, true);
            listlk.setModel(lml);
            listlk.setItemRenderer(new ListitemRenderer() {

                @Override
                public void render(Listitem lslk, Object o) throws Exception {

                    try {

                        tbl_lk tl = (tbl_lk) o;
                        new Listcell(ubahtanggal()).setParent(lslk);
                        new Listcell(Integer.toString(tl.getSum_debit())).setParent(lslk);
                        new Listcell(Integer.toString(tl.getSum_credit())).setParent(lslk);
                        new Listcell(Integer.toString(tl.getTotal())).setParent(lslk);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public  String ubahtanggal() {
        tbl_lk lk = new tbl_lk();
        DateFormat df = new SimpleDateFormat("YYYY/MM/DD");
        long tanggal = lk.getTanggal().getTime();
        String tgl = df.format(tanggal);
        return tgl;




    }
}

Ошибка кота в строке: DriverManager.registerDriver (новый org.postgresql.Driver ()); conn = (соединение) DriverManager.getConnection (url, пользователь, pwd);

Не могу изменить литое соединение на: conn = DriverManager.getConnection (url, user, pwd);

пожалуйста, кто-нибудь помогите, я застрял за ночь T.T

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Объект DriverManager возвращает реализацию java.sql.Connection. Он не вернет экземпляр вашего controller.connection класса. Ваша переменная conn должна иметь тип java.sql.Connection.

Обратите внимание, что:

  • классы в Java, по соглашению, всегда начинаются с заглавной буквы
  • Наименование вашего класса connection и создание для него объекта класса Connection действительно очень запутанно. Так запутанно, что вы запутались в своем собственном коде.
0 голосов
/ 07 января 2012

Изменить это:

private connection conn;

к этому:

private Connection conn;

и это:

conn =  (connection) DriverManager.getConnection(url,user,pwd);

к этому:

conn =  DriverManager.getConnection(url,user,pwd);

Класс "Connection" JDBC начинается с заглавной буквы и находится в пакете java.sql (полное имя класса java.sql.Connection). Вы случайно используете строчную букву connection, которая является названием написанного вами класса, в который java.sql.Connection не может быть приведен.

Кроме того, в Java принято использовать CamelCase для имен классов, а имена классов не должны начинаться со строчных букв, поэтому лучше переименовать ваш класс в что-то вроде ConnectionUtil или ConnectionManager:

//
// NOTE: must be in ConnectionManager.java
//
package controller;

// imports ommited


public class ConnectionManager {

  private static final String url="jdbc:postgresql://192.168.56.101:5432/adempiere";
  private static final String user = "postgres";
  private static final String pwd = "auliaardy";
  private Connection conn;

  public Connection() throws Exception{
      try {
          DriverManager.registerDriver(new org.postgresql.Driver());
          conn =  (Connection) DriverManager.getConnection(url,user,pwd);

      } catch (SQLException e) {
          System.out.println("Driver tidak ditemukan"+e);
      }
  }

  public Connection getConnection() {
      return conn;
  }

  public void closeConnection() {
      try {
          conn.closeConnection();
      } catch (Exception e) {
          System.out.println("gagal menutup koneksi disebabkan: "+e);
      }
  }

}

Аналогично, вы должны переименовать lk_Controller во что-то вроде LKController. Если в ЗК соглашения не совсем другие.

...