【问题标题】:Using database mysql in Java在 Java 中使用数据库 mysql
【发布时间】:2012-12-19 20:36:01
【问题描述】:

我已经开始尝试一些东西,以便我可以将 mysql 数据库与 Java 一起使用。首先我有一些问题。

我在 PHP 开发中经常使用 mysql,但从未使用过 Java。我可以使用 MAMP 带来的 MySQL,还是必须单独安装它?

其次.. 我在教程的帮助下创建了这段代码,但我得到的唯一输出是

com.mysql.jdbc.Driver

您可以在下面找到我为此使用的代码:

package Databases;

import java.sql.*;

public class MysqlConnect{

/* These variable values are used to setup
the Connection object */

 static final String URL = "jdbc:mysql://localhost:3306/test";
 static final String USER = "root";
 static final String PASSWORD = "root";
 static final String DRIVER = "com.mysql.jdbc.Driver";

 public Connection getConnection() throws SQLException {
    Connection con = null;
    try {
       Class.forName(DRIVER); 
       con = DriverManager.getConnection(URL, USER, PASSWORD);
    }
    catch(ClassNotFoundException e) {
       System.out.println(e.getMessage());
       System.exit(-1);
    }
    return con;
 }

 public void getEmployees() {
    ResultSet rs = null;
    try {
       Statement s = getConnection().createStatement();
       rs = s.executeQuery("SELECT id, name, job_id, location FROM person");
       System.out.format("%3s %-15s %-7s %-7s%n", 
          "ID", "NAME", "JOB ID", 
            "LOCATION");
       System.out.format("%3s %15s %7s %7s%n", 
          "---", "---------------", 
            "-------", "--------");

       while(rs.next()) {
          long id = rs.getLong("id");
          String name = rs.getString("name");
          long job = rs.getLong("job_id");
          String location = rs.getString("location");
          System.out.format("%-3d %-15s %7d %5s%n", 
             id, name, job, location);
       }
    }
    catch(SQLException e) {
       System.out.println(e.getMessage());
       System.exit(-1);
    }
 }
}

【问题讨论】:

  • 包含调用getEmployees方法的代码。
  • 您甚至会在哪里获得打印声明?我在您的代码中看不到它的合理位置。
  • 打印异常的堆栈跟踪,你会看到什么问题
  • 请不要乱改题,导致所有答案无效。如果您有新问题,请提出新问题。我已回滚您的无效编辑。

标签: java mysql jdbc


【解决方案1】:

它来自以下块:

catch(ClassNotFoundException e) {
   System.out.println(e.getMessage());
   System.exit(-1);
}

这是一种非常糟糕的异常处理方式。您只是在打印异常消息。你不知道发生了什么。而只是抛出它(最终会得到一个很好的堆栈跟踪),或者单独打印一个更具描述性的消息以及异常消息,例如

catch(ClassNotFoundException e) {
   System.out.println("JDBC driver class not found in runtime classpath: " + e.getMessage());
   System.exit(-1);
}

如何修复特定异常实际上是第二个问题(有一个非常明显的答案:只需将包含 JDBC 驱动程序类的 JAR 文件放在运行时类路径中),但是,你可能会发现这个迷你教程很有帮助:@ 987654321@.


与具体问题无关,我不确定您正在阅读哪个教程,但我会持保留态度。除了糟糕的异常处理之外,它还通过从不关闭结果集、语句和连接来泄漏getEmployees() 方法中的数据库资源。这也绝对不是一个好习惯。如何做到这一点也已经在前面链接的迷你教程中介绍过。另见:How often should Connection, Statement and ResultSet be closed in JDBC?

【讨论】:

  • 我使用本教程:java.blogs.webucator.com/2010/07/05/…,很抱歉代码不佳,我刚刚开始使用 Java 编程。还在学习 :) 如果我可以使用 MAMP MySQL,你能回答我的问题吗?
  • MySQL 服务器是 MySQL 服务器。您当前的问题绝对不是由不正确的 MySQL 安装引起的。更重要的是,代码永远无法进入创建与相关数据库的连接的步骤。
  • 啊,好吧,我已经修改了我的代码,就像在 oracle 文档中一样。但我仍然不明白将驱动程序 jar 文件放在哪里。我也像现在一样更改了上面的代码。
  • 就在运行时类路径中。迷你教程中也提到了这一点。
【解决方案2】:

是的,您需要在本地或远程安装 MySQL 服务器。

如果您还从 MySQL 下载页面下载了 jdbc Driver jar,则该代码将可用。并且您使用正确的用户名和密码配置了您的 MySQL 实例。

【讨论】:

  • 我是不是不能用MAMP自带的MySQL?
  • 当然你可以使用同一个MySQL实例。 MySQL 数据库就是 MySQL 数据库。
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
相关资源
最近更新 更多