Je travaille dans une application qui utilise des servlets et mysql.Utilisation d'une classe java pour créer une base de données
Je voudrais créer un fichier .jar capable de créer la base de données que l'application utilisera. Cela ne sera fait qu'une seule fois, afin de créer le db.
Je n'ai pas de problème à obtenir l'accès à une base de données, faire quelque chose comme ceci:
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();
Ceci est ok, mais ce que je dois faire est de créer une nouvelle base de données (et ses tables) d'une classe Java, est-ce possible?
Merci
J'essaie ceci:
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");
mais j'obtiens l'erreur suivante:
Exception dans le thread "principal" com.mysql.jdbc.exceptions.jdbc4 .MySQLSyntaxErrorException: Accès refusé pour l'utilisateur 'admin' @ 'localhost' à la base de données 'hrapp' à sun.reflect.NativeConstructorAccessorImpl.newInstance0 (méthode native) à sun.reflect.NativeConstructorAccessorImpl.newInstance (Unknown S Ource) à sun.reflect.DelegatingConstructorAccessorImpl.newInstance (Source inconnue) à java.lang.reflect.Constructor.newInstance (Source inconnue) à com.mysql.jdbc.Util.handleNewInstance (Util.java:406) à com.mysql.jdbc.Util.getInstance (Util.java:381) à com.mysql.jdbc.SQLError.createSQLException (SQLError.java:1030) à com.mysql.jdbc.SQLError.createSQLException (SQLError.java: 956) à com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3491) à com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3423) à com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:1936) à com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:2060) à 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)
Je l'ai résolu en accordant l'action create à l'utilisateur. Je ne sais pas pourquoi, je le faisais en tant qu'administrateur.
Si vous pouvez programmer un SELECT, pourquoi ne pouvez-vous pas programmer CREATE TABLE/INSERT/LOAD? – gary
Je ne sais pas, si je fais une connexion à l'une de mes bases de données, puis j'utilise: ResultSet rs = st.executeQuery ("select * from audiolist2"); Cela fonctionne. – dedalo