JDBC连接MYSQL

所用的IDE为idea,数据库用的是Navicat for MySQL。

好了,开始正题,今天要做person小项目,有以下几个步骤:

  • Navicat for MySQL数据库的构建,以及如何建person表
  • 在idea中导入mysql-connector-java-5.0.8-bin.jar包
  • 创建person小项目的目录
  • 具体代码的书写

第一步,Navicat for MySQL数据库的构建,以及如何person建表


其中,information_schema,mysql,performance_schema,test这四个数据库是这个软件自带的,我新建了两个数据库,命名规则是“db_object”.

新建person表,字段:id,name,age,description(注意数据类型及是否空值)
这里写图片描述
必须要强调一下,主键这个东西,因为这个吃了好多亏,出现了各种bug。。
主键:确定一个字段的唯一标识,一般都设置ID为主键,而且要设置自动递增。(被设置成主键的字段,务必是唯一标识

很搞笑的一点,不管是int型,还是varchar型,长度就是最普通的长度(不用转换成二进制什么的),比如说:varchar的长度是6,那么“小旺财666”就是长度6,即为数据的最大值


第二步,在idea中导入mysql-connector-java-5.0.8-bin.jar包

这里写图片描述
首先要在WEB-INF文件夹新建一个lib文件夹,把相应的jar包拖动到WEB-INF文件夹中,然后鼠标右键选择Add as Library,经过一系列的OK之后,就可以用这个jar包了。


第三步,创建person小项目的目录

这里写图片描述
注意在src中创建文件夹的时候,它可能有点怕生,要和之前的com.test黏在一起,这时候就可以选择Excluded(排斥的)把它们拆散。
这里写图片描述
如图,dao文件夹是红色的,不能在里面创建java.class。这时候呢,老套路,Mark Directory As(把目录变为) Cancel Excluded(取消排斥)
这里写图片描述
依次创建com.test父目录,以及其下的三个子目录dao,entity,test。

-dao目录(Data Access Object), 数据访问对象是第一个面向对象的数据库接口
-entity目录(实体),实体就是一个特定的软件模块。
-test目录,最终的试行测试。


第四步,具体代码的书写

-PersonDao文件

public class Persondao {
    private final static String DRIVER ="com.mysql.jdbc.Driver";
    private final static String URL = "jdbc:mysql://localhost:3306/db_person";
    private final static String USERNAME = "root";
    private final static String PASSWORD = "root";

首先,你必须定义4个私有的静态全局变量。

/**
     *添加一个人
     * @param person
     * @return boolean
     */
    public boolean insert(Person person) {
        boolean flag = false;//
        try {
            Class.forName(DRIVER);//加载数据库驱动
            Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            /*
            使用jar包中的connection接口,并通过DriveManager类的静态方法getConnection()创建连接对象conn
            */
            String sql = "INSERT INTO t_person(name,age,description) VALUES(?,?,?)";//编写sql语句
            PreparedStatement ps = conn.prepareStatement(sql);创建预处理对象ps
            ps.setString(1, person.getName());
            ps.setInt(2, person.getAge());
            ps.setString(3, person.getDescription());
            if (ps.executeUpdate() > 0) {
                flag = true;
            }
            ps.close();
            conn.close();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return flag;
    }

注意,ps.setString(1,per.getName)这个必须严格按照顺序来,1,2,3在你建好的t_person表中,对应的就是name,age,description


 /**
     * 删除一个人
     * @param id
     * @return
     */
   public boolean delete(int id){
       boolean flag = false;
       try{
           Class.forName(DRIVER);//加载数据库驱动
           Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//建立数据库连接
           String sql = "DELETE FROM t_person WHERE id="+id;//编写sql语句
           PreparedStatement ps = conn.prepareStatement(sql);//sql执行语句
           if(ps.executeUpdate() > 0) {
               flag = true;
           }
           ps.close();
           conn.close();

       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       } catch (SQLException e) {
           e.printStackTrace();
       }
       return flag;
   }

 /**
     * 根据ID改变一个人
     * @param id
     * @return
     */
    public boolean update(Person person,int id){
        boolean flag = false;
        try{
            Class.forName(DRIVER);//加载数据库驱动
            Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//连接数据库
            String sql = "UPDATE t_person SET name=?,age=?,description=? WHERE id= "+id;//编写sql语句
            PreparedStatement ps = conn.prepareStatement(sql);//sql执行语句
            ps.setString(1,person.getName());
            ps.setInt(2,person.getAge());
            ps.setString(3,person.getDescription());
            if(ps.executeUpdate() > 0) {
                flag = true;
            }
            ps.close();
            conn.close();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return flag;
    }

/**
     *根据ID查找一个人
     * @param id
     * @return
     */
    public Person SelectById(int id){
        Person person = null;
        ResultSet rs = null;
        try{
            Class.forName(DRIVER);//加载数据库驱动
            Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//数据库连接
            String sql = "SELECT * FROM t_person WHERE id="+id;//编写sql语句
            PreparedStatement ps = conn.prepareStatement(sql);//sql执行语句
            rs = ps.executeQuery();//在PrepareStatement对象中执行SQL查询,并返回该查询生成的ResultSet对象
            while (rs.next())//若当前语句不是最后一行,则执行循环
            {
/*
                ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,通过next()方法可将指针下移
*/
               person = new Person();
                person.setId(rs.getInt("id"));
                person.setName(rs.getString("name"));
                person.setAge(rs.getInt("age"));
                person.setDescription(rs.getString("description"));
            }
            ps.close();
            conn.close();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return person;
    }

 /**
     * 搜素所有的人
     * @return
     */
    public List<Person> select(){
        List<Person> list = new ArrayList<Person>();
        ResultSet rs = null;
        try{
            Class.forName(DRIVER);//加载数据库驱动
            Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//数据库连接
            String sql = "SELECT * FROM t_person";//编写sql语句
            PreparedStatement ps = conn.prepareStatement(sql);//sql执行语句
            rs = ps.executeQuery();
            while (rs.next())
            {
                Person person = new Person();
                person.setId(rs.getInt("id"));
                person.setName(rs.getString("name"));
                person.setAge(rs.getInt("age"));
                person.setDescription(rs.getString("description"));
                list.add(person);
            }
            ps.close();
            conn.close();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
 }

-Person文件

public class Person {
    private int id;//主键
    private String name;//姓名
    private int age;//年龄
    private String description;//描述

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

特别地,在根据ID查找一个人的时候

/**
     * 需要把toString()方法重写。
     * @return
     */
    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", description='" + description + '\'' +
                '}';
    }
}

-test

public class test {


    public static void main(String[] args){
//        Person person = new Person();
//        person.setAge(0);
//        person.setName("吴晓阳");
//        person.setDescription("是个傻逼");
//        System.out.println(Persondao.insert(person));//增加一个人
//        System.out.println(Persondao.delete(2));//删除一个人
//        System.out.println(Persondao.update(person,4));
//        Person person =Persondao.SelectById(4);
//        System.out.println(person);
        List<Person> list = Persondao.select();//查找列表
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }


    }
}

MySql保留的关键字

终于找到了
这里写图片描述
请特别注意,在写sql语句的时候,之前在Navicat定义的字段名称不能与上述关键词相同,会报错的。。

脚注

第一次写博客,因为自己比较笨,所以代码写的比较全,而且可能很多地方解释会有不当,望各批评指正,谢谢大家~

目录

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值