Java---JDBC

目录

一、JDBC概述

二、JDBC搭建

三、JDBC代码实现

1.加载驱动

2.建立与数据库连接

3.向数据库发送SQL

4.关闭与数据库的连接

四、Statement与PreparedStatement区别

区别1

区别2

五、结果集处理

查询一条记录

查询所有记录


一、JDBC概述

java database connection java连接数据库

jdbc是Java制定的的一套用于如何连接数据库的API,可以支持连接多种数据库。

Java只定义了一套标准(抽象类/接口),每种数据库的连接方式都不同,具体连接数据库的实现,数据库开发商自己实现,遵循Java制定的规范。

mysql-connector-java-8.0.16.jar jar文件,打包好的.class文件。

二、JDBC搭建

将MySQL 的jar文件导入到项目

首先 在项目中建立一个lib的文件夹

复制 mysql-connector-java-8.0.16.jar 粘贴在lib中

然后选中 jar 点击 add as library 能打开jar才算完成

三、JDBC代码实现

1.加载驱动

new Driver();  


 Class.forName("com.mysql.cj.jdbc.Driver");
        //动态 加载Driver类 通过反射实现

2.建立与数据库连接

 
String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
         Connection connection= DriverManager.getConnection(url,"root","root");
         System.out.println(connection);
         //com.mysql.cj.jdbc.ConnectionImpl@37574691  返回的类在此位置

3.向数据库发送SQL

对一列数据进行操作

 Statement st=connection.createStatement();//返回的也是实现类
         String mname= "信息与计算科学";
         st.executeUpdate("insert into major(name) value ('"+mname+"')");
 //增加 mname
 ​
 st.executeUpdate("UPDATE major SET NAME = '"+mname+"' WHERE id = "+id);
         // 修改
 ​
         st.executeUpdate("delete  from major where id ="+id);
         //删除

PreparedStatement插入一组数据

4.关闭与数据库的连接

    st.close();
         connection.close();

四、Statement与PreparedStatement区别

区别1

Statement是将变量拼接到sql中,书写不便。

PreparedStatement 不需要将变量拼写到sql中, 使用特定的set方法设置值,书写方便。

区别2

Statement是将变量拼接到sql中,不安全,添加永远成立条件,恶意攻击(sql注入)。

PreparedStatement使用特定的set方法设置值,对设置的值进行检测,防止sql注入。

五、结果集处理

PreparedStatement和Statement中的executeQuery()方法中会返回一 个ResultSet对象,查询结果就封装在此对象中.

使用ResultSet中的next()方法获得下一行数据 使用getXXX(String name)方法获得

查询一条记录

public static void main(String[] args) throws ClassNotFoundException, SQLException {
        findStudentById(1);
    }


 public static void findStudentById (Integer id) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        //动态 加载Driver类
        String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
        String uname="root";
        String password="root";
        Connection connection= DriverManager.getConnection(url,uname,password);

        //将sql与  sql值预编译到  PreparedStatement中并未执行
        PreparedStatement ps= connection.prepareStatement("select num,name,gender,birthday,height,phone,address from student where num =?");

        ps.setObject(1,id);

        ResultSet rs=ps.executeQuery();
        //将查询到的数据封装到  对象中使用
        // next 判断有无下一条数据,没有返回false
        Student student=new Student();

        while(rs.next()){
            student.setNum(rs.getInt("num"));
            student.setName(rs.getString("name"));
            student.setGender(rs.getString("gender"));
            student.setBirthday(rs.getDate("birthday"));
            student.setHeight(rs.getDouble("height"));
            student.setPhone(rs.getString("phone"));
            student.setAddress(rs.getString("address"));
        }

        System.out.println(student);

        ps.close();
        connection.close();

    }

查询所有记录

查询所有记录时,建立一个学生类,查询时建立一个学生的集合来存储。

  public static void main(String[] args) throws ClassNotFoundException, SQLException {
         ArrayList<Student> students= findStudents();
         System.out.println(students);
     }
 public static ArrayList<Student> findStudents () throws ClassNotFoundException, SQLException {
         Class.forName("com.mysql.cj.jdbc.Driver");
         //动态 加载Driver类
         String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
         String uname="root";
         String password="root";
         Connection connection= DriverManager.getConnection(url,uname,password);
 ​
         PreparedStatement ps= connection.prepareStatement("select num,name,gender,birthday,height,phone,address from student");
 ​
 ​
         ResultSet rs=ps.executeQuery();
         //将查询到的数据封装到  对象中使用
         // next 判断有无下一条数据,没有返回false
         ArrayList<Student> students=new ArrayList<>();
 ​
         while(rs.next()){
             Student student=new Student();
             student.setNum(rs.getInt("num"));
             student.setName(rs.getString("name"));
             student.setGender(rs.getString("gender"));
             student.setBirthday(rs.getDate("birthday"));
             student.setHeight(rs.getDouble("height"));
             student.setPhone(rs.getString("phone"));
             student.setAddress(rs.getString("address"));
 ​
             students.add(student);
         }
 ​
 ​
 ​
         ps.close();
         connection.close();
         return students;
 ​
     }
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值