JDBC学习

概念

JDBC是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问。
主要分为4类:
1.sun JDBC- ODBC 桥驱动
2.JDBC 本地驱动–只能在特定数据库,丧失可移植性
3.JDBC网络驱动
4.本地协议纯JDBC驱动

主要接口和类

DriverManager–管理JDBC驱动。
Connection --建立数据库连接,建立可以执行sql语句,获取结果。
Statement–一个该对象执行静态sql,获取语句结果。
PreparedStatement–创建一个可编译的sql语句对象,该对象可多次运行,提高执行效率,是Statement的子类。
ResultSet–用于创建表示sql语句结果的结果集,用户通过结果集完成对数据库的访问。
Driver–数据库驱动接口。
Date–表示sqlDate类型,不含时间。
DatebaseMetaDAta–和ResulstMetaData 一起访问数据库元信息。
Timestamp–Date的扩展,表示sql的时间戳,增加了关于纳秒的时间域。
DatebaseMetaDAta–和ResulstMetaData 一起访问数据库元信息。
DataTRuncation–数据库出现异常,报告异常警告。-----{
–DataTRuncation–数据库出现异常,报告异常警告。
–SqlWarning–数据库警告 。 }-----
DriverPropertyInfo–驱动属性的全部信息。

新建一个mysql数据库

CREATE TABLE `student`(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(225) not null,
age SMALLINT  NOT NULL,
sex CHAR(1) NOT NULL DEFAULT '男',
birthday DATE NOT NULL
)

连接驱动

数据库是资源类数据,使用后需要关闭链接。

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

     public class JDBCExample {
         public static void main(String[] args) {
             String url = "jdbc:mysql://localhost:3306/mydatabase";//mydatebase数据库名
             String username = "username";
             String password = "password";

             try {
                 Connection connection = DriverManager.getConnection(url, username, password);
                 System.out.println("Connected to the database.");
                 // 在这里可以进行数据库操作
                 connection.close();//关闭链接
             } catch (SQLException e) {
                 e.printStackTrace();
             }
         }
     }

封装驱动

package libManger;

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

public class DButil {
    public static final  String DB = "com.mysql.cj.jdbc.Driver";
    public static final  String DBURL = "jdbc:mysql://localhost:3306/my_db";
    public static final  String DBUserName = "root";
    public static final  String DBPassWord = "1234";
    Connection dd = null;
    public DButil() {
        try {
            Class.forName(DB);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        try {
            dd = DriverManager.getConnection(DBURL, DBUserName, DBPassWord);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public Connection getConn() {
        return dd;
    }

    public Connection open(){
        try {
            Class.forName(DB);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        try {
            dd = DriverManager.getConnection(DBURL,DBUserName,DBPassWord);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return dd;
    }
    public void close(){
        try {
            dd.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }


}


Statement和PreparedStatement接口使用

Statement用于执行静态 SQL 语句,而PreparedStatement用于执行预编译的 SQL 语句,它可以防止 SQL 注入攻击,并提高性能。
Statement–增删查改使用

package libManger;

import java.sql.*;

public class DButil_1 {
    public static void main(String[] args) throws SQLException {
        DButil dbutil = new DButil();
        Connection dd = dbutil.open();

        Statement st = dd.createStatement();
        String insert = "insert into student (id,name,age,sex,birthday) values('2','老公','18','男','1988-3-18')";
        String update = "update student  set name = '李四'";
        String delete = "delete student from student where id='1'";
        String select = "select * from student ";
        int ids = st.executeUpdate(delete);
        System.out.println(ids);
        ResultSet s = st.executeQuery(select);
        while (s.next()){
            int id = s.getInt(1);
            String name = s.getString(2);
            String sex = s.getString(4);
            int age = s.getInt(3);
            Date brithday = Date.valueOf(s.getString(5));
            Student student = new Student(id,name,sex,age,brithday);
            System.out.println(student);
        }
        System.out.println(s);


        System.out.println("操作数据库");
        dbutil.close();

    }
}

PreparedStatement增删查改使用

package libManger;

import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DButil_2 {
    public static void main(String[] args) throws SQLException, ParseException {
        DButil dbutil = new DButil();
        Connection dd = dbutil.open();
        String insert = "insert into student (id,name,age,sex,birthday) values(?,?,?,?,?)";
        String update = "update student  set name = ? where id=?";
        String delete = "delete student from student where id=?";
        String select = "select * from student ";
        PreparedStatement ps = dd.prepareStatement(insert);

        ps.setInt(1,4);
        ps.setString(2,"章三");
        ps.setInt(3,89);
        ps.setString(4,"男");
        java.util.Date date = new SimpleDateFormat("yyyy-MM-dd").parse("1998-2-5");
        java.sql.Date date1 = new java.sql.Date(date.getTime());
        ps.setDate(5,date1);

        int ids = ps.executeUpdate(insert);
        System.out.println(ids);

        PreparedStatement ps1 = dd.prepareStatement(select);
        ResultSet rs = ps1.executeQuery();
        while (rs.next()) {
            int id = rs.getInt(1);
            String name = rs.getString(2);
            String sex = rs.getString(4);
            int age = rs.getInt(3);
            java.sql.Date brithday = Date.valueOf(rs.getString(5));
            Student student = new Student(id, name, sex, age, brithday);
            System.out.println(student);
            System.out.println(rs);
        }
            rs.close();
            ps1.close();
            System.out.println("操作数据库");
            dbutil.close();

    }
}

优势

1.平台独立性:
由于 Java 的平台独立性,使用 JDBC 编写的程序可以在不同的操作系统和数据库平台上运行,只需更换相应的 JDBC 驱动程序。
2.易于使用:
提供了一套相对简单的 API,使开发人员能够轻松地执行数据库操作,包括查询、插入、更新和删除数据。
3.安全性:
通过使用PreparedStatement可以防止 SQL 注入攻击,提高了应用程序的安全性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值