postgres 上的错误转换连接
Posted
技术标签:
【中文标题】postgres 上的错误转换连接【英文标题】:error cast connection on postgres 【发布时间】:2012-01-07 18:09:17 【问题描述】:大家晚安,这是我的第一个问题。
我在使用 tomcat webserver 运行 ZK 应用程序时遇到了一些问题
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;
tomcat 说行错误: DriverManager.registerDriver(new org.postgresql.Driver()); conn = (connection) DriverManager.getConnection(url,user,pwd);
我无法将投射连接更改为: conn = DriverManager.getConnection(url,user,pwd);
请大家帮忙,我被困了一夜T.T
【问题讨论】:
在Java中,类名/构造函数通常以大写字母开头,变量和方法以小写字母开头,通常不包含下划线 【参考方案1】:DriverManager 对象返回java.sql.Connection
的实现。它不会返回您的 controller.connection
类的实例。你的conn
变量应该是java.sql.Connection
类型。
注意:
Java 中的类,按照惯例,总是以大写字母开头 将您的类命名为connection
,并使其包装类Connection
的对象,这真的很令人困惑。如此混乱,以至于您被自己的代码弄糊涂了。
【讨论】:
【参考方案2】:改变这个:
private connection conn;
到这里:
private Connection conn;
还有这个:
conn = (connection) DriverManager.getConnection(url,user,pwd);
到这里:
conn = DriverManager.getConnection(url,user,pwd);
JDBC 的"Connection"
类以大写字母开头并位于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
。除非在 ZK 中,约定有些不同。
【讨论】:
我猜你的意思是“到这个:conn = DriverManager.getConnection(url,user,pwd);” 您的第二次更改在两条线上都是相同的。我想你的意思是 conn = (Connection) DriverManager.getConnection(url,user,pwd); 天哪,我忘记了我的班级名称和变量,谢谢先生它的作品:D @aulia 不客气!顺便说一句,我希望那不是您的通用密码! :) @Behrang Saeedzadeh 老实说,这不是我的密码先生:D以上是关于postgres 上的错误转换连接的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 Postgres 连接到数据库,但无法将 Amazon 服务器上的地址转换为 Amazon 数据库