CilentSocket.java:
package controller;
import java.io.*;
import java.net.Socket;
public class ClientSocket {
public static void main( String args[]){
try{
// 创建一个流套接字并将其连接到指定 IP 地址的指定端口号
Socket socket =new Socket("127.0.0.1",10000);
// 60s超时
socket.setSoTimeout(60000);
System.out.println("Hello!Server!");
/** 用于获取服务端传输来的信息 */
// 由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 输入读入一字符串
String result = bufferedReader.readLine();
System.out.println("Server say : " + result);
/** 关闭Socket*/
//bufferedReader.close();
//socket.close();
}catch (Exception e) {
System.out.println("Exception:" + e);
}
SQLProcessor.initSQL();
MainGUI frame = new MainGUI();
frame.setVisible(true);
}
public static void clientrequest(String s){
try {
Socket socket = new Socket("127.0.0.1", 10000);
// 60s超时
socket.setSoTimeout(60000);
System.out.println("Hello!Server!");
/** 发送客户端准备传输的信息 */
// 由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
// 将输入读入的字符串输出到Server
String sysbuff = s;
//BufferedReader sysBuff =new BufferedReader(new InputStreamReader(System.in));
printWriter.println(sysbuff);
// 刷新输出流,使Server马上收到该字符串
printWriter.flush();
}catch(IOException e){
e.getMessage();
}
}
}
package socketserver;
import controller.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Timestamp;
public class SocketServer {
public static void main(String[] args) {
try {
/** 创建ServerSocket*/
// 创建一个ServerSocket在端口2013监听客户请求
//SQLProcessor.initSQL();
//System.out.println("服务器连接成功!");
ServerSocket serverSocket =new ServerSocket(10000);
while (true) {
// 侦听并接受到此Socket的连接,请求到来则产生一个Socket
//对象,并继续执行
//System.out.println("服务器连接成功!");
Socket socket = serverSocket.accept();
System.out.println("服务器连接成功!");
/** 获取客户端传来的信息 */
// 由Socket得到输入流,并构造相应的BufferedReader对象
BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 获取从客户端读入的字符串
String result = bufferedReader.readLine();
System.out.println("Client say : " + result);
String[] str = result.split(",");
System.out.println(str[0]);
switch (str[0]){
case "update":
DataBase.updateUser(str[1],str[2]);
break;
case "update1":
DataBase.updateUser2(str[1],str[2]);
break;
case "deletedoc":
DataBase.deleteDoc(str[1]);
break;
case "deleteuser":
DataBase.deleteUser(str[1]);
break;
case "insertuser":
DataBase.insertUser(str[1],str[2],str[3]);
break;
case "insertdoc":
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
DataBase.insertDoc(str[1],str[2],timestamp,str[3],str[4]);
break;
case "updatepassword":
DataBase.updatePassword(str[1],str[2]);
break;
case "uploadfile":
DataBase.uploadFile(str[1],str[2],str[3],str[4]);
break;
case "download":
DataBase.downloadFile(str[1]);
break;
}
/** 发送服务端准备传输的 */
// 由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter printWriter =new
PrintWriter(socket.getOutputStream());
printWriter.print("hello Client, I am Server!");
printWriter.flush();
/** 关闭Socket*/
//printWriter.close();
//bufferedReader.close();
//socket.close();
}
}catch (Exception e) {
System.out.println("Exception:" + e);
}finally{
// serverSocket.close();
}
}
}
上面分别是客户端和服务器端的代码,下面是数据库的代码:
数据库初始化:
package controller;
import java.sql.*;
public class SQLProcessor {
private static Connection conn;
private static Statement stmt;
public static void initSQL() {
try {
String DB_URL = "jdbc:mysql://localhost/guchenghao?" +
"user=root&password=gu123&" +
"useUnicode=true&characterEncoding=UTF8&useSSL=false";
Class.forName("com.mysql.jdbc.Driver");
System.out.println("数据库初始化成功!");
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL);
System.out.println("Creating statement...");
stmt = conn.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
public static ResultSet exeQuery(String sql) throws SQLException {
ResultSet rs = stmt.executeQuery(sql);
return rs;
}
public static void exeUpdate(String sql) throws SQLException {
stmt.executeUpdate(sql);
}
public static void disconnectFromDB() {
try{
conn.close();
stmt.close(); //statement关闭会导致Resultset关闭,因此不必关闭rs
}catch ( SQLException sqlException ){
sqlException.printStackTrace();
}
}
}
数据库操作:
package controller;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.swing.*;
public class DataBase {
public static void updateUser2(String name,String Password) {
String sql = "update user set name="+name+" where password='"+Password+"'";
try{
SQLProcessor.exeUpdate(sql);
}catch(SQLException e){
e.getMessage();
}
}
public static void updateUser(String role,String name) {
String sql = "update user set role="+role+" where name='"+name+"'";
try{
SQLProcessor.exeUpdate(sql);
}catch(SQLException e){
e.getMessage();
}
}
public static void updatePassword(String password,String name) {
String sql = "update user set password="+password+" where name='"+name+"'";
try{
SQLProcessor.exeUpdate(sql);
}catch(SQLException e){
e.getMessage();
}
}
public static User searchUser(String name) throws SQLException,IllegalStateException {
String sql = "select * from user where name='" +name+ "'";
ResultSet rs = SQLProcessor.exeQuery(sql);
if(rs.next()) {
User user = new User(
rs.getString("name"),
rs.getString("password"),
rs.getString("role")
);
return user;
}
return null;
}
public static Doc searchDoc(String ID) throws SQLException,IllegalStateException {
String sql = "select * from files where id='"+ID+"'";
ResultSet rs = SQLProcessor.exeQuery(sql);
if(rs.next()) {
Doc doc = new Doc(
rs.getString("id"),
rs.getString("creator"),
rs.getTimestamp("timestamp"),
rs.getString("description"),
rs.getString("filename")
);
return doc;
}
return null;
}
public static boolean insertDoc(String ID, String creater, Timestamp timestamp, String description, String filename) throws SQLException,IllegalStateException {
String sql = "select * from files where id ='"+ID+"'";
ResultSet rs = SQLProcessor.exeQuery(sql);
if (rs.next())
return false;
else {
sql = "insert docs values(\"" + ID + "\",\"" + filename + "\",\"" + creater + "\",\"" + timestamp + "\",\"" + description + "\")";
SQLProcessor.exeUpdate(sql);
return true;
}
}
public static Vector<Vector<String >> listAllDocs() throws SQLException,IllegalStateException {
Vector<Vector<String >> data = new Vector<Vector<String >>();
String sql;
sql = "select * from files";
ResultSet rs = SQLProcessor.exeQuery(sql);
while(rs.next()) {
Vector<String> row = new Vector<>();
row.add(rs.getString("ID"));
row.add(rs.getString("filename"));
row.add(rs.getString("creator"));
row.add(rs.getString("timestamp"));
row.add(rs.getString("description"));
data.add(row);
}
return data;
}
public static Vector<Vector<String >> listAllUser() throws SQLException,IllegalStateException {
Vector<Vector<String >> data = new Vector<Vector<String >>();
String sql;
sql = "select name,role from user";
ResultSet rs = SQLProcessor.exeQuery(sql);
while(rs.next()) {
Vector<String> row = new Vector<>();
row.add(rs.getString("name"));
row.add(rs.getString("role"));
data.add(row);
}
return data;
}
public static boolean insertUser(String name, String password, String role) throws SQLException,IllegalStateException {
String sql = "SELECT * FROM user where name = '"+ name +"'";
ResultSet rs = SQLProcessor.exeQuery(sql);
if (rs.next()) {
return false;
}else{
sql = "insert user values('" + name + "','" + password + "','" + role + "')";
SQLProcessor.exeUpdate(sql);
return true;
}
}
public static boolean deleteUser(String name) throws SQLException,IllegalStateException {
String sql = "SELECT * FROM user where name = '" + name + "'";
ResultSet rs = SQLProcessor.exeQuery(sql);
if (rs.next()){
sql = "delete from user where name = '" + name + "'";
SQLProcessor.exeUpdate(sql);
return true;
}else
return false;
}
public static boolean deleteDoc(String id) throws SQLException,IllegalStateException {
String sql = "SELECT * FROM files where id = '" + id + "'";
ResultSet rs = SQLProcessor.exeQuery(sql);
if (rs.next()) {
sql = "delete from files where id = '" + id + "'";
SQLProcessor.exeUpdate(sql);
return true;
} else
return false;
}
public static Boolean uploadFile(String id, String creater, String description, String filename) {
try {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
// System.out.println("请输入档案文件名:");
// String filename = new String();
// filename = scanner.next();
// scanner.nextLine();
// File f = new File("/Users/Jason/downloadfile/" + filename);
// FileInputStream fin = new FileInputStream(f);
// InputStreamReader reader = new InputStreamReader(fin, "UTF-8");
//
// StringBuffer sb = new StringBuffer();
//
// while (reader.ready()) {
// sb.append((char) reader.read());
// // 转成char加到StringBuffer对象中
// }
// writer.append(sb.toString());
if (DataBase.insertDoc(id, creater, timestamp, description, filename)) {
System.out.println("插入成功");
File f1 = new File("/users/guchenghao/uploadfile/" + filename);
BufferedOutputStream fout =
new BufferedOutputStream(
new FileOutputStream(f1));
OutputStreamWriter writer = new OutputStreamWriter(fout, "UTF-8");
writer.append(id + " " + filename + " " + creater + " "
+ timestamp + " " + description);
writer.close();
fout.close();
return true;
} else {
System.out.println("ID已存在,插入失败");
return false;
}
// reader.close();
// fin.close();
}catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static Boolean downloadFile(String id) {
try {
Doc doc = DataBase.searchDoc(id);
if (doc == null) {
System.out.println("null");
return false;
} else {
File f = new File("/users/guchenghao/downloadfile/" + doc.getFilename().toString());
BufferedOutputStream fout =
new BufferedOutputStream(
new FileOutputStream(f));
OutputStreamWriter writer = new OutputStreamWriter(fout, "UTF-8");
writer.append(doc.getID() + " " + doc.getFilename() + " " + doc.getCreator() + " "
+ doc.getTimestamp() + " " + doc.getDescription());
writer.close();
fout.close();
System.out.print("下载成功");
return true;
}
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
错误:
你的数据库操作是在server端的吧,可是你是在client端启动的的数据库,那么server端deleteUser的时候数据库是没连接的,就报空指针异常了