将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以及如何使用它:
- 
下载并安装MySQL服务器 。 只要按照惯常的方式去做 记住端口号,每当你改变它。 这是默认的 3306。
- 
下载 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和克隆:应该使用。
- 
在MySQL中创build一个数据库 。 我们来创build一个数据库 javabase。 你当然想要World Domination,所以我们也使用UTF-8。CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
- 
为Java 创build一个用户并授予其访问权限 。 只是因为使用 root是一个不好的做法。CREATE USER 'java'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';是的, java是用户名,password是这里的密码。
- 
确定 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 
- 
- 
使用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 refused或Connection timed out或MySQL特定的CommunicationsException: Communications link failure,则意味着数据库根本无法访问。 这可能有一个或多个以下原因:- JDBC URL中的IP地址或主机名是错误的。
- 本地DNS服务器无法识别JDBC URL中的主机名。
- JDBC URL中缺less端口号或错误。
- 数据库服务器已closures。
- 数据库服务器不接受TCP / IP连接。
- 数据库服务器已经用完了连接。
- Java和DB之间的东西阻塞连接,例如防火墙或代理。
 要解决这个或那个问题,请遵循以下build议: -  使用pingvalidation并testing它们。
- 刷新DNS或使用JDBC URL中的IP地址。
-  根据my.cnfvalidation。
- 启动数据库。
-  validationmysqld是否在没有--skip-networking option情况下启动。
- 重新启动数据库,并相应地修复你的代码,最终closures连接。
- 禁用防火墙和/或configuration防火墙/代理以允许/转发端口。
 请注意,closures Connection非常重要。 如果您不closures连接并在短时间内保持连接状态,那么数据库可能会耗尽连接,并且您的应用程序可能会中断。 始终在“try-with-resources语句中获取“Connection。 或者如果你还没有使用Java 7,那么finally在try-finally块中明确地closures它。finallyclosures只是为了确保它closures,以及在发生exception的情况下。 这也适用于Statement,PreparedStatement和ResultSet。
这就是连通性问题。 你可以在这里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; } }