我在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();
}
}
答案 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权限。不必要地授予权限是额外的安全风险。)
答案 1 :(得分:0)
基本上,数据库中的权限未设置为允许您使用的用户以编程方式访问数据库。
您将需要:
进入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