有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在hibernate中插入用户时创建新数据库

问题陈述: 我试图在用户注册时创建数据库

当我使用

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

它工作正常,但当我使用Dao代码中显示的createDatabase(String s)方法时,即使我正在为配置设置新属性,它也不会创建新数据库

Dao代码,用于插入用户并以用户注册的身份创建数据库

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()); } }

海本内。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>

用户控制器

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) { } }
Tags:  

共 (1) 个答案

  1. # 1 楼答案

    我找到解决办法了

    我先创建两个Cfg文件来创建数据库 冬眠。cfg。xml用于主数据库和第二个文件用户。cfg。xml对于新用户数据库的创建,您可以在下面的代码中看到它

    用户。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();
        }

    当我调用该方法时,它将创建数据库(如果不存在),并将与该数据库的连接设为正常的休眠。cfg。xml文件适用于数据库