将Java连接到MySQL数据库

你如何连接到Java中的MySQL数据库?

DriverManager是一个相当古老的做事方式。 更好的方法是获得一个DataSource ,通过查看一个你的应用服务器容器已经为你configuration:

 Context context = new InitialContext(); DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB"); 

或直接从数据库驱动程序实例化和configuration一个:

 MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setUser("scott"); dataSource.setPassword("tiger"); dataSource.setServerName("myDBHost.example.org"); 

然后从中获取连接,与上面一样:

 Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS"); ... rs.close(); stmt.close(); conn.close(); 

以下是一步一步解释如何安装MySQL和JDBC以及如何使用它:

  1. 下载并安装MySQL服务器 。 只要按照惯常的方式去做 记住端口号,每当你改变它。 这是默认的3306

  2. 下载 JDBC驱动程序并放入类path中 ,解压缩ZIP文件并将包含的JAR文件放入类path中。 供应商特定的JDBC驱动程序是JDBC API的具体实现( 教程在这里 )。

    如果您使用的是像Eclipse或Netbeans这样的IDE,那么可以通过将JAR文件作为添加到项目属性中的“ 生成path”中,将其添加到类path中。

    如果您在命令控制台中使用“plain vanilla”,则需要在执行Java应用程序时在-cp-classpath参数中指定JAR文件的path。

      java -cp。; / path / to / mysql-connector.jar com.example.YourClass 

    . 只是在那里添加当前目录到类path,以便它可以findcom.example.YourClass; 是Windows中的类path分隔符。 在Unix和克隆:应该使用。

  3. 在MySQL中创build一个数据库 。 我们来创build一个数据库javabase 。 你当然想要World Domination,所以我们也使用UTF-8。

     CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
  4. 为Java 创build一个用户并授予其访问权限 。 只是因为使用root是一个不好的做法。

     CREATE USER 'java'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password'; 

    是的, java是用户名, password是这里的密码。

  5. 确定 JDBC URL 。 要使用Java连接MySQL数据库,您需要使用以下语法的JDBC URL:

      JDBC:MySQL的://主机名:端口/数据库名称 
    • hostname :安装MySQL服务器的主机名。 如果它安装在运行Java代码的同一台机器上,则可以使用localhost 。 它也可以是一个像127.0.0.1这样的IP地址。 如果您遇到连接问题,并使用127.0.0.1而不是localhost解决它,那么你的networking/ DNS /主机configuration有问题。

    • port :MySQL服务器侦听的TCP / IP端口。 这是默认的3306

    • databasename :你想连接的数据库的名称。 这是javabase

    所以最终的url应该如下所示:

      JDBC:MySQL的://本地主机:3306 / javabase 
  6. 使用Java testing与 MySQL 的连接 。 使用main()方法创build一个简单的Java类来testing连接。

     String url = "jdbc:mysql://localhost:3306/javabase"; String username = "java"; String password = "password"; System.out.println("Connecting database..."); try (Connection connection = DriverManager.getConnection(url, username, password)) { System.out.println("Database connected!"); } catch (SQLException e) { throw new IllegalStateException("Cannot connect the database!", e); } 

    如果您遇到SQLException: No suitable driver ,那么这意味着JDBC驱动程序根本不是自动加载的,或者是JDBC URL是错误的(例如,它不能被任何加载的驱动程序识别)。 通常,JDBC 4.0驱动程序应当在运行时类path中放置时自动加载。 要排除一个和其他,你可以随时手动加载它如下:

     System.out.println("Loading driver..."); try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver loaded!"); } catch (ClassNotFoundException e) { throw new IllegalStateException("Cannot find the driver in the classpath!", e); } 

    请注意,这里不需要newInstance()调用。 这只是修复旧的和org.gjt.mm.mysql.Driver 。 这里解释 。 如果这一行抛出ClassNotFoundException ,那么包含JDBC驱动程序类的JAR文件根本就不在类path中。

    请注意, 连接之前 ,您无需每次加载驱动程序。 在应用程序启动时只有一次就足够了。

    如果您遇到SQLException: Connection refusedConnection timed out或MySQL特定的CommunicationsException: Communications link failure ,则意味着数据库根本无法访问。 这可能有一个或多个以下原因:

    1. JDBC URL中的IP地址或主机名是错误的。
    2. 本地DNS服务器无法识别JDBC URL中的主机名。
    3. JDBC URL中缺less端口号或错误。
    4. 数据库服务器已closures。
    5. 数据库服务器不接受TCP / IP连接。
    6. 数据库服务器已经用完了连接。
    7. Java和DB之间的东西阻塞连接,例如防火墙或代理。

    要解决这个或那个问题,请遵循以下build议:

    1. 使用pingvalidation并testing它们。
    2. 刷新DNS或使用JDBC URL中的IP地址。
    3. 根据my.cnfvalidation。
    4. 启动数据库。
    5. validationmysqld是否在没有--skip-networking option情况下启动。
    6. 重新启动数据库,并相应地修复你的代码,最终closures连接。
    7. 禁用防火墙和/或configuration防火墙/代理以允许/转发端口。

    请注意,closuresConnection 非常重要。 如果您不closures连接并在短时间内保持连接状态,那么数据库可能会耗尽连接,并且您的应用程序可能会中断。 始终在“ try-with-resources语句中获取“ Connection 。 或者如果你还没有使用Java 7,那么finallytry-finally块中明确地closures它。 finallyclosures只是为了确保它closures,以及在发生exception的情况下。 这也适用于StatementPreparedStatementResultSet

