Java中的JDBC

一、JDBC概述

JDBC(Java DataBase Connectivity)java数据库连接

 是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问, 它由一组用Java语言编写的类和接口组成。

有了JDBC,java开发人员只需要编写一次程序,就可以访问不同的数据库

JDBC API:

供程序员调用的接口与类,集成在java.sql包中

DriverManager类作用:管理各种不同的jDBC驱动

Connection 接口 与特定数据库的连接

Statement 接口 执行sql

PreparedStatement接口 执行sql

ResultSet接口 接收查询结

二、JDBC搭建

●建立与数据库连接:

 这需要使用DriverManager.getConnection()方法来创建一个 Connection对象,它代表一个物理连接的数据库.

Connection conn = DriverManager.getConnection(URL,USER,PASS);         URL:jdbc:mysql://ip(127.0.0.1):端口(3306)/数据库 名?serverTimezone=Asia/Shanghai

        USER:用户名(root)

        PASS:密码

获得Satement执行sql语句

Statement st = connection.createStatement();

Satement中的方法:

Int executeUpdate(String sql) 用于执行ddl语句和dml(增,删,改)语句 返回 操作的行数

用于执行ddl语句返回0

用于执行dml语句返回操作的行数

ResultSet executeQuery(String sql); 用于执行查询语句 返回一个 ResultSet 集合

获得PrepareStatement执行sql语句

在sql语句中参数位置使用占位符,使用setXX方法向sql中设置参数

PrepareStatement ps = connection.prepareStatement(sql);

PrepareStatement中的方法:

Int executeUpdate() 用于执行ddl语句和dml(增,删,改)语句

返回操作的行数

用于执行ddl语句返回0

用于执行dml语句返回操作的行数

ResultSet executeQuery(); 用于执行查询语句 返回一个ResultSet

关闭与数据库的链接通道

 每次操作完成后关闭所有与数据库交互的通道

st.close();

rs.close();

conn.close();

ps.close();

package com.wcb.JDBC;

import com.mysql.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class demo1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //加载驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");//用于加载mysql驱动类
        //DriverManager.registerDriver(new Driver());

        //建立数据可连接,获得连接对象
        String url ="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";//定义连接sql所需的url
        String user ="root";//用户名
        String password ="";//密码
        //建立了与数据库的连接,获得了一个连接对象。
        Connection connection =DriverManager.getConnection(url,user,password);

        //发送sql
        Statement st = connection.createStatement();//创建一个Statement对象,用于向数据库发送SQL语句。
        st.executeUpdate("insert into major(name)value('统计')");//代码执行SQL语句

        //关闭数据库连接
        st.close();
        connection.close();
    }
}

三、增删改查

在执行SQL语句时推荐采用预编译的模式

因为在删除时,使用字符串连接可以在语句后添加类似于or1==1的逻辑语句进行攻击数据库,导致数据全部删除

而预编译模式则不会,因为占位符?只允许传入一个参数

增删改
package com.wcb.JDBC.增删改;

import java.sql.*;

