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
    评论
好的,我可以为您解答关于Java数据库连接的登陆页面问题。 首先,Java数据库连接需要使用JDBC(Java Database Connectivity)技术。JDBC是Java语言中用于执行SQL语句的API,可以通过JDBC连接到各种关系型数据库,如MySQL、Oracle、SQL Server等。 在Java中实现登陆页面数据库连接可以分为以下几个步骤: 1. 加载JDBC驱动程序:在Java中连接数据库,需要先加载相应的数据库驱动程序。不同的数据库有不同的驱动程序,例如MySQL的驱动程序为"com.mysql.jdbc.Driver"。可以使用Class.forName()方法来加载相应的驱动程序。 2. 建立数据库连接:在驱动程序加载之后,需要通过DriverManager类中的getConnection()方法来建立数据库连接。getConnection()方法需要传入数据库的URL、用户名和密码等参数。 3. 执行SQL语句:建立好数据库连接之后,可以通过Connection对象的createStatement()方法来创建一个Statement对象,然后使用Statement对象执行SQL语句。 4. 处理查询结果:如果执行的是查询语句,需要使用ResultSet对象来处理查询结果。 下面是一个简单的Java代码示例,该代码实现了登陆页面MySQL数据库的连接: ```java import java.sql.*; public class Login { public static void main(String[] args) { try { // 加载MySQL的JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver"); // 建立数据库连接 String url = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, username, password); // 执行SQL语句 String sql = "SELECT * FROM user WHERE username='admin' AND password='123456'"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); // 处理查询结果 if (rs.next()) { System.out.println("登陆成功!"); } else { System.out.println("用户名或密码错误!"); } // 关闭数据库连接 rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个示例中,我们首先加载了MySQL的JDBC驱动程序,然后建立了与数据库的连接。接着执行了一个查询语句,查询用户名为"admin",密码为"123456"的用户是否存在。最后根据查询结果输出相应的信息。 当然,这只是一个简单的示例,实际中需要根据具体的需求进行修改。同时,需要注意数据库连接的关闭,以免出现连接泄露的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值