你能解决这个问题。
我正在尝试创建并使用名为TIGER的数据库。
如果我在MySQL中创建数据库并且运行完美,我没有问题。
我想要做的是从Java创建它。因此,当代码第一次运行时,它会在初始启动时创建数据库。如果可能的话,我想用一种干净的方法将其装箱。
有人可以告诉我你实际定位代码的位置
这是代码
private String jdbcDriver = "com.mysql.jdbc.Driver";
private String dbAddress = "jdbc:mysql://localhost:3306/";
private String dbName = "TIGER";
private String userName = "root";
private String password = "";
private PreparedStatement statement;
private ResultSet result;
private Connection con;
public DbStuff() {
try {
Class.forName(jdbcDriver);
con = DriverManager.getConnection(dbAddress + dbName, userName, password);
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
以下是创建数据库的代码
con = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword");
statement = Conn.createStatement();
int myResult = statement.executeUpdate("CREATE DATABASE TIGER");
提前致谢,感谢任何所有帮助
对于这些错误感到抱歉,因为我是一名长期读者,但却是新作家。
当我尝试运行代码的主要部分时,它会生成一个SQLException,因为数据库不存在。此时我想捕获异常并在那时创建数据库。但是,当我尝试这个时,它不会创建数据库。
答案 0 :(得分:13)
你可以随时运行
int myResult = statement.executeUpdate("CREATE DATABASE IF NOT EXISTS TIGER;")
如果在项目启动时运行它,它将只检查数据库是否存在,如果不存在,它将创建新数据库。
供参考:http://dev.mysql.com/doc/refman/5.0/en/create-database.html
答案 1 :(得分:5)
我建议使用这段代码
private String jdbcDriver = "com.mysql.jdbc.Driver";
private String dbAddress = "jdbc:mysql://localhost:3306/TIGER?createDatabaseIfNotExist=true";
private String userName = "root";
private String password = "";
private PreparedStatement statement;
private ResultSet result;
private Connection con;
public DbStuff() {
try {
Class.forName(jdbcDriver);
con = DriverManager.getConnection(dbAddress, userName, password);
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 2 :(得分:4)
尝试使用此代码。
public class DbStuff {
private static String jdbcDriver = "com.mysql.jdbc.Driver";
private static String dbName = "TIGER";
public static void main(String[] args) throws Exception {
Class.forName(jdbcDriver);
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=");
Statement s = conn.createStatement();
int Result = s.executeUpdate("CREATE DATABASE "+dbName);
}
}
答案 3 :(得分:1)
解决问题的简单方法是:
{{1}}
答案 4 :(得分:0)
与无关(问题)说明:
我不认为以编程方式生成数据库是个好主意。最好使用数据库附带的实用工具。与MySQL一起工作的每个人几乎肯定都熟悉实用工具,不必熟悉您的Java代码,更改它,编译它,并运行它来进行更改。此外,该实用程序具有丰富的功能,您的Java代码可能没有,例如分配权限,索引,设置外键等。
答案 5 :(得分:0)
首先,
我要感谢所有回答它的人确实得到不同的意见和看法。
这是我在一起的解决方案。
public class DbStuff {
private String jdbcDriver = "com.mysql.jdbc.Driver";
private String dbAddress = "jdbc:mysql://localhost:3306/";
private String userPass = "?user=root&password=";
private String dbName = "TIGER";
private String userName = "root";
private String password = "";
private PreparedStatement statement;
private ResultSet result;
private Connection con;
public DbStuff() {
try {
Class.forName(jdbcDriver);
con = DriverManager.getConnection(dbAddress + dbName, userName, password);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (SQLException e) {
createDatabase();
}
}
private void createDatabase() {
try {
Class.forName(jdbcDriver);
con = DriverManager.getConnection(dbAddress + userPass);
Statement s = con.createStatement();
int myResult = s.executeUpdate("CREATE DATABASE " + dbName);
}
catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
随意评论任何代码。我知道使用e.printStackTrace()不是最好的前进方式,不用担心它会在以后修改。
答案 6 :(得分:0)
几点需要注意并纠正 -
private Connection con;
,但您将其用作statement = Conn.createStatement();
您已声明对Prepared Statement private PreparedStatement statement;
的引用,但您正在创建Statement statement = Conn.createStatement();
的实例。
你的代码应该是 -
try {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword");
Statement statement = con.createStatement();
int myResult = statement.executeUpdate("CREATE DATABASE IF NOT EXISTS TIGER"); //should get 0
}
catch (SQLException e) {
System.out.println("Database creation failed");
e.printStackTrace();
}
请注意,当executeUpdate的返回值为0时,它可能意味着以下两种情况之一:
执行的语句是一个影响零行的更新语句。
执行的语句是DDL语句。