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();
                    }
                }
    
            }
           
        }
    }
    
  • 相关阅读:
    Siege 3.0 正式版发布,压力测试工具
    Pomm 1.1.2 发布,专为 PG 设计的 ORM 框架
    Whonix 0.5.6 发布,匿名通用操作系统
    国内开源 java cms,Jspxcms 2.0 发布
    EZNamespaceExtensions.Net v2013增加对上下文菜单、缩略图、图标、属性表的支持
    GNU Guile 2.0.9 发布,Scheme 实现
    jdao 1.0.4 发布 轻量级的orm工具包
    OpenSearchServer 1.4 RC4 发布
    Percona Server for MySQL 5.5.3030.2
    Samba 4.0.5 发布
  • 原文地址:https://www.cnblogs.com/gy1010/p/14091477.html
Copyright © 2011-2022 走看看