2010-01-20 85 views
4

我正在使用servlet和mysql的应用程序中工作。使用java类创建数据库

我想创建一个能够创建应用程序将使用的数据库的.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"); 

,但我发现了以下错误:

异常线程 “main” com.mysql.jdbc.exceptions.jdbc4 .MySQLSyntaxErrorException:访问拒绝用户'admin'@'localhost'到数据库'hrapp' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown S乌尔斯河) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源) 在java.lang.reflect.Constructor.newInstance(未知来源) 在com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 在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.j dbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536) 在com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1564) 在com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1485) 在BaseDatosSetup.BaseDatosSetup.main(BaseDatosSetup.java:18)

我通过授予创建行动给用户解决了这个问题。我不知道为什么,我是以管理员身份进行的。

+0

如果你可以编程一个SELECT,为什么你不能编程CREATE TABLE/INSERT/LOAD? – gary 2010-01-20 23:05:29

+0

我不知道,如果我连接到我的一个数据库,然后使用: ResultSet rs = st.executeQuery(“select * from audiolist2”); 工作。 – dedalo 2010-01-20 23:57:40

回答

2

W3CSchools.com - SQL CREATE DATABASE Statement。尽管如此,你不会使用executeQuery。请使用executeUpdate

Here是一个简单的例子。

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

+0

我试过了,但我得到了一个错误。我已将这些信息添加到我的问题中。 谢谢 – dedalo 2010-01-20 23:25:04

3

首先,这个问题不是特定于servlet的。做/任何其他Java类试图所以,当你将有完全相同的问题/问题的斗争;)

其次,创建数据库/表编程诚实气味。在现实世界中,精心设计的数据模型,你通常安装有问题的应用程序/安装过程中创建数据库/表只有一次,然后应用程序的生命周期中永远使用它。您不需要为每个打嗝创建一个新的数据库/表格。除非你打算开发(重新创建)一个基于web的数据库管理器。

至于你的实际问题,这实际上取决于所使用的JDBC驱动程序,但大多只是允许执行CREATE或使用Statement#executeUpdate()任何其他DDL语句。如果你没有,那么你需要寻找另一个JDBC驱动程序make或version来允许这个。您还应该考虑到相关数据库用户有足够的权限,这将在数据库级配置。

+0

re。在代码之外创建数据库/表,另一个我可能会看到需要的原因可能是某种测试套件,其中安装和拆卸需要创建/删除数据库/表/测试数据。 – 2010-01-20 22:42:57

+0

然而,仍然没有明确提及为此使用servlet;) – BalusC 2010-01-20 22:44:57

+0

当我写这个问题时,我并不知道我在想什么。现在编辑。道歉的困惑:) – dedalo 2010-01-20 22:46:55

0

你为什么要这样做?

我认为你将不得不做的是执行一些运行时命令直接与操作系统接口来完成这项壮举。不过,我会推荐而不是这样做。