zoukankan      html  css  js  c++  java
  • JDBC入门

    1.介绍

    JDBC是Java DataBase Connectivity的缩写,中文意思是Java数据库连接,是Java中用来规范客户端程序如何来访问数据库的应用程序接口。

    avatar

    本文使用mysql数据库,所以需要下载mysql驱动,本文用的是mysql-connector-java-5.1.48.jar

    2.JDBC常用的接口

    1.Driver接口,用来驱动不同的数据库,连接数据库前必须先装载驱动,方法如下:

    Class.forName("com.mysql.jdbc.Driver"); //装载MySQL驱动
    Class.forName("oracle.jdbc.driver.OracleDriver"); //装载Oracle驱动
    

    2.Connection接口,表示与特定数据库的连接会话

    Connection conn = DriverManager.getConnection("jdbc:mysql://host:port:/database","user","password"); //连接MySQL数据库
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password"); //连接Oracle数据库
    
    

    它有如下方法:

    • Statement createStatement() 创建向数据库发送sql的statement对象
    • PreparedStatement prepareStatement(String sql) 创建向数据库发送sql预编译的 statement对象
    • setAutoCommit(boolean autoCommit) 设置实务是否自动提交
    • commit() 在此连接上提交实务
    • rollback() 在此连接上回滚实务

    3.Statement接口,用于执行sql语句并返回结果集

    • Statement 用于执行简单sql
    • PreparedStatement 用于执行sql预处理,语句中的?号将被setString(int index,String value)
      替换为值,可以有效的防止sql注入,建议使用,它继承自Statement接口

    它有如下方法:

    • boolean execute(String sql) 执行sql,返回是否有结果集
    • ResultSet executeQuery(String sql) 执行select语句,返回ResultSet结果集对象
    • int executeUpdate(String sql) 执行insert/delete/update 语句,返回更新的行数
    • addBatch(String sql) 把多条sql语句放到一个批处理中
    • executeBatch() 批量执行sql

    4.ResultSet接口,它是执行sql查询语句的结果集对象,它有如下方法
    检索不同字段:

    • getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。
    • getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。
    • getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。
    • getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。
    • getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。

    结果集滚动:

    • next()移动指针到下一行,注意默认的指针没有指向数据,next第一次调用指向第一行
    • previous() 移动指针到上一行
    • absolute(int row) 移动到指定行
    • beforeFirst() 移动到最前面
    • afterLast() 移动到最后面

    3.编写JDBC

    根据使用编辑器的不同,首先需要导入数据库驱动jar包,以MySQL数据库和IDEA编辑器为例:
    导包步骤: 点击IDEA当前项目左上角File—>Project Structur—>Modules—>点击右边+号—>Jars Or directories

    1.加载驱动

    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch(ClassNotFoundException e) {
        e.printStackTrace();
    }
    

    2.创建数据库连接

    Connection conn = null;
    try {
        conn = Driver.getConnection("jdbc:mysql://localhost:3306/mydb?charaterEncoding=UTF-8","root","root");
    } catch(SQLException e) {
        e.printStackTrace();
    }
    

    3.创建Statement对象并发起查询

    Statement st = null;
    try {
        st = conn.createStatement();
        String sql = "select * from user_profile where id = 1";
        ResultSet rs = st.executeQuery(sql); 
    }catch(SQLException e) {
        e.printStackTrance();
    }
    
    

    直接使用Statement对象执行sql会有注入的风险,建议PreperedStatement

    PreparedStatement ps = null;
    try {
        String sql = "select * from user_profile where id = ?"; //注意?号会被替换
        ps = conn.preparedStatement(sql);
        ps.setString(1,1); //注意setString(int index,String value) index下标是从1开始
        ResultSet rs = ps.executeQuery();
    } catch(SQLException e) {
        e.printStackTrance();
    }
    
    

    4.处理ResultSet对象结果集

    while(rs.next()) {
        int id = rs.getInt(1);//使用索引
        String username = rs.getString("name"); //使用字段名
        String age = rs.getString("age");
        System.out.println("user name is:" + username + "age is " + age);
    }
    

    5.关闭连接

    finlay {
        if (conn != null) {
            try {
                conn.close();
            }catch(SQLException e) {
                e.printStackTrance();
            }
        }
        
        if(ps !=null) {
            try {
                ps.close();
            } catch(SQLException e) {
                e.printStackTrance();
            }
        }
        if(rs !=null) {
            try {
                rs.close();
            } catch(SQLException e) {
                e.printStackTrance();
            }
        }
    }
    

    完整例子

    package com.mike.jdbc.eg;
    
    import java.mysql.Connection;
    import java.mysql.PerparedStatement;
    import java.mysql.ResultSet;
    
    @author mike
    @date 2020-12-05
    @desc jdbc操作数据库
    public class JdbcDemo {
        public static void mian(String[] args) {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            try {
                //导入数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                //创建数据库连接
                conn = DriverManager(
                    "jdbc:mysql://localhost:3306/mydb?character=UTF-8", //数据库DSN
                    "root", //用户名
                    "root"//密码
                );
                //查询
                String sql = "select * from user_profile where id = ?";
                ps = conn.perparedStatement(sql);
                ps.setString(1,"1");//id替换为1
                rs = ps.executeQuery();
                // insert查询,update更新,delete删除 使用ps.executeUpdate()方法即可
                //处理结果集
                while(rs.next()) {
                    int id = rs.getInt(1);//获取数据为整形结果
                    String username = rs.getString("name");
                    String age = rs.getString("age");
                    System.out.println("username is: " + username + "age is:" + age);
                }
            } catch(ClassNotFoundException e) {
                e.printStackTrance();
            } catch(SQLException e) {
                e.printStackTrance();
            } finally { //关闭连接
                if (conn != null) {
                    try {
                        conn.close();
                    } catch(SQLException e) {
                        e.printStackTrance();
                    }
                }
    
                if (ps != null) {
                    try {
                        ps.close();
                    } catch(SQLException e) {
                        e.printStackTrance();
                    }
                }
    
                if (rs != null) {
                    try {
                        rs.close();
                    } catch(SQLException e) {
                        e.printStackTrance();
                    }
                }
    
            }
           
        }
    }
    
  • 相关阅读:
    关于php操作windows计划任务管理
    学习: 导航器添加修饰符
    写给想学 Javascript 朋友的一点经验之谈
    Firebug Tutorial – Logging, Profiling and CommandLine (Part I)
    getElementsByClass(2)
    关于JavaScript的事件
    Javascript修改对象方法
    采用哪种方式(JS高级程序设计)
    getElementsByClass(1)
    让CSS更简洁、高效些,别再想当然了
  • 原文地址:https://www.cnblogs.com/gy1010/p/14091477.html
Copyright © 2011-2022 走看看