Java 如何在简化jdbc程序的同时消除此错误
你好 我正在制作一个从数据库中获取数据的简单程序。我下载sql for mac并插入模式,然后插入表和条目。所以我需要从数据库中检索数据。我正在使用mysql。 我还插入了mysql的conector jar。 我很喜欢 导入java.sql.*Java 如何在简化jdbc程序的同时消除此错误,java,mysql,jdbc,Java,Mysql,Jdbc,你好 我正在制作一个从数据库中获取数据的简单程序。我下载sql for mac并插入模式,然后插入表和条目。所以我需要从数据库中检索数据。我正在使用mysql。 我还插入了mysql的conector jar。 我很喜欢 导入java.sql.* ![public class FirstExample { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Dri
![public class FirstExample {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/Database";
// Database credentials
static final String USER = "";
static final String PASS = "";
public static void main(String\[\] args) {
Connection conn = null;
Statement stmt = null;
try{
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, name, age FROM Employee";
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while(rs.next()){
//Retrieve by column name
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("name");
// String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
// System.out.println(", Last: " + last);
}
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}finally{
//finally block used to close resources
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}// nothing we can do
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}//end finally try
}//end try
System.out.println("Goodbye!");
}//end main
}//end FirstExample][3]
Connecting to database...
Goodbye!
java.sql.SQLException: null, message from server: "Host '192.168.1.100' is not allowed to connect to this MySQL server"
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1086)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1114)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2493)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2526)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2311)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:347)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at FirstExample.main(FirstExample.java:21)
![公共类第一示例]{
//JDBC驱动程序名称和数据库URL
静态最终字符串JDBC_DRIVER=“com.mysql.JDBC.DRIVER”;
静态最终字符串DB_URL=“jdbc:mysql://localhost/Database";
//数据库凭据
静态最终字符串USER=“”;
静态最终字符串传递=”;
公共静态void main(字符串\[\]args){
连接conn=null;
语句stmt=null;
试一试{
//步骤2:注册JDBC驱动程序
Class.forName(“com.mysql.jdbc.Driver”);
//步骤3:打开连接
System.out.println(“连接到数据库…”);
conn=DriverManager.getConnection(DB_URL,USER,PASS);
//步骤4:执行查询
System.out.println(“创建语句…”);
stmt=conn.createStatement();
字符串sql;
sql=“从员工中选择id、姓名、年龄”;
结果集rs=stmt.executeQuery(sql);
//步骤5:从结果集中提取数据
while(rs.next()){
//按列名检索
int id=rs.getInt(“id”);
int age=rs.getInt(“年龄”);
String first=rs.getString(“名称”);
//字符串last=rs.getString(“last”);
//显示值
系统输出打印(“ID:+ID”);
系统输出打印(,年龄:+年龄);
系统输出打印(,First:+First);
//System.out.println(“,Last:+Last”);
}
//第六步:清理环境
rs.close();
stmt.close();
康涅狄格州关闭();
}捕获(SQLSE异常){
//处理JDBC的错误
se.printStackTrace();
}捕获(例外e){
//处理Class.forName的错误
e、 printStackTrace();
}最后{
//最后是用于关闭资源的块
试一试{
如果(stmt!=null)
stmt.close();
}捕获(SQLException se2){
}//我们无能为力
试一试{
如果(conn!=null)
康涅狄格州关闭();
}捕获(SQLSE异常){
se.printStackTrace();
}//结束最后一次尝试
}//结束尝试
System.out.println(“再见!”);
}//端干管
}//完[示例][3]
正在连接到数据库。。。
再见!
java.sql.SQLException:null,来自服务器的消息:“不允许主机'192.168.1.100'连接到此MySQL服务器”
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1086)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
位于com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1114)
位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2493)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2526)
位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2311)
位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:834)
位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:47)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411)
位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:347)
位于java.sql.DriverManager.getConnection(DriverManager.java:582)
位于java.sql.DriverManager.getConnection(DriverManager.java:185)
main(FirstExample.java:21)
您的DB用户不允许连接到MySQL服务器。在MySQL中(奇怪的是)有一个类似于防火墙的东西,访问是按用户和主机定义的。您需要通过任何SQL客户端连接到MySQL,并提供访问权限:
例如,访问范围有点太广,但应该可以:
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
如果您没有首先创建用户:
CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
您尚未在MySQL服务器上设置权限。@SotiriosDelimanolis如果您将评论转换为答案,我将对此进行投票。如何设置permission@DavidWallace我没有关于如何设置这些权限的详细信息。我不想发布不完整的答案:(请告诉大家如何设置权限为什么你从另一个线程复制并粘贴答案,而不是以注释的形式给出链接。一般的过程是:以root身份登录mysql,创建db,创建app user并向他授予privs,授予连接到mysql服务器主机的权限。完成。是的,它是从mysql文档复制的,这就是为什么两个答案中都有“monty”。我没有回答拱门上的答案,所以我只是回答,因为我知道。