从Java到MySQL的访问被拒绝错误

时间:2014-01-25 03:40:32

标签: java mysql jdbc

我在GUI中收到错误,因为我正在使用JGrasp作为此项目的IDE并且错误状态;

访问被拒绝用户'buiud458_raklar'@'d24-36-33-148.home1.cgocable.net'(使用密码:是)

这是应用程序的唯一类;

package net.roseindia.jtableExample;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import java.awt.*;
import java.sql.*;
import java.awt.event.*;

public class SearchResult implements ActionListener{
JFrame frame, frame1;
JTextField textbox;
JLabel label;
JButton button;
JPanel panel;
static JTable table;

String driverName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://buiud.com:3306/buiud458_androidhive";
String userName = "XXXX";
String password = "XXXX";
String[] columnNames = {"Roll No", "Name", "Class", "Section"};

public void createUI()
{
    frame = new JFrame("Database Search Result");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(null);
    textbox = new JTextField();
    textbox.setBounds(120,30,150,20); 
    label = new JLabel("Enter your roll no");
    label.setBounds(10, 30, 100, 20);
    button = new JButton("search");
    button.setBounds(120,130,150,20);
    button.addActionListener(this);

    frame.add(textbox);
    frame.add(label);
    frame.add(button);
    frame.setVisible(true);
    frame.setSize(500, 400);        
}   

public void actionPerformed(ActionEvent ae)
{
    button = (JButton)ae.getSource();
    System.out.println("Showing Table Data.......");
        showTableData();            
}   

public void showTableData()
{

    frame1 = new JFrame("Database Search Result");
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame1.setLayout(new BorderLayout());       
    //TableModel tm = new TableModel();
    DefaultTableModel model = new DefaultTableModel();
    model.setColumnIdentifiers(columnNames);
    //DefaultTableModel model = new DefaultTableModel(tm.getData1(), tm.getColumnNames());      
    //table = new JTable(model);
    table = new JTable();
    table.setModel(model);      
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
    table.setFillsViewportHeight(true);
    JScrollPane scroll = new JScrollPane(table);
    scroll.setHorizontalScrollBarPolicy(
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scroll.setVerticalScrollBarPolicy(
            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);      
    String textvalue = textbox.getText();
    String roll= "";
    String name= "";
    String cl = "";
    String sec = "";
    try
    {           
        Class.forName(driverName);      
        Connection con = DriverManager.getConnection(url, userName, password);
        String sql = "select * from products where pid = "+textvalue;
        PreparedStatement ps = con.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        int i =0;
        if(rs.next())
        {
            roll = rs.getString("pid");
            name = rs.getString("name");
            cl = rs.getString("price");
            sec = rs.getString("phone");                    
            model.addRow(new Object[]{roll, name, cl, sec});
            i++;                
        }
        if(i <1)
        {
            JOptionPane.showMessageDialog(null, "No Record Found","Error",
                    JOptionPane.ERROR_MESSAGE);
        }
        if(i ==1)
        {
        System.out.println(i+" Record Found");
        }
        else
        {
            System.out.println(i+" Records Found");
        }
    }
    catch(Exception ex)
    {
        JOptionPane.showMessageDialog(null, ex.getMessage(),"Error",
                JOptionPane.ERROR_MESSAGE);
    }
    frame1.add(scroll);
    frame1.setVisible(true);
    frame1.setSize(400,300);
}

public static void main(String args[])
{
    SearchResult sr = new SearchResult();
            sr.createUI();              
}
}

2 个答案:

答案 0 :(得分:1)

最可能的解释是用户未在MySQL中定义。

请注意,在MySQL中,用户通过用户连接的主机名(或IP地址)和用户名进行标识。 (注意:&#39;%&#39;可用作主机名的通配符,以允许来自任何主机的连接,但MySQL将首先查找完全匹配,然后如果不匹配则回退到通配符找到了。)

SELECT u.Host,
     , u.User
     , u.Password
  FROM mysql.user u
 WHERE u.User = 'buiud458_raklar'

我们希望那里的主机值为&#39; d24-36-33-148.home1.cgocable.net&#39;或者主机值为通配符为&#39; %的行&#39;

您可以将您使用的密码与存储在表格中的值进行比较,并使用密码功能......

SELECT PASSWORD('mysecret') 

每个user @ host都可以被授予对各个数据库的权限。

SELECT d.Host
     , d.User
     , d.Db
  FROM mysql.db d
 WHERE d.User = 'buiud458_raklar'

设置具有数据库权限的用户的最简单方法:

CREATE USER 'buiud458_raklar'@'d24-36-33-148.home1.cgocable.net' IDENTIFIED BY 'secret' ;
GRANT ALL PRIVILEGES ON mydb.* TO  'buiud458_raklar'@'d24-36-33-148.home1.cgocable.net' ;

(注意:向用户授予所有权限通常违反&#34;最低权限&#34;的最佳实践原则。此用户可能实际上并不需要每个权限,例如,DROP TABLE权限。不必要地授予权限是额外的安全风险。)

http://dev.mysql.com/doc/refman/5.5/en/adding-users.html

答案 1 :(得分:0)

基本上,数据库中的权限未设置为允许您使用的用户以编程方式访问数据库。

您将需要:

  • 访问mysqladmin
  • root用户/密码

进入mysqladmin并执行此命令(我根据您提供的消息假设用户名):

mysql> grant all on *.* to 'buiud458_raklar'@'d24-36-33-148.home1.cgocable.net' identified by SOMEPASSWORD with grant option;

当从主机d24-36-33-148.home1.cgocable.net访问时,上面的命令将为用户提供buiud458_raklar READ / WRITE / UPDATE / DELETE到每个表。我认为这就是你想要的。

如果没有,网上有很多文章,This article here at Stackoverflow.com