Java 如何在简化jdbc程序的同时消除此错误

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

你好 我正在制作一个从数据库中获取数据的简单程序。我下载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.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”。我没有回答拱门上的答案,所以我只是回答,因为我知道。