Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java类创建数据库_Java_Mysql_Servlets_Jdbc - Fatal编程技术网

使用java类创建数据库

使用java类创建数据库,java,mysql,servlets,jdbc,Java,Mysql,Servlets,Jdbc,我在一个使用servlet和mysql的应用程序中工作 我想创建一个.jar文件,该文件能够创建应用程序将使用的数据库。为了创建数据库,这将只执行一次 我可以访问数据库,这样做: Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conexion = (Connection)DriverManager.getConnection("jdbc:mysql://localhost/test","admin","admin

我在一个使用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)

我通过向用户授予create操作解决了这个问题。我不知道为什么,我是作为管理员来做的。

首先,这个问题不是特定于servlet的。在任何其他Java类中进行/尝试时,都会遇到完全相同的问题

其次,以编程方式创建数据库/表。在现实世界中,使用设计良好的数据模型,通常在安装/设置相关应用程序的过程中只创建一次数据库/表,然后在应用程序的生命周期中永远使用它。您不需要为每次打嗝都创建一个新的DB/表。当然,除非您打算重新开发基于Web的数据库管理器


至于您的实际问题,这实际上取决于所使用的JDBC驱动程序,但大多数驱动程序只允许使用执行CREATE或任何其他DDL语句。如果您的JDBC驱动程序不支持,那么您需要寻找另一个JDBC驱动程序品牌或版本。您还应考虑到相关的DB用户具有足够的权限,这将在DB级别进行配置。

为什么要这样做

我认为您需要做的是执行一些运行时命令来直接与操作系统交互,以完成这一壮举。但是,我建议不要这样做

W3CSchools.com-。不过,您不会使用executeQuery。而是使用executeUpdate

这是一个简单的例子


正如其他用户所提到的,您可能不想从代码中创建数据库。这不是一个好的做法。

re。在代码之外创建数据库/表,我认为需要这样做的另一个原因可能是在某种测试套件中,安装和拆卸需要创建/删除数据库/表/测试数据;我写问题的时候不知道自己在想什么。现在正在编辑。为这一混乱道歉:如果你能编程一个SELECT,为什么你不能编程创建表/插入/加载?我不知道,如果我连接到我的一个数据库,然后使用:ResultSet rs=st.executeQueryselect*from audiolist2;行得通,我试过了,但我错了。我已将信息添加到我的问题中。谢谢