会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 133529个问题
Python 全系列/第一阶段:Python入门/编程基本概念 33031楼

分享,减少踩坑!

我直接使用pip install mysqlclient报了 MySQLdb/_mysql.c(29): fatal error C1083: 无法打开包括文件: “mysql.h”: No such file or directory

image.png

在卸载了Visual Studio Community 2019后,再次使用pip install mysqlclient,报了error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/

image.png

这会引导去安装好几个G的visual studio ,但是可以不用去安装这个占存储空间的工具,直接在https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 中下载与当前安装的python版本兼容的mysqlclient,

image.png

比如我当前用的python 3.8.3版本是32位的,则应下载mysqlclient-1.4.6-cp38-cp38-win32.whl

下载好后进入该文件所在的目录,命令行输入pip install mysqlclient-1.4.6-cp38-cp38-win32.whl

显示安装成功

image.png

注意:如果安装的mysqlclient版本与当前Python版本不兼容,则会报ERROR: mysqlclient-1.4.6-cp38-cp38-win_amd64.whl is not a supported wheel on this platform.

image.png

Python 全系列/第十二阶段:Python_Django3框架/Django初级 33032楼

先运行服务器端,服务器启动没报错,再启动客户端,也没报错,输入账号密码之后客户端报错如下截图,然后发现服务器端也报错,不知道是什么原因。


项目目录结构截图

image.png


错误截图:

客户端

image.png


服务器端

image.png



附上代码:


客户端

package com.cn.entity;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * 基于TCP协议的Socket编程_双向通信_实现模拟用户登录
 */
public class Client {

    public static void main(String[] args) throws IOException {
        //(1)创建Socket对象,用于连接服务器
        Socket client=new Socket("localhost", 8888);
        //(2)获取输出流  (对象流)
        ObjectOutputStream oos=new ObjectOutputStream(client.getOutputStream());
        //(3)创建User对象
        //调用获取用户对象的方法
        User u=getUser();//new User("bjsxt", "bjsxt");
        //(4)User对象发送到服务器
        oos.writeObject(u);

        //(5)获取输入流(数据流)
        DataInputStream dis=new DataInputStream(client.getInputStream());
        System.out.println(dis.readUTF());
        //(6)关闭流
        if(dis!=null){
            dis.close();
        }
        if(oos!=null){
            oos.close();
        }
        if(client!=null){
            client.close();
        }
    }
    //获取用户对象的方法
    public static User getUser(){
        Scanner input=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String userName=input.next();
        System.out.println("请输入密码:");
        String password=input.next();
        //封装成User对象
        return new User(userName,password);
    }
}

User类

package com.cn.entity;

import java.io.Serializable;

public class User implements Serializable {

    private static final long serialVersionUID = -5699785428357564782L;
    private String userName;
    private String passWord;

    public User(String userName, String passWord) {
        this.userName = userName;
        this.passWord = passWord;
    }

    public User() {
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}




服务器端

package com.cn.entity;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 基于TCP协议的Socket编程_双向通信_实现模拟用户登录
 */
public class Server {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        System.out.println("--------------服务器端已启动---------------");
        //(1)创建SocketServer对象
        ServerSocket server = new ServerSocket(8888);  //10000是端口号
        Socket socket = server.accept();
        //(2)获取输入流(对象流) ,把字节流包装成对象流
        ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

        //读Object类型,向上类型转换
        User2 user = (User2) ois.readObject();
        System.out.println(socket.getInetAddress().getHostAddress()+"请求登录");
        System.out.println("用户名:"+user.getUserName());
        System.out.println("密码:"+user.getPassWord());


        //(3)堆用户名和密码进行验证
        String str = "";
        if ("bjsxt".equals(user.getUserName())&&"bjsxt".equals(user.getPassWord())){
            str="登录成功";
        }else {
            str="对不起,账号密码不正确!";
        }
        //(4)获取输出流(数据流),把字节流包装成数据流
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
        dos.writeUTF(str);
        //(5)关闭流,关闭SockerServer
        if (dos!=null){
            dos.close();
        }
        if (ois!=null){
            ois.close();
        }
        if (socket!=null){
            socket.close();
        }


    }

}

User2类

package com.cn.entity;

import java.io.Serializable;

public class User2 implements Serializable {

    private static final long serialVersionUID = -5699785428357564782L;
    private String userName;
    private String passWord;

    public User2(String userName, String passWord) {
        this.userName = userName;
        this.passWord = passWord;
    }

    public User2() {
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}


JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 33033楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 33037楼
JAVA 全系列/第八阶段:生产环境部署与协同开发/Linux 33039楼

1651156283(1).png

UsersDao

public interface UsersDao extends BaseDao {

    /**
     * 根据用户Id查询用户
     */
    Users selectUsersById(int userid) throws ApplicationException;

    /**
     * 修改用户信息
     * @param users
     * @return
     */
    int updateUsersById(Users users) ;
    /**
     * 根据用户姓名模糊查询
     */
    List<Users> selectUsersByLikeName(String username);
}

UsersDaoImpl

public class UsersDaoImpl extends BaseDaoImpl implements UsersDao {

    /**
     * 根据用户ID查询用户
     * @param userid
     * @return
     */

    @Override
    public Users selectUsersById(int userid) throws ApplicationException {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null ;
        Users users = null;
        try {
            conn = jdbcUtill.getConnection();
            ps = conn.prepareStatement("select * from users where userid = ?");
            ps.setInt(1,userid);
            rs = ps.executeQuery();
            while (rs.next()){
                //手动orm映射
                users  = new Users();
                users.setUserid(rs.getInt("userid"));
                users.setUsername(rs.getString("username"));
                users.setUserage(rs.getInt("userage"));
            }


        }catch (Exception e){
            e.printStackTrace();
            throw new ApplicationException(e.getMessage());


        }finally {
            jdbcUtill.closeConnection(rs,ps,conn);
        }

        return users;
    }

