最近几天我试图学习如何通过 Java 访问 mySQL 数据库。
我能够加载驱动程序并连接到数据库(至少我这么认为,因为我在那里没有遇到异常..)
代码是:
import java.sql.*;
public class test
{
public static void main(String[] args)
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("driver loaded...");
}
catch(ClassNotFoundException e){
System.out.println("Error in loading the driver..."+e);
System.exit(0);
}
try
{
Connection dbConnection= DriverManager.getConnection("jdbc:odbc:test","root","password");
System.out.println("Connection successful...");
Statement stmt = dbConntection.createStatement();
stmt.executeUpdate("create table Accounts ( name char(20) )");
}
catch(SQLException e)
{
System.out.println("database-ConnectionError: "+e);
System.exit(0);
}
}
}
当我执行它时,它说:
驱动程序已加载...
连接成功...
数据库连接错误:java.sql.SQLException:[MySQL][ODBC 5.2(w) 驱动程序][mysqld-5.5.31]未选择数据库
我真的不知道问题所在,因为我以为数据库是在“getConnection”过程中选择的....
我尝试通过添加此行来选择数据库:
stmt.executeUpdate("use test;");
创建声明后。
不幸的是它不起作用,因为我遇到了另一个异常,它说我应该检查语法。我也不明白,因为在我的命令行中它工作得很好...... 我不知道是否可以通过 Java 使用这些类型的命令,如果不能,请原谅我的错误。
我希望你能帮助我,我在自己的搜索过程中没有错过解决方案!
已经感谢所有回复并花时间解决我的问题的人!
ps。如果我忘记指出一些重要信息(我认为我没有指出),请询问:)
编辑:我还尝试在运行时创建一个新数据库
stmt.executeUpdate("CREATE DATABASE test;");
这确实有效,但数据库也不会被选择...
在添加表之前,您首先必须选择一个数据库。 您可以使用以下命令创建新数据库:
CREATE DATABASE database_name
您可以通过以下方式连接到特定数据库:
String url = "jdbc:mysql://localhost/databasename";
String username = "test";
String password = "test";
Connection connection = DriverManager.getConnection(url, username, password);
首先,我正在考虑我的答案,以向您展示另一种更好的连接 MySQL 数据库的方法,它更容易且更少出现意外的 Exception(s)。
您需要执行一些步骤:
.jar
添加到库中,或者 YouTube 上有很多教程)。请参阅下面的示例,我为您制作了演示如何在 MySQL 上连接和执行查询的示例:
import java.sql.*;
public class MySqlConnection {
private String MYSQL_DRIVER = "com.mysql.jdbc.Driver";
private String MYSQL_URL = "jdbc:mysql://localhost:3306/test";
private Connection con;
private Statement st;
private ResultSet rs;
public MySqlConnection() {
try {
Class.forName(MYSQL_DRIVER);
System.out.println("Class Loaded....");
con = DriverManager.getConnection(MYSQL_URL,"","");
System.out.println("Connected to the database....");
st = con.createStatement();
int c =st.executeUpdate("CREATE TABLE Accounts (Name VARCHAR(30))");
System.out.println("Table have been created.");
System.out.println(c+" Row(s) have been affected");
con.close();
} catch(ClassNotFoundException ex) {
System.out.println("ClassNotFoundException:\n"+ex.toString());
ex.printStackTrace();
} catch(SQLException ex) {
System.out.println("SQLException:\n"+ex.toString());
ex.printStackTrace();
}
}
public static void main(String...args) {
new MySqlConnection();
}
}
这是您更新的示例,对我有用。
public static void main(String[] args) throws InstantiationException,
IllegalAccessException {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("driver loaded...");
} catch (ClassNotFoundException e) {
System.out.println("Error in loading the driver..." + e);
System.exit(0);
}
try {
Connection dbConnection = DriverManager
.getConnection("jdbc:mysql://localhost/test?user=root&password=password");
System.out.println("Connection successful...");
Statement stmt = dbConnection.createStatement();
stmt.executeUpdate("create table Accounts ( name char(20) )");
} catch (SQLException e) {
System.out.println("database-ConnectionError: " + e);
System.exit(0);
}
}
确保您已将正确的 mysql 连接器添加到构建路径中。我用的是:
mysql-connector-java-5.1.24-bin.jar
static final String DB_URL = "jdbc:mysql://localhost:3306/sys";
在 URL 中使用数据库名称。 它对我有用
感谢@Dheeraj Kumar K 的快速帮助。