这就是连通性问题。 你可以在这里find一个更高级的教程,在基本的DAO类的帮助下,如何在数据库中加载和存储完整的Java模型对象。


使用单例模式进行数据库连接是一个不好的方法。 请参阅其他问题: http : //stackoverflow.com/q/9428573/ 。 这是一个首发的错误。

初始化数据库常量

创build常量属性数据库用户名,密码,URL和驱动程序,轮询限制等

 // init database constants private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver"; private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name"; private static final String USERNAME = "root"; private static final String PASSWORD = ""; private static final String MAX_POOL = "250"; // set your own limit 

初始化连接和属性

一旦build立连接,最好存储为重用目的。

 // init connection object private Connection connection; // init properties object private Properties properties; 

创build属性

属性对象保存连接信息,检查是否已经设置。

 // create properties private Properties getProperties() { if (properties == null) { properties = new Properties(); properties.setProperty("user", USERNAME); properties.setProperty("password", PASSWORD); properties.setProperty("MaxPooledStatements", MAX_POOL); } return properties; } 

连接数据库

现在使用初始化的常量和属性连接到数据库。

 // connect database public Connection connect() { if (connection == null) { try { Class.forName(DATABASE_DRIVER); connection = DriverManager.getConnection(DATABASE_URL, getProperties()); } catch (ClassNotFoundException | SQLException e) { // Java 7+ e.printStackTrace(); } } return connection; } 

断开数据库

一旦完成数据库操作,只需closures连接即可。

 // disconnect database public void disconnect() { if (connection != null) { try { connection.close(); connection = null; } catch (SQLException e) { e.printStackTrace(); } } } 

一切在一起

更改database_name,用户名和密码后,直接使用此类MysqlConnect

 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class MysqlConnect { // init database constants private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver"; private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name"; private static final String USERNAME = "root"; private static final String PASSWORD = ""; private static final String MAX_POOL = "250"; // init connection object private Connection connection; // init properties object private Properties properties; // create properties private Properties getProperties() { if (properties == null) { properties = new Properties(); properties.setProperty("user", USERNAME); properties.setProperty("password", PASSWORD); properties.setProperty("MaxPooledStatements", MAX_POOL); } return properties; } // connect database public Connection connect() { if (connection == null) { try { Class.forName(DATABASE_DRIVER); connection = DriverManager.getConnection(DATABASE_URL, getProperties()); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } return connection; } // disconnect database public void disconnect() { if (connection != null) { try { connection.close(); connection = null; } catch (SQLException e) { e.printStackTrace(); } } } } 

如何使用?

初始化数据库类。

 // !_ note _! this is just init // it will not create a connection MysqlConnect mysqlConnect = new MysqlConnect(); 

你的代码中的其他地方…

 String sql = "SELECT * FROM `stackoverflow`"; try { PreparedStatement statement = mysqlConnect.connect().prepareStatement(sql); ... go on ... ... go on ... ... DONE .... } catch (SQLException e) { e.printStackTrace(); } finally { mysqlConnect.disconnect(); } 

这是所有🙂如果有什么改进编辑它! 希望这是有帮助的。

 String url = "jdbc:mysql://127.0.0.1:3306/yourdatabase"; String user = "username"; String password = "password"; // Load the Connector/J driver Class.forName("com.mysql.jdbc.Driver").newInstance(); // Establish connection to MySQL Connection conn = DriverManager.getConnection(url, user, password); 

以下是从MySQL数据库中获取数据所需的最低限度:

 Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/foo", "root", "password"); Statement stmt = conn.createStatement(); stmt.execute("SELECT * FROM `FOO.BAR`"); stmt.close(); conn.close(); 

添加exception处理,configuration等。

简短和甜蜜的代码。

 try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver Loaded"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testDB","root",""); //Database Name - testDB, Username - "root", Password - "" System.out.println("Connected..."); } catch(Exception e) { e.printStackTrace(); } 

