6/13 近几日工作 java子系统与数据库的关联 页面测试

知识图谱生成与路径推荐已经做好了,但是基于文本文件来输入输出总归不像那么回事,所以把这个系统的输入连到数据库上了,当然配置没那么麻烦,还是保留在文件里。另外调整了输出到数据库的输出格式,来适应主系统的需要。

新增了两个类 用于数据库的输入输出,其中主要的麻烦在于,数据库里存的访问记录是一种时间序列,并不是之前文本文档里那种很容易就用换行分开的,这让我找每个人的事务有一点麻烦。这里用的Date类,以一周为一个事务单位。从数据库中查询时按照用户降序,时间升序来排列,用一个当前时间标记位来记录当前事务周的开始,当新的记录的时间比当前周开始晚超过七天时,开始新的一周,把之前的划分到上一个事务,之后的划分到下一个事务。

package DataProcess;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;

import com.mysql.fabric.xmlrpc.base.Data;

//import Model.Knowledge;

public class ReadData{  
	private String url = "jdbc:mysql://localhost:3306/resource_aggregation_platform?useUnicode=true&characterEncoding=utf-8;";
	private String driver = "com.mysql.jdbc.Driver"; 
	private String userName = "root";
	private String password = "";
	
	//将持久化的数据对应到内存中
    public Vector<String> getAllCourse(String table_name){
//    	ArrayList<Knowledge> re = new ArrayList<Knowledge>();
    	Vector<String> courses = new Vector<String>();
    	Connection con = getConnection();
    	String sql = "SELECT * FROM "+table_name;
    	Statement stmt;
		try {
			stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
	        while(rs.next()){
	            String course_name  = rs.getString("course_name");
	            
	            courses.add(course_name);
	         }
	         rs.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return courses;
    }
    
  //将持久化的数据对应到内存中
    public Vector<Vector<Vector<String>>> getVisitData(){
//    	ArrayList<Knowledge> re = new ArrayList<Knowledge>();
    	Vector<Vector<Vector<String>>> data = new Vector<Vector<Vector<String>>>();
    	Connection con = getConnection();
    	String sql = "SELECT * FROM `course_visits` WHERE 1 ORDER BY `user_id`,`transaction`";
    	Statement stmt;
		try {
			stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			int cur_user = -1;
			int cur_day = -1;
			Date cur_date = new Date(2010, 1, 1);
			long aweak = new Date(1970,1,8).getTime();
			
			Vector<Vector<String>> user = new Vector<>();
			Vector<String> itemSet = new Vector<>();
	        while(rs.next()){
	        	int user_id = rs.getInt("user_id");
	            String course_name  = rs.getString("course_name");
//	            int day = rs.getInt("transaction");
	            Date date = rs.getDate("transaction");
	            if (user_id > cur_user) {
					user = new Vector<>();
					data.add(user);
					cur_user++;
					cur_day = -1;
				}
//	            if (day > cur_day) {
//	            	itemSet = new Vector<>();
//	            	user.add(itemSet);
//	            	cur_day++;	            	
//	            }
	            if (date.getTime() - aweak > cur_date.getTime()) {
	            	itemSet = new Vector<>();
	            	user.add(itemSet);
	            	cur_date = new Date(cur_date.getTime() + aweak);
				}
	            
	            itemSet.add(course_name);
	         }
	         rs.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return data;
    }
    

    //获取连接
    private Connection getConnection(){
        Connection conn = null;
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, userName, password);
            if(!conn.isClosed()) {
                System.out.println("数据库连接成功!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
} 

这样就可以用数据库中的数据跑一个知识图谱试试看了


emmm,的确不如之前的demo数据效果那么好,不过调调参应该也不错。另外可以看到有一个比较好的路径推荐了,可能因为现在数据库里的初始数据考虑到了有人用的多有人用得少。

还有一部分是写入数据库,东西虽然不少,但是不太难,所以就不放上来看了,关于数据格式的问题也不放上来了。

另外的部分是测试工作,果不其然在网站里发现了各种诡异的排版问题,还有报错什么的,好在都是小问题,和对应负责的同学一说就改过来了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值