提前感谢您的帮助。我在Eclipse中使用java创建了一个Database-Client应用程序。我使用MySQL 5.6作为我的数据库。我有一个方法来创建和返回一个我将用于查询数据库的连接对象,以及一个将表中的所有行作为JSON数组返回的方法。尝试调用连接方法时,问题出现在查询方法中。
at:try { con.getDBConnection(); 它告诉我getDBConnection();并且它给出的建议是将强制转换添加到'con'。
我无法从main方法中获取编译查询方法。
package binaparts.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.*;
import org.json.JSONArray;
import binaparts.util.ToJSON;
public class returnAllParts extends DBConnect{
public JSONArray queryReturnAllParts() throws Exception{
PreparedStatement query = null;
Connection con = null;
ToJSON converter = new ToJSON();
JSONArray json = new JSONArray();
try{
con.getDBConnection();
query = con.prepareStatement("SELECT * " + "from `parts list`" );
ResultSet rs = query.executeQuery();
json = converter.toJSONArray(rs);
query.close();
}catch(SQLException SQLex){
SQLex.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}finally{
if(con != null){
con.close();
}
}
return json;
}
}
下面的dao包代码:
package binaparts.dao;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import com.mysql.jdbc.PreparedStatement;
public class DBConnect {
private Statement st = null;
private ResultSet rs = null;
private Connection con = null;
private PreparedStatement pst = null;
private String serverName = "localhost";
private String portNumber = "3306";
private String dbms = "mysql";
private Object userName = "dwilson";
private Object password = "abc";
public Connection getDBConnection() throws SQLException {
Properties connectionProps = new Properties();
connectionProps.put("user", this.userName);
connectionProps.put("password", this.password);
try{
con = DriverManager.getConnection("jdbc:" + this.dbms + "://" + this.serverName + ":" + this.portNumber + "/", connectionProps);
}catch(Exception ex){
ex.printStackTrace();
con = null;
}finally{
if(con != null){
System.out.println("Connected to database");
}
}
return con;
}
public String getUser(){
try{
DatabaseMetaData dmd = con.getMetaData();
String username = dmd.getUserName();
//System.out.println("Current User: "+username);
return username;
}catch(Exception ex){
System.out.println(ex);
ex.printStackTrace();
return null;
}
}
}
主要方法如下:
public class Main{
public static void main(String[] args){
DBConnect con = new DBConnect();
try {
con.getDBConnection();
System.out.println(con.getUser());
System.out.println(con.queryReturnAllParts());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Login loginGUI = new Login();
//MainFrames m = new MainFrames();
//m.displayGUI();
}
}
System.out.println(con.getUser());
确实有效
答案 0 :(得分:3)
在returnAllParts#queryReturnAllParts
方法中,更改
con.getDBConnection();
通过
con = getDBConnection();
问题是con
是来自java.sql.Connection
的变量,并且没有getDBConnection
方法。由于您当前的returnAllParts
类扩展了DBConnect
类,因此可以毫无问题地访问public Connection getDBConnection
类。
System.out.println(con.getUser());工作
这是因为在Main#main
课程中,您已声明DBConnect con
。不要将此变量与其他方法中声明的con
变量混淆。
与问题没有直接关系,但我建议您对当前的代码/设计进行一些改进:
returnAllParts
课程的名称,以便为将来的读者提供更有意义的内容(即使您将在某些日子或几周内成为未来的代码读者)。从阅读代码开始,看起来这个类应该重命名为PartList
。List<PartList>
对象,并且应用程序中的另一个层(可能是最接近的表示)将应用从对象到JSON字符串的转换。DBConnect
对象而不是从中扩展,那么它将更好。通过这种方式,每个数据库连接配置可以有一个DBConnect
对象与所有相关的DAO关联。答案 1 :(得分:1)
在此代码中
PreparedStatement query = null;
Connection con ;
ToJSON converter = new ToJSON();
JSONArray json = new JSONArray();
try{
con.getDBConnection();
变量con
的类型为java.sql.Connection
,而不是DBConnect
。该类型没有getDBConnection()
方法。我相信你打算用
con = this.getDBConnection();
在您的第一个returnAllParts
课程中(扩展DBConnect
)。 (请使用Java命名约定。)
答案 2 :(得分:0)
在“returnAllParts”方法中,您可以定义Connection con ;
。
Connection
是java.sql.Connection对象,它没有您寻找的方法。删除它。