对于SQL Server 2012

 try { String url = "jdbc:sqlserver://KHILAN:1433;databaseName=testDB;user=Khilan;password=Tuxedo123"; //KHILAN is Host and 1433 is port number Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println("Driver Loaded"); conn = DriverManager.getConnection(url); System.out.println("Connected..."); } catch(Exception e) { e.printStackTrace(); } 

你可以在这里看到从Java应用程序连接MySQL数据库的所有步骤。 对于其他数据库,只需要在第一步中更改驱动程序。 请确保您提供正确的数据库path和正确的用户名和密码。

访问http://apekshit.com/t/51/Steps-to-connect-Database-using-JAVA

你需要在你的classpath中有mysql连接器jar。

在Java JDBC API使数据库的一切。 使用JDBC我们可以编写Java应用程序
1.发送查询或将SQL更新到数据库(任何关系数据库)2.检索并处理来自数据库的结果

通过以下三个步骤,我们可以从任何数据库检索数据

 Connection con = DriverManager.getConnection( "jdbc:myDriver:DatabaseName", dBuserName, dBuserPassword); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } 

我之前使用的Connection ,它看起来像最简单的方法,但也有build议, if声明 – 确切地说

 Connection con = DriverManager.getConnection( "jdbc:myDriver:DatabaseName", dBuserName, dBuserPassword); if (con != null){ //..handle your code there } 

或者像这样的东西:)

可能有一些情况,而getConnection可以返回null 🙂

与useSSL的MySQL JDBC连接。

 private String db_server = BaseMethods.getSystemData("db_server"); private String db_user = BaseMethods.getSystemData("db_user"); private String db_password = BaseMethods.getSystemData("db_password"); private String connectToDb() throws Exception { String jdbcDriver = "com.mysql.jdbc.Driver"; String dbUrl = "jdbc:mysql://" + db_server + "?verifyServerCertificate=false" + "&useSSL=true" + "&requireSSL=true"; System.setProperty(jdbcDriver, ""); Class.forName(jdbcDriver).newInstance(); Connection conn = DriverManager.getConnection(dbUrl, db_user, db_password); Statement statement = conn.createStatement(); String query = "SELECT EXTERNAL_ID FROM offer_letter where ID =" + "\"" + letterID + "\""; ResultSet resultSet = statement.executeQuery(query); resultSet.next(); return resultSet.getString(1); } 

MySql JDBC连接:

 Class.forName("com.mysql.jdbc.Driver"); Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","Username","Password"); Statement stmt=con.createStatement(); stmt = con.createStatement(); ResultSet rs=stmt.executeQuery("Select * from Table"); 

短代码

 public class DB { public static Connection c; public static Connection getConnection() throws Exception { if (c == null) { Class.forName("com.mysql.jdbc.Driver"); c =DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASE", "USERNAME", "Password"); } return c; } // Send data TO Database public static void setData(String sql) throws Exception { DB.getConnection().createStatement().executeUpdate(sql); } // Get Data From Database public static ResultSet getData(String sql) throws Exception { ResultSet rs = DB.getConnection().createStatement().executeQuery(sql); return rs; } }