栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDBC连接数据库:尚学堂笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC连接数据库:尚学堂笔记

JDBC介绍
  • JDBC(Java Database Connectivity) 是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql, javax.sql)使用这些类库可以以一种 标准 的方法、方便地访问数据库资源

  • jdbc用于做数据库与java的连接的接口

1.JDBC程序编写步骤

2.获取数据库连接

1.1要素一:Driver 接口实现类(驱动类)

java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。 mySql的驱动: com.mysql.cj.jdbc.Driver

将驱动jar 包拷贝到 Java 工程的一个目录中,习惯上新建一个 lib 文件夹。(复制文件,贴贴到bin即可)

在驱动 jar 上 右键–>Build Path–>Add to Build Path

(新建路径后才可以使用此驱动包,否则不可用)

1.2加载与注册JDBC驱动

加载驱动:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名

Class.forName(“com.mysql.cj.jdbc.Driver”);

注册驱动:DriverManager 类是驱动程序管理器类,负责管理驱动程序

使用 DriverManager.registerDriver ("com.mysql.cj.jdbc.Driver") 来注册驱动

2. 要素二:URL(统一资源定位器,即:网址)

JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。

jdbc:子协议:子名称 协议:JDBC URL中的协议: jdbc 子协议:子协议用于标识一个数据库驱动程序 子名称:一种标识数据库的方法。

MySQL的连接URL编写方式:

jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
jdbc:mysql://localhost:3306/atguigu
jdbc:mysql://127.0.0.1:3306/librarymanage

3 要素三:用户名和密码

user, password 可以用 “属性名=属性值” 方式告诉数据库 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接

user=root
password=xxxxxxxxx

连接方式一:基本原理(不常用)

//1.提供java.sql.Driver接口实现类的对象,为了实现驱动连接
     Driver driver = new com.mysql.cj.jdbc.Driver();
​
//2.提供url,实现对某个数据库的操作
     String url = "jdbc:mysql://localhost:3306/test";
    
//3.提供Properties的对象,指明用户名 root 和 密码 
      Properties info = new Properties();
      info.setProperty("user", "root");
      info.setProperty("password", "XXXXXX");
    
//4.调用driver的connect(),获取连接,以此连接数据库
      Connection conn = driver.connect(url, info);

Properties类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常改变的,为了方便用户的配置,能让用户够脱离程序本身去修改相关的变量设置。就像在Java中,其配置文件常为.properties文件,是以键值对的形式进行参数配置的。

连接方法二:(常用)

//1.数据库连接的4个基本要素:
   String url = "jdbc:mysql://localhost:3306/test";
   String user = "root";
   String password = "XXXXXX";
   String driverName = "com.mysql.jdbc.Driver";
​
 //2.加载驱动 (①实例化Driver ②注册驱动)
  Class.forName(driverName);
            
 //3.注册驱动
  DriverManager.registerDriver(driver);
        
 //4.获取连接
  Connection conn = DriverManager.getConnection(url, user, password);
​
3.实现数据库的增删改查

数据库的增删改查由sql语句来实现,而增删改可归为一类,其操作相同只是sql的不同,而查询为另一类。这些操作由PrepatedStatement来实现。

PreparedStatement 介绍

  • 可以通过调用 Connection 对象的 preparedStatement(String sql) 方法获取 PreparedStatement 对象

  • PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句

  • PreparedStatement 对象所代表的 SQL 语句中的参数用问号( ? )来表示,调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数

  • setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值

//添加
insert into 表名(变量)values(?)
​
//修改
update 表名 set 变量= ? where 用于定位的变量 = ?
​
//删除
delete form 表名 where 用于定位的变量 = ?;
​
//查询
select 变量 from 表名 where 用于定位的变量 = ?

举例说明:

//向数据库添加一个记录
    public void testconnction() {       
  
    Connection conn=null;
    PreparedStatement ps=null;
    try {
        //读取配置文件的三个基本信息
        String  url="jdbc:mysql://localhost:3306/manage";
        String user="root";
        String passsword="XXXXX";
        
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        
        //获取连接
        conn=DriverManager.getConnection(url,user,passsword);
        
        //预编译sql语句,返回ps实例
        String sql
        = "insert into  student(id,name,age)values(?,?,?)";
        ps = conn.prepareStatement(sql);
        
        //填充占位符
        ps.setInt(1,4);(1:为位置)
        ps.setString(2,"哪吒");
        ps.setInt(3,19);
        
        //执行操作
        ps.execute();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        //资源的关闭
        try {
            if(ps!=null)
               ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn!=null)
               conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    }

运行后:

 

//修改数据库的一条记录
    public void testUpate() {
        
        Connection conn=null;
        PreparedStatement ps=null;
        try {
        //1.数据库的连接  
        //读取配置文件的三个基本信息
        String  url="jdbc:mysql://localhost:3306/manage";
        String user="root";
        String passsword="XXXXX";
        
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        
        //获取连接
        conn=DriverManager.getConnection(url,user,passsword);
            
        //2.预编译sql语句,返回preparedstatement的实例
        String sql = "update student set name= ? where id = ?";//修改名字,通过id来查到位置
        ps = conn.prepareStatement(sql);
            
            //3.填充占位符
            ps.setObject(1, "小帅");
            ps.setObject(2, 1);
            
            //4.执行
            ps.execute();
        } 
        catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //5.资源的关闭
            try {
            if(ps!=null)
               ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn!=null)
               conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }   }

运行后:

 

//删除一个记录
    public void testconnction() {       
    Connection conn=null;
    PreparedStatement ps=null;
    try {
        //读取配置文件的三个基本信息
        String  url="jdbc:mysql://localhost:3306/manage
        String user="root";
        String passsword="XXXXXX";
        
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        
        //获取连接
        conn = DriverManager.getConnection(url,user,passsword);
        
        //  System.out.println(conn);
        
        //预编译sql语句,返回ps实例
        String sql = "DELETE FROM student WHERe id = ?";
        ps = conn.prepareStatement(sql);
        
        //填充占位符
        ps.setInt(1,1);
        
        //执行操作
        ps.execute();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        //资源的关闭
        try {
            if(ps!=null)
               ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn!=null)
               conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    }
//通用的增删改操作
    public void update(String sql,Object ...args) {//sql中占位符的个数与可变型参args的个数一致
    Connection conn=null;
    PreparedStatement ps=null;
    try {
        //1.获取数据库连接
        conn = jdbcUtil.getConnection();
        //2.预编译sql语句,返回preparestament的实例
        ps = conn.prepareStatement(sql);
        //3.填充占位符
        for(int i=0;i

调用通用的代码:

public void testCommonupdate() {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入书名");
        String book_name=input.next();
        System.out.println("请输入价格");
        double book_price=input.nextDouble();
        System.out.println("请输入作者");
        String book_writer=input.next();
        System.out.println("请输入数量");
        int book_num=input.nextInt();
        
        String sql="insert into book(book_name,book_price,book_writer,book_num)values(?,?,?,?)";
        
        update(sql,book_name,book_price,book_writer,book_num);
        
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/331718.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号