    /**
     * 修改用户信息
     * @param
     * @return
     */

    @Override
    public int updateUsersById(Users users) {
        String sql = "update users set userage = ? where userid = ?";
        Object[] param = new Object[]{users.getUserage(),users.getUserid()};
        return this.executeUpdate(sql,param);
    }

    @Override
    public List<Users> selectUsersByLikeName(String username) {
        String sql = "select * from users where username like ?";
        Object[] param =new Object[]{"%"+username+"%"};
        return this.select(sql,param,Users.class);
    }


}

BaseDao

public interface BaseDao {
    /**
     * 通用的Dml操作方法
     */
    int executeUpdate(String sql,Object[] param) ;

    /**
     * 通用查询方法
     *
     */
   <T> List<T> select(String sql,Object[] param,Class<T> clazz);
}

BaseDaoImpl

public class BaseDaoImpl implements BaseDao {
    /**
     * 通用的Dml的操作
     */
    @Override
    public int executeUpdate(String sql, Object[] param) {
        Connection connection = null;
        PreparedStatement ps = null;
        int row = 0;
        try {
            connection = jdbcUtill.getConnection();
            ps = connection.prepareStatement(sql);
            //得到参数的个数
            ParameterMetaData pd = ps.getParameterMetaData();
            for (int i = 0;i<pd.getParameterCount();i++){
                ps.setObject(i+1,param[i]);
            }
            row = ps.executeUpdate();

        }catch (Exception e){
            e.printStackTrace();
            

        }finally {
            jdbcUtill.closeResource((Statement) ps,connection);
        }

        return row;
    }

    /**
     * 通用查询方法
     * @param sql
     * @param param
     * @param
     * @param <T>
     * @return
     */

    @Override
    public <T> List<T> select(String sql, Object[] param, Class<T> clazz) {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet rs  = null;
        List<T> list = null;

        try {
            connection = jdbcUtill.getConnection();
            ps = connection.prepareStatement(sql);
            //得到参数的个数
            ParameterMetaData pd = ps.getParameterMetaData();
            for (int i = 0;i<pd.getParameterCount();i++){
                ps.setObject(i+1,param[i]);
            }
            rs = ps.executeQuery();
            //获取结果集对象
            ResultSetMetaData rm = rs.getMetaData();
            while(rs.next()){
                //orm映射
                //通过反射实例化对象实体类对象
                T bean = clazz.getDeclaredConstructor().newInstance();
                //实体类的属性名必须要和表的列名相同
                for (int i = 0;i<rm.getColumnCount();i++){
                    //得到列名
                    String columnName = rm.getColumnName(i+1);
                    //获取列的值
                    Object value = rs.getObject(columnName);
                    //通过BeanUtill工具类讲解映射到对象中
                    BeanUtils.setProperty(bean,columnName,value);


                }
                list.add(bean);
            }

        }catch (Exception e){
            e.printStackTrace();
            throw new ApplicationException(e.getMessage());


        }finally {
            jdbcUtill.closeResource(rs, ps,connection);
        }

        return list;
    }


}

UsersService

public interface UsersService {

    Users findUsersById(int userid) throws ApplicationException;
    int modifyUsersById(Users users) ;
    List<Users> findUsersByLikeName(String username);



}

UsersServiceImpl

public  class UsersServiceimpl implements UsersService {

    @Override
    public Users findUsersById(int userid) throws ApplicationException {
        UsersDao ud  = new UsersDaoImpl();

        return ud.selectUsersById(userid);
    }

    @Override
    public int modifyUsersById(Users users) {
        UsersDao ud = new UsersDaoImpl();
        return ud.updateUsersById(users);
    }

    @Override
    public List<Users> findUsersByLikeName(String username) {
        UsersDao ud = new UsersDaoImpl();
        return ud.selectUsersByLikeName(username);

    }
}


Test3

public class Test3 {
    public static void main(String[] args) {
        UsersService us = new UsersServiceimpl();
        List<Users> list = us.findUsersByLikeName("a");
        for (Users users:list){
            System.out.println(users);
        }
    }
}

运行结果

java.lang.NullPointerException
	at cn.itbaizhan.dao.impl.BaseDaoImpl.select(BaseDaoImpl.java:88)
	at cn.itbaizhan.dao.impl.UsersDaoImpl.selectUsersByLikeName(UsersDaoImpl.java:71)
	at cn.itbaizhan.service.impl.UsersServiceimpl.findUsersByLikeName(UsersServiceimpl.java:29)
	at cn.itbaizhan.web.Test3.main(Test3.java:12)
Exception in thread "main" cn.itbaizhan.exception.ApplicationException
	at cn.itbaizhan.dao.impl.BaseDaoImpl.select(BaseDaoImpl.java:93)
	at cn.itbaizhan.dao.impl.UsersDaoImpl.selectUsersByLikeName(UsersDaoImpl.java:71)
	at cn.itbaizhan.service.impl.UsersServiceimpl.findUsersByLikeName(UsersServiceimpl.java:29)
	at cn.itbaizhan.web.Test3.main(Test3.java:12)


不知道哪错了,老师看一下

JAVA 全系列/第四阶段:数据库与AI协同技术实战/JDBC技术 33040楼
JAVA 全系列/第七阶段:项目管理与SSM框架/Mybatis 33041楼
JAVA 全系列/第六阶段:项目管理与SSM框架/RBAC实战 33042楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637