你如何用Java连接到MySQL数据库?
当我尝试时,我明白了
java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
Run Code Online (Sandbox Code Playgroud)
要么
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)
要么
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 461
这是一步一步解释如何安装MySQL和JDBC以及如何使用它:
下载并安装MySQL服务器.按照通常的方式做到这一点.无论何时更改端口号,请记住端口号.这是默认情况3306
.
下载 JDBC驱动程序并放入类路径,解压缩ZIP文件并将包含的JAR文件放在类路径中.特定于供应商的JDBC驱动程序是 JDBC API的具体实现(此处为教程).
如果您使用的是Eclipse或Netbeans之类的IDE,则可以通过将JAR文件作为库添加到项目属性中的构建路径来将其添加到类路径中.
如果您在命令控制台中执行"普通的vanilla",则需要在执行Java应用程序时在-cp
或-classpath
参数中指定JAR文件的路径.
java -cp .;/path/to/mysql-connector.jar com.example.YourClass
的.
是就在那里给添加当前目录到类路径中,以便它可以找到com.example.YourClass
和;
是类路径分隔符,因为它是在Windows中.在Unix中,:
应该使用克隆.
在MySQL中创建一个数据库.我们来创建一个数据库javabase
.你当然想要世界统治,所以让我们也使用UTF-8.
CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)为Java 创建用户并授予其访问权限.仅仅因为使用root
是一种不好的做法.
CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)
是的,java
是用户名,password
是这里的密码.
确定 JDBC URL.要使用Java连接MySQL数据库,您需要使用以下语法的JDBC URL:
jdbc:mysql://hostname:port/databasename
hostname
:安装MySQL服务器的主机名.如果它安装在您运行Java代码的同一台机器上,那么您可以使用它localhost
.它也可以是一个IP地址127.0.0.1
.如果您遇到连接问题并使用127.0.0.1
而不是localhost
解决它,那么您的网络/ DNS /主机配置中存在问题.
port
:MySQL服务器侦听的TCP/IP端口.这是默认情况3306
.
databasename
:您要连接的数据库的名称.那是javabase
.
所以最终的URL应如下所示:
jdbc:mysql://localhost:3306/javabase
使用Java 测试与 MySQL 的连接.使用main()
测试连接的方法创建一个简单的Java类.
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);
}
Run Code Online (Sandbox Code Playgroud)
如果你得到了SQLException: No suitable driver
,那么这意味着JDBC驱动程序根本没有自动加载,或者JDBC URL错误(即任何加载的驱动程序都无法识别它).通常,当您将JDBC 4.0驱动程序放在运行时类路径中时,应该自动加载它.要排除其中一个,您可以随时手动加载它,如下所示:
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);
}
Run Code Online (Sandbox Code Playgroud)
需要注意的是,newInstance()
在呼叫未在这里需要.它只是修复旧的和马车org.gjt.mm.mysql.Driver
.这里解释.如果此行抛出ClassNotFoundException
,则包含JDBC驱动程序类的JAR文件根本没有放在类路径中.
请注意,您不需要在连接之前每次都 加载驱动程序.在应用程序启动期间只需一次即可.
如果您获得SQLException: Connection refused
或Connection timed out
特定于MySQL CommunicationsException:
Communications link failure
,则意味着DB根本无法访问.这可能有以下一个或多个原因:
要解决这个问题,请遵循以下建议:
ping
.my.cnf
MySQL DB 验证它.--skip-networking option
.finally
.请注意,关闭Connection
它非常重要.如果您没有关闭连接并在短时间内继续获取大量连接,那么数据库可能会用完连接而您的应用程序可能会中断.始终Connection
在try-with-resources
声明中获得.或者,如果你对Java 7的是没有,明确地关闭它在finally
一个的try-finally
块.关闭finally
只是为了确保它在异常的情况下也会关闭.这也适用于Statement
,PreparedStatement
和ResultSet
.
就连接问题而言,这就是它.您可以在这里找到一个更高级的教程,如何借助基本的DAO类在数据库中加载和存储完整的Java模型对象.
使用单例模式进行数据库连接是一种不好的方法.请参阅其他问题:http://stackoverflow.com/q/9428573/.这是#1首发球员的错误.
Sea*_*wen 200
DriverManager
是一种相当古老的做事方式.更好的方法是DataSource
通过查找已经为您配置的app服务器容器来获取a :
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");
Run Code Online (Sandbox Code Playgroud)
或直接从数据库驱动程序实例化和配置一个:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");
Run Code Online (Sandbox Code Playgroud)
然后从上面获取连接,如上所述:
Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
Run Code Online (Sandbox Code Playgroud)
Mad*_*ota 38
创建常量属性数据库用户名,密码,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
Run Code Online (Sandbox Code Playgroud)
建立连接后,最好存储以便重复使用.
// init connection object
private Connection connection;
// init properties object
private Properties properties;
Run Code Online (Sandbox Code Playgroud)
属性对象保存连接信息,检查它是否已设置.
// 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;
}
Run Code Online (Sandbox Code Playgroud)
现在使用初始化的常量和属性连接到数据库.
// 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;
}
Run Code Online (Sandbox Code Playgroud)
完成数据库操作后,只需关闭连接即可.
// disconnect database
public void disconnect() {
if (connection != null) {
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
MysqlConnect
更改database_name,用户名和密码等后直接使用此类.
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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
初始化数据库类.
// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();
Run Code Online (Sandbox Code Playgroud)
你代码中的其他地方......
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();
}
Run Code Online (Sandbox Code Playgroud)
这都是:)如果有什么需要改进编辑它!希望这是有帮助的.
hef*_*ump 24
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);
Run Code Online (Sandbox Code Playgroud)
Kil*_*oth 13
这是从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();
Run Code Online (Sandbox Code Playgroud)
添加异常处理,配置等.
归档时间: |
|
查看次数: |
552413 次 |
最近记录: |