带连接的javamysql查询数据库

带连接的javamysql查询数据库,java,mysql,database,jdbc,connection,Java,Mysql,Database,Jdbc,Connection,提前感谢您的帮助。我正在Eclipse中使用java创建一个数据库客户端应用程序。我的数据库使用MySQL 5.6。我有一个方法来创建并返回一个连接对象,用于查询数据库,还有一个方法可以将表中的所有行作为JSON数组返回。当尝试调用连接方法时,查询方法出现了问题 在:试试看{ con.getDBConnection(); 它告诉我getDBConnection()有一个错误;它给出的建议是将cast添加到“con” 我无法从main方法获得要编译的查询方法 package binaparts.d

提前感谢您的帮助。我正在Eclipse中使用java创建一个数据库客户端应用程序。我的数据库使用MySQL 5.6。我有一个方法来创建并返回一个连接对象,用于查询数据库,还有一个方法可以将表中的所有行作为JSON数组返回。当尝试调用连接方法时,查询方法出现了问题

在:试试看{ con.getDBConnection(); 它告诉我getDBConnection()有一个错误;它给出的建议是将cast添加到“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());
在此代码中确实起作用

    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命名约定。)

在此代码中

    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命名约定。)

returnAllParts\queryReturnAllParts
方法中,更改

con.getDBConnection();

问题是
con
java.sql.Connection
中的一个变量,它没有
getDBConnection
方法。由于当前的
returnAllParts
类扩展了
DBConnect
类,因此它可以毫无问题地访问
公共连接getDBConnection
方法

System.out.println(con.getUser());可以正常工作

这是因为在
Main#Main
类中,您已经声明了
DBConnect con
。请不要将此变量与在其他方法中声明的
con
变量混淆


与问题没有直接关系,但我建议您对当前代码/设计进行一些改进:

  • 更改
    returnAllParts
    类的名称,以获得对未来读者更有意义的内容(即使您在几天或几周后也将成为代码的未来读者)。从阅读代码来看,该类似乎应该重命名为
    PartList
  • 使用数据库连接池而不是手动获取连接。有一些库可以为您的同类处理此问题
  • 可能您是编程新手,因此最好从正确的方式开始,分层开发应用程序(进一步阅读:)。在此基础上,我们可以说DAO(或数据服务,取决于您如何命名)应该只包含访问和检索数据的方法,其他客户端可以按照他们想要/需要的方式使用数据,因此最好返回
    列表
    对象,并且应用程序中的另一层(可能是最接近表示的层)将对象转换为JSON字符串
  • 从设计角度来看,如果您的数据库访问对象使用
    DBConnect
    对象而不是从其扩展,则会更好。这样,每个数据库连接配置可以有一个与所有相关DAO关联的
    DBConnect
    对象

在您的
returnAllParts\queryReturnAllParts
方法中,更改

con.getDBConnection();

问题是
con
java.sql.Connection
中的一个变量,它没有
getDBConnection
方法。由于当前的
returnAllParts
类扩展了
DBConnect
类,因此它可以毫无问题地访问
公共连接getDBConnection
方法

System.out.println(con.getUser());可以正常工作

这是因为在
Main#Main
类中,您已经声明了
DBConnect con
。请不要将此变量与在其他方法中声明的
con
变量混淆


与问题没有直接关系,但我建议您对当前代码/设计进行一些改进:

  • 更改
    returnAllParts
    类的名称,以获得对未来读者更有意义的内容(即使您在几天或几周后也将成为代码的未来读者)。从阅读代码来看,该类似乎应该重命名为
    PartList
  • 使用数据库连接池而不是手动获取连接。有一些库可以为您的同类处理此问题
  • 可能您是编程新手,因此最好从正确的方式开始,分层开发应用程序(进一步阅读:)。在此基础上,我们可以说DAO(或数据服务,取决于您如何命名)应该只包含访问和检索数据的方法,其他客户端可以按照他们想要/需要的方式使用数据,因此最好返回
    列表
    对象,并且应用程序中的另一层(可能是最接近表示的层)将对象转换为JSON字符串
  • 从设计角度来看,如果您的数据库访问对象使用
    DBConnect
    对象而不是从其扩展,则会更好。这样,每个数据库连接配置可以有一个与所有相关DAO关联的
    DBConnect
    对象
在“returnAllParts”方法中定义连接con;

该连接是一个java.sql.Connection对象,它没有您寻求的方法。请将其删除。

在您定义的“returnAllParts”方法中