带有连接的Java Mysql查询数据库

时间:2013-08-08 14:09:44

标签: java mysql database jdbc connection

提前感谢您的帮助。我在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());确实有效

3 个答案:

答案 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
  • 使用数据库连接池而不是手动获取连接。有些库可以为您处理BoneCP
  • 可能你是编程的新手,所以最好以正确的方式开始并在层中开发你的应用程序(进一步阅读:Multitier architecture)。有了这个基础,我们可以说DAO(或数据服务,取决于你如何命名)应该只包含访问和检索数据的方法,其他客户端可以根据需要或需要使用它,因此它将是最好返回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对象,它没有您寻找的方法。删除它。