首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中具有分离类的数据库连接

问java中具有分离类的数据库连接
EN

Stack Overflow用户
提问于 2014-11-27 18:52:18
回答 5查看 1.8K关注 0票数 0

我用main方法编写了一段连接mysql数据库的Java代码,并成功地获得了结果。但是,当我将数据库代码分离到单独的类中时,我会遇到连接到数据库的问题,但是我什么都不做

代码如下:

代码语言:javascript
复制
package database;

import java.sql.ResultSet;
import java.sql.SQLException;

public class DataBase {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //Connection connect = DriverManager.getConnection("jdbc:mysql://localhost/javadb", "root", "123");
        System.out.println("sadsa");
        ConnectToDatabase db = new ConnectToDatabase("javadb", "root", "123");
        System.out.println("sadsa");

        String sqlStatement =    "SELECT  *\n" +
                                    "FROM `javadb`.`user`\n" +
                                    " LIMIT 1000;";


        ResultSet result = db.makeQuery(sqlStatement);

        while (result.next()) {
            System.out.println(result.getString("ID")
                    + " " + result.getString("UserName")
                    + " " + result.getString("Password")
                    );
        }

        db.closeConnection();

    }

}

分离的类:

代码语言:javascript
复制
package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class ConnectToDatabase {

    // Database Variables
    private final String databaseName;// = "jdbc:mysql://localhost/javadb";  //URL
    private final String databaseUserName;// = "root";
    private final String databasePassword;// = "123";
    private Connection connect;
    private Statement sqlStatement;

    // Connect to Database
    public ConnectToDatabase( String givenDatabaseName,String givenDatabaseUserName, String givenDatabasePassword) throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        this.databaseName = givenDatabaseName;
        this.databaseUserName = givenDatabaseUserName;
        this.databasePassword = givenDatabasePassword;

        this.connect = DriverManager.getConnection("jdbc:mysql://localhost/"+givenDatabaseName, givenDatabaseName, givenDatabasePassword);
        this.sqlStatement = this.connect.createStatement();
    }

    public ResultSet makeQuery(String givenStatement) throws SQLException{
        setSqlStatement(givenStatement);
        return sqlStatement.executeQuery(givenStatement);
    }



    public String getDatabaseUserName() {
        return databaseUserName;
    }
    public String getDatabasePassword() {
        return databasePassword;
    }
    public String getDatabaseName() {
        return databaseName;
    }    
    public void setSqlStatement(Statement sqlStatement) {
        this.sqlStatement = sqlStatement;
    }
    public void closeConnection() throws SQLException{
        connect.close();
    }

    private void setSqlStatement(String givenStatement) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}

注意:在main方法中,如果我编写相同的信息来直接连接,那么它将正常工作:

代码语言:javascript
复制
Connection connect = DriverManager.getConnection("jdbc:mysql://localhost/javadb", "root", "123");

以下是错误消息:

代码语言:javascript
复制
Exception in thread "main" java.sql.SQLException: Access denied for user 'javadb'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:925)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4615)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1302)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:822)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at database.ConnectToDatabase.<init>(ConnectToDatabase.java:27)
    at database.DataBase.main(DataBase.java:15)
Java Result: 1

非常感谢

EN

回答 5

Stack Overflow用户

发布于 2014-11-27 18:56:29

在创建ConnectToDatabase实例时,您可能没有传递正确的参数值。你能展示一下那部分代码吗?

票数 0
EN

Stack Overflow用户

发布于 2014-11-27 18:56:40

您需要指定端口号。喜欢

代码语言:javascript
复制
jdbc:mysql://localhost:3306/javadb
票数 0
EN

Stack Overflow用户

发布于 2014-11-27 19:02:39

您必须在前面指定端口号,但在单独的类中缺少端口号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27168842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档