我在一个使用 servlet 和 mysql 的应用程序中工作。
我想创建一个能够创建应用程序将使用的数据库的 .jar 文件。这只会执行一次,以创建数据库。
我访问数据库没问题,做这样的事情:
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conexion = (Connection)DriverManager.getConnection("jdbc:mysql://localhost/test","admin","admin");
if (!conexion.isClosed())
{
Statement st = (Statement) conexion.createStatement();
ResultSet rs = st.executeQuery("select * from table_name" );
}
conexion.close();
没关系,但我需要做的是从 java 类创建一个新数据库(及其表),这可能吗?
我正在尝试这个:
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conexion = (Connection)DriverManager.getConnection("jdbc:mysql://localhost/mysql","admin","admin");
Statement st = (Statement) conexion.createStatement();
st.executeUpdate("CREATE DATABASE hrapp");
但我收到以下错误:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user 'admin'@'localhost' to database 'hrapp'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1564)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1485)
at BaseDatosSetup.BaseDatosSetup.main(BaseDatosSetup.java:18)
我通过向用户授予创建操作来解决它。我不知道为什么,我是以管理员身份进行的。
最佳答案
首先,这个问题不是特定于 servlet 的。在任何其他 Java 类中这样做/尝试这样做时,您会遇到完全相同的问题/问题;)
其次,诚实地以编程方式创建数据库/表。在现实世界中,使用设计良好的数据模型,您通常会在相关应用程序的安装/设置期间只创建数据库/表,然后在应用程序的生命周期中永远使用它。您不需要为每个问题都创建一个新的数据库/表。当然,除非您打算开发(重新发明)基于网络的数据库管理器。
至于您的实际问题,这实际上取决于所使用的 JDBC 驱动程序,但其中大多数只允许使用 Statement#executeUpdate()
执行 CREATE
或任何其他 DDL 语句。 .如果您不这样做,那么您需要寻找另一个允许这样做的 JDBC 驱动程序品牌或版本。您还应该考虑到相关数据库用户具有足够的权限,这将在数据库级别进行配置。
关于java - 使用 java 类创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2105501/