首页 > 大家看一下下面的代码,总是有空指针的错误!!

大家看一下下面的代码,总是有空指针的错误!!

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的时候数据库是没连接的,就报空指针异常了

【热门文章】
【热门文章】