public class demo3 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        demo3 demo2 =new demo3();

        //demo2.save("www","男","2004-3-3", "17914567896", 2);
        demo2.update("www3","男","2004-3-3", "17914567896", 2,23);
        demo2.delete("6");
    }
    public void save(String name,String gender,String birthday,String phone,int majorid) throws ClassNotFoundException, SQLException {
        //加载驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url ="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";//定义连接sql所需的url
        String users = "root";
        String password = "";

        Connection connection = DriverManager.getConnection(url,users,password);//建立连接
        Statement statement =connection.createStatement();//建立对象用于发送sql语句

        //执行sql语句
        //connection对象中的预编译方法 ?是占位符,表示此处需要一个参数
        PreparedStatement ps = connection.prepareStatement("insert into student(name,gender,birthday,phone,reg_time,majorid)value(?,?,?,?,now(),?)");
                        //传值
                        ps.setObject(1,name);
                        ps.setObject(2,gender);
                        ps.setObject(3,birthday);
                        ps.setObject(4,phone);
                        ps.setObject(6,majorid);
        //执行
        ps.executeUpdate();

        //关闭
        statement.close();
        connection.close();

    }
    public void update(String name,String gender,String birthday,String phone,int majorid,int index) throws ClassNotFoundException, SQLException{
        //加载驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url ="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";//定义连接sql所需的url
        String users = "root";
        String password = "";

        Connection connection = DriverManager.getConnection(url,users,password);//建立连接
        Statement statement =connection.createStatement();//建立对象用于发送sql语句

        //执行sql语句
        PreparedStatement preparedStatement=connection.prepareStatement("update student set  name = ?,gender = ?, birthday=?,phone = ?,reg_time=now(),majorid = ? where number =? ");
                                            //传值
                                            preparedStatement.setObject(1, name);
                                            preparedStatement.setObject(2, gender);
                                            preparedStatement.setObject(3,birthday);
                                            preparedStatement.setObject(4, phone);
                                            preparedStatement.setObject(5,majorid);
                                            preparedStatement.setObject(6, index);
                                            //执行
                                            preparedStatement.executeUpdate();
        statement.close();
        connection.close();

    }
    public void delete(String num) throws ClassNotFoundException, SQLException{
        //加载驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url ="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";//定义连接sql所需的url
        String users = "root";
        String password = "";

        Connection connection = DriverManager.getConnection(url,users,password);//建立连接
        Statement statement =connection.createStatement();//建立对象用于发送sql语句

        //执行sql语句
        PreparedStatement preparedStatement=connection.prepareStatement("delete from student where number =?");
                    //传值
                    preparedStatement.setObject(1, num);

                    //执行
                    preparedStatement.executeUpdate();

        statement.close();
        connection.close();

    }


}
package com.wcb.JDBC.查;

import java.sql.*;
import java.util.ArrayList;

public class Demo4 {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Demo4 demo4 =new Demo4();
        //Student student  = demo4.findStudentByNum(10);
        //System.out.println(student);
        ArrayList<Student> students = demo4.findStudentByGender("女");
        for(Student student:students){
            System.out.println(student);
        }
    }
    public ArrayList<Student> findStudentByGender(String gender) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url ="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";//定义连接sql所需的url
        String user ="root";//用户名
        String password ="";//密码

        //建立连接
        Connection connection = DriverManager.getConnection(url,user,password);
        //预编译
        PreparedStatement preparedStatement =connection.prepareStatement("select number,name,gender,birthday,phone,reg_time from student where gender = ?");
        //传入数据
        preparedStatement.setObject(1, gender);
        //查询操作
        ResultSet resultSet = preparedStatement.executeQuery();//将查询结构封装到ResultSet类型的对象中 需要将数据封装到指定类型的对象中

        //ResultSet对象.next()   如果结果集中存在下一个 .next返回true 否则返回false

        ArrayList<Student> students =new ArrayList<>();
        while(resultSet.next()){
            Student student =new Student();
            //获取数据
            student.setNum(resultSet.getInt("number"));
            student.setName(resultSet.getString("name"));
            student.setGender(resultSet.getString("gender"));
            student.setBirthday(resultSet.getDate("birthday"));
            student.setPhone(resultSet.getString("phone"));
            student.setRegTime(resultSet.getTimestamp("reg_time"));
            students.add(student);
        }

        //关闭
        preparedStatement.close();
        connection.close();
        resultSet.close();
        return students;
    }


    public Student findStudentByNum(int num) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url ="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";//定义连接sql所需的url
        String user ="root";//用户名
        String password ="";//密码

        //建立连接
        Connection connection = DriverManager.getConnection(url,user,password);
        //预编译
        PreparedStatement preparedStatement =connection.prepareStatement("select number,name,gender,birthday,phone,reg_time from student where number = ?");
            //传入数据
            preparedStatement.setObject(1, num);
            //查询操作
            ResultSet resultSet = preparedStatement.executeQuery();//将查询结构封装到ResultSet类型的对象中 需要将数据封装到指定类型的对象中

        //ResultSet对象.next()   如果结果集中存在下一个 .next返回true 否则返回false
        Student student =null;
        while(resultSet.next()){
            student =new Student();
            //获取数据
            student.setNum(resultSet.getInt("number"));
            student.setName(resultSet.getString("name"));
            student.setGender(resultSet.getString("gender"));
            student.setBirthday(resultSet.getDate("birthday"));
            student.setPhone(resultSet.getString("phone"));
            student.setRegTime(resultSet.getTimestamp("reg_time"));
        }

        //关闭
        preparedStatement.close();
        connection.close();
        resultSet.close();
        return student;
    }
}

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北京最后的深情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值