Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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 Hibernate无法将数据正确写入mysql_Java_Mysql_Spring_Hibernate_Maven - Fatal编程技术网

Java Hibernate无法将数据正确写入mysql

Java Hibernate无法将数据正确写入mysql,java,mysql,spring,hibernate,maven,Java,Mysql,Spring,Hibernate,Maven,我试图写一些关于打开我制作的web应用程序的用户的信息。这个web应用程序很简单。打开时,它会显示用户ip、用户代理和上次登录应用程序的时间。我用这些技术制作了这个应用程序:Spring、Maven、Tomcat、Hibernate和MySQL。似乎一切正常,但当我在浏览器中打开应用程序时,请注意在数据库中创建记录,我必须手动启动Main.java来创建记录,但该记录不正确,因为它没有记录真实信息,但它在任何地方都记录为空。我有两个问题-如何自动完成这一切(当我打开web应用程序在DB中创建记录

我试图写一些关于打开我制作的web应用程序的用户的信息。这个web应用程序很简单。打开时,它会显示用户ip、用户代理和上次登录应用程序的时间。我用这些技术制作了这个应用程序:Spring、Maven、Tomcat、Hibernate和MySQL。似乎一切正常,但当我在浏览器中打开应用程序时,请注意在数据库中创建记录,我必须手动启动Main.java来创建记录,但该记录不正确,因为它没有记录真实信息,但它在任何地方都记录为空。我有两个问题-如何自动完成这一切(当我打开web应用程序在DB中创建记录时),以及为什么每次我的记录都为空

public class Main {

    public static void main(String[] args) {

        UserInfo user = new UserInfo();
        user.setRollNo(7);
        user.setIp(UserController.ip);
        user.setUserAgent(UserController.userAgent);
        user.setDate((Date) UserController.date);

        SessionFactory sessionFactory = new AnnotationConfiguration()
                .configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();

        session.save(user);

        session.getTransaction().commit();
        session.close();
    }
}
UserController.java

   @Controller
    public class UserController {

        public static String ip;
        public static String userAgent;
        public static Date date;

        @Autowired
        private HttpServletRequest request;

        @RequestMapping(value = "/connection")
        public ModelAndView getUserInfo() {

            ModelAndView modelandView = new ModelAndView("UserInfo");

            ip = request.getRemoteAddr();
            modelandView.addObject("msg1", "Your IP is " + ip);

            userAgent = request.getHeader("User-Agent");
            modelandView.addObject("msg2", "Your User agent is " + userAgent);

            date = new java.util.Date();
            /*
             * Calendar calendar = Calendar.getInstance(); java.sql.Date startDate =
             * new java.sql.Date(calendar.getTime() .getTime());
             */
            modelandView.addObject("msg3", "Your last log was at " + date);

            return modelandView;

        }

    }
UserInfo.java

@Entity
@Table(name = "USER_INFORMATION")
public class UserInfo {

    @Id
    private int rollNo;
    private String ip;
    private String userAgent;
    private Date date;

    public int getRollNo() {
        return rollNo;
    }

    public void setRollNo(int rollNo) {
        this.rollNo = rollNo;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public String getUserAgent() {
        return userAgent;
    }

    public void setUserAgent(String userAgent) {
        this.userAgent = userAgent;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

}
hibernate.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>
        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/browserinfo</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>

        <property name="connection.pool_size">1</property>

        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <property name="show_sql">true</property>

        <property name="hbm2ddl.auto">validate</property>

        <mapping class="com.nikola.hellocontroller.UserInfo" />

    </session-factory>
</hibernate-configuration>

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/browserinfo
根
1.
org.hibernate.dialogue.mysqldialogue
org.hibernate.cache.NoCacheProvider
真的
验证
根据这一点:


@novy154我正在尝试使用用户IP、用户代理信息和用户上次登录应用程序的时间将e记录到DB。之后,我想显示应用程序中的所有记录

首先,您需要一些DataAccessLayer。差不多

public interface UserInfoRepository {
    void save(UserInfo userInfo);
    Collection<UserInfo> findAll();
}
然后,在控制器方法中,您需要调用
save(newlyCreatedUserInfo)
将信息存储在数据库中,然后

modelAndView.addObject("userInfos", repository.findAll());
检索所有数据并将其传递给视图

当然记得

...
@Autowired
private UserInfoRepository userInfoRepository;
...
在控制器中


请注意,由于spring data jpa为您提供了更强大的现成存储库,这是一个全新的轮子。

我不理解您的问题。你想要实现什么?您想从数据库中获取一些数据并在视图中显示它吗?或者创建新用户并将其存储在数据库中?在没有任何数据访问层的情况下,您希望如何实现这一点?您执行“日志记录”的方式真的很奇怪。为什么将
getUserInfo
中的信息存储在
static
变量中?它们将被每个请求覆盖。是的,您必须手动触发
main
方法,因为您的数据库处理只在那里。如果不首先访问
/connection
,则数据库条目将包含
null
。现在我想知道,如果您不想这样做,为什么要这样实现它。在这个例子中使用数据库的目的是什么?您正在从请求中检索用户信息,然后呢?是否要创建新用户并将其存储在数据库中?接下来呢?从数据库中检索它?凭什么?通过主键你不知道?@novy154我想记录一些数据,然后显示出来以供查看@汤姆:我现在正在学习这项技术。我决定在这里做一个主题,因为我需要一些帮助。。我还是个笨蛋。如果您有时间向我解释如何解决这个问题,我将不胜感激。@novy154我正在尝试使用用户IP、用户代理信息和用户上次登录应用程序的时间向DB进行e记录。之后,我想显示应用程序中的所有记录。我不想识别用户。我想让它变得简单。我想在数据库中记录所有用户信息(ip、用户代理…)并显示它。现在我不想为用户注册和识别。然后实现某种类型的数据访问层是一种方法。你能给我一个例子来理解如何做到这一点吗,因为我已经阅读了很多信息,看了很多教程。。。。现在我脑子里乱七八糟的(
...
@Autowired
private UserInfoRepository userInfoRepository;
...