Как создать новую базу данных, когда пользователь вставлен в спящий режим - PullRequest
0 голосов
/ 18 мая 2018

Проблема: я пытаюсь создать базу данных, когда пользователь зарегистрирован.

, когда я использую

String s="create database " + userVo.getUserdbname()+";";
session.createSQLQuery(s).executeUpdate();

, она работает правильно, но когда я использую createDatabase (Строка s) метод, показанный в коде Дао, не создает новую базу данных, даже если я задаю новые свойства для конфигурации.

Код Дао для вставки пользователя и создания базы данных как зарегистрированного пользователя.

package com.dao;

import com.vo.UserVo;
import java.util.List;
import java.util.Properties;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
//import org.hibernate.cfg.Environment;
//import org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider;

public class UserDao {

    Configuration cfg;
    SessionFactory factory;
    Session session;
    Transaction t;

    void dbConnection() {
        cfg = new Configuration();
        cfg.configure("hibernate.cfg.xml");
        factory = cfg.buildSessionFactory();
        session = factory.openSession();

    }

    public void insertUser(UserVo userVo) {
        dbConnection();
        t = session.beginTransaction();
        session.save(userVo);
//        String s="create database " + userVo.getUserdbname()+";";
//        System.out.println(s);
//        session.createSQLQuery(s).executeUpdate();
        t.commit();
        session.close();
        factory.close();
        createdatabase(userVo.getUserdbname());
        System.out.println("inserted");
    }

//    public int dbUserId() {
//    }
    public List viewUser() {
        dbConnection();
        Query q;
        q = session.createQuery("from UserVo");
        return q.list();
    }

    private void createdatabase(String userdbname) {
        try {
            System.out.println("DB................" + userdbname);
            Configuration configuration = new Configuration();
            Properties properties = new Properties();
            properties.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
            properties.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/" + userdbname + "?createDatabaseIfNotExist=true");
            properties.setProperty("hibernate.connection.username", "root");
            properties.setProperty("connection.password", "");
            properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
            properties.setProperty("connection.pool_size", "11");
            properties.setProperty("show_sql", "true");
            properties.setProperty("hbm2ddl.auto", "update");
//        configuration.setProperties(properties);
//        configuration.setProperty("packagesToScan", "com.my.app");
//        properties.put(Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName());
//        cfg.addProperties(properties);
            SessionFactory sessionFactory = configuration.configure().buildSessionFactory();
            session = sessionFactory.openSession();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Query q;
//        session.createQuery("create database " + userVo.getUserdbname());
    }

}

Hibernet.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/global_db?createDatabaseIfNotExist=true</property>
        <property name="hibernate.connection.username">root</property>
        <property name="connection.password"></property>
        <property name="connection.pool_size">11</property>
        <property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
        <mapping class="com.vo.UserVo"/>
    </session-factory>
</hibernate-configuration>

UserController

package com.controller;

import com.dao.UserDao;
import com.vo.UserVo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String flag = request.getParameter("flag");
        if (flag.equals("insertuser")) {
            insertuser(request, response);
        } else if (flag.equals("userlogin")) {
            userlogin(request, response);
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

    private void insertuser(HttpServletRequest request, HttpServletResponse response) {
        UserVo userVo = new UserVo();
        UserDao userdao = new UserDao();
        userVo.setUsername(request.getParameter("user_name"));
        userVo.setLastname(request.getParameter("user_last_name"));
        userVo.setFirstname(request.getParameter("user_first_name"));
        userVo.setUseremail(request.getParameter("user_email"));
        userVo.setUserpassword(request.getParameter("user_password"));
        userVo.setStatus(1);
        userVo.setUserdbname((userdao.viewUser().size() + 1) + "_" + userVo.getFirstname() + "_" + userVo.getLastname() + "_front");
        System.out.println(userVo.getUserdbname());
        userdao.insertUser(userVo);
    }

    private void userlogin(HttpServletRequest request, HttpServletResponse response) {

    }

}

1 Ответ

0 голосов
/ 22 мая 2018

Я получил решение

Я создаю два Cfg файла для создания базы данных сначала hibernate.cfg.xml для основной базы данных и второго файла пользователя.cfg.xml для создания новой пользовательской базы данных вы можете увидеть это в следующем коде.

user.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url"></property>
        <property name="hibernate.connection.username">root</property>
        <property name="connection.password"></property>
        <property name="connection.pool_size">11</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
    </session-factory>
</hibernate-configuration>

userDbConnection () метод:

    public void userDbconnection(String dbname) {
        conf = new Configuration().configure("user.cfg.xml");
        conf.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/" + dbname + "?createDatabaseIfNotExist=true");
        conf.addAnnotatedClass(TrainingUserVo.class);
        sessionFactory = conf.buildSessionFactory();
        s = sessionFactory.openSession();
    }

Когда я вызываю метод, он создает базу данных , если ее не существует и устанавливает соединение с этой базой данных как обычно hibernate.cfg.xml файл работает для базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...