📄 database.java
字号:
//Database.java
/**
@author Joedan
*/
import java.sql.*;
import java.util.*;
class Database
{
static final String 数据源 = "JQQDatabase";
static final String 用户数据表 = "用户数据";
static final String 用户数据表_用户id字段名 = "id";
static final String 用户数据表_用户pswd字段名 = "pswd";
static final String 用户数据表_用户name字段名 = "name";
static final String 用户所加好友表 = "用户所加好友";
static final String 用户被加资料表 = "用户被加资料";
static final String 用户所加好友表_用户id字段名 = "id";
static final String 用户所加好友表_好友id字段名 = "id2";
static final String 用户被加资料表_用户id字段名 = "id";
static final String 用户被加资料表_对方id字段名 = "id2";
static final Hashtable UserOnLine = new Hashtable();//存放在线用户
static Enumeration _UserOnLine = UserOnLine.keys();//存放在线用户列表
static final byte NUM = 10;//每次请求在线用户列表时返回的列表最大长度
Connection con;
Statement stmt;
//临时变量
// Vector vct = new Vector();//不可用,多线程使其出错
byte bi;
Database()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:" + 数据源, "", "");
stmt = getStatement();
}
catch(Exception e)
{
e.printStackTrace();
System.exit(0);
}
}
Statement getStatement()
{
try
{
return con.createStatement();
}
catch(Exception e)
{
e.printStackTrace();
System.exit(0);
}
return null;
}
boolean 是否存在(String id)//返回id是否存在
{
Statement stmt = getStatement();
ResultSet rs;
rs = Query(stmt, "select * from " + 用户数据表 + " where " + 用户数据表_用户id字段名 + " = " + id);
try
{
if (rs.next())
return true;
}
catch(Exception e){}
return false;
}
Enumeration 好友列表(String id)//返回id的好友列表
{
Statement stmt = getStatement();
ResultSet rs;
Vector vct = new Vector();
rs = Query(stmt, "select " + 用户所加好友表_好友id字段名 + " from " + 用户所加好友表 + " where " +
用户所加好友表_用户id字段名 + " = " + id);
try
{
while(rs.next())
vct.add(rs.getString(1));
}
catch(Exception e){}
return vct.elements();
}
Enumeration 被加列表(String id)//返回哪些用户加id为好友
{
Statement stmt = getStatement();
ResultSet rs;
Vector vct = new Vector();
rs = Query(stmt, "select " + 用户被加资料表_对方id字段名 + " from " + 用户被加资料表 + " where " +
用户被加资料表_用户id字段名 + " = " + id);
try
{
while(rs.next())
vct.add(rs.getString(1));
}
catch(Exception e){}
return vct.elements();
}
boolean 添加用户(String id, String name, String pswd)//添加新用户
{
return Update("insert into " + 用户数据表 + " values(" + id + ", '" + name + "', '" + pswd + "')");
}
boolean 添加好友(String id1, String id2)//id1添加id2为好友
{
if (Update("insert into " + 用户所加好友表 + " values(" + id1 + ", " + id2 + ")") &&
Update("insert into " + 用户被加资料表 + " values(" + id2 + ", " + id1 + ")"))
return true;
try
{
con.rollback();//可行性等待验证
}
catch(Exception e){}
return false;
}
boolean 删除好友(String id1, String id2)//id1删除好友id2
{
if (Update("delete from " + 用户所加好友表 + " where " + 用户所加好友表_用户id字段名 + " = " + id1 +
"and " + 用户所加好友表_好友id字段名 + " = " + id2) &&
Update("delete from " + 用户被加资料表 + " where " + 用户被加资料表_用户id字段名 + " = " + id2 +
"and " + 用户被加资料表_对方id字段名 + " = " + id1))
return true;
try
{
con.rollback();//可行性等待验证
}
catch(Exception e){}
return false;
}
void 添加在线用户(String id, String ip, String port)//添加在线用户
{
UserOnLine.put(id, ip + "," + port);
}
void 删除在线用户(String id)//删除在线用户
{
UserOnLine.remove(id);
}
Enumeration 在线用户列表()//获取在线用户列表
{
if (UserOnLine.size() < NUM)
return UserOnLine.keys();
Vector vct = new Vector();
for (bi = 0; _UserOnLine.hasMoreElements() && bi < NUM; bi++)//提取NUM个在线用户,start
vct.add(_UserOnLine.nextElement());
if (bi < NUM)
{
_UserOnLine = UserOnLine.keys();//很慢
for (; _UserOnLine.hasMoreElements() && bi < NUM; bi++)
vct.add(_UserOnLine.nextElement());
}//提取NUM个在线用户,end
return vct.elements();
}
boolean 修改密码(String id, String pswd)//修改密码
{
return Update("update " + 用户数据表 + " set " + 用户数据表_用户pswd字段名 + " = '" + pswd + "' where " +
用户数据表_用户id字段名 + " = " + id);
}
boolean 修改用户名(String id, String name)//修改用户名
{
return Update("update " + 用户数据表 + " set " + 用户数据表_用户name字段名 + " = '" + name + "' where " +
用户数据表_用户id字段名 + " = " + id);
}
boolean 是否在线(String id)//返回id是否在线
{
return UserOnLine.containsKey(id);
}
String 获取用户名(String id)//返回id的用户名
{
Statement stmt = getStatement();
ResultSet rs;
rs = Query(stmt, "select " + 用户数据表_用户name字段名 + " from " + 用户数据表 + " where " +
用户数据表_用户id字段名 + " = " + id);
try
{
if (rs.next())
return rs.getString(1);
}
catch(Exception e){}
return null;
}
String 获取在线用户的地址(String id)//返回在线id的ip和port;格式:ip,port
{
return (String)UserOnLine.get(id);
}
synchronized ResultSet Query(Statement stmt, String sql)
{
提示(sql);
try
{
if (con.isClosed())//这里和Update()混起来可能会有问题
{
con = DriverManager.getConnection("jdbc:odbc:" + 数据源, "", "");
stmt = con.createStatement();
}
return stmt.executeQuery(sql);
}
catch(Exception e)
{
return null;
}
}
synchronized boolean Update(String sql)
{
/*
try
{
return stmt.executeUpdate(sql) > 0;
}
catch(Exception e)
{
return false;
}
*/
//数据更新到数据库的问题等待解决
try
{
return stmt.executeUpdate(sql) > 0 && refresh();
}
catch(Exception e)
{
return false;
}
}
boolean refresh()//数据更新到数据库的问题等待解决
{
try
{
con.close();
con = DriverManager.getConnection("jdbc:odbc:" + 数据源, "", "");
stmt = getStatement();
return true;
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
}
static void 提示(String s)
{
System.out.println(s);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -