JDBC入门简介详解编程语言

JDBC入门:
JDBC(Java Data Base Connectivity),java数据库连接。

准备:
开发工具:eclipse
数据库: MySQL
jar包:mysql-connector-java-5.1.22-bin.jar

JDBC helloworld,编写流程
– 0 导入jar包(驱动)
– 1 注册驱动
– 2 获得链接
– 3 获得语句执行者
– 4 执行sql语句
– 5 处理结果
– 6 释放资源

Jvav 代码:

package com.my.jdbc; 
 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
 
public class MyJdbcTest { 
 
    public static void main(String[] args) throws Exception { 
        // 1 注册驱动 
        Class.forName("com.mysql.jdbc.Driver"); 
        // 2 获得链接 
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1234"); 
        // 3 获得语句执行者 
        Statement st = conn.createStatement(); 
        // 4 执行sql语句 
        ResultSet rs = st.executeQuery("select * from users"); 
        // 5 处理结果 
        while (rs.next()) { 
            String id = rs.getString("id"); 
            String name = rs.getString("name"); 
            int age = rs.getInt("age"); 
            System.out.println(id + " # " + name + " # " + age); 
        } 
        // 6 释放资源 
        rs.close(); 
        st.close(); 
        conn.close(); 
 
    } 
 
} 

结果:
这里写图片描述

JDBC API详解

  • 1 注册驱动
  • 接口:java.sql.Driver ,每个驱动程序类必须实现的接口
  • 工具类:java.sql.DriverManager ,驱动管理类
  • 提供一个static方法:registerDriver(Driver driver) ,注册驱动
  • 最终代码:Class.forName(“com.mysql.jdbc.Driver”);

  • 2 获得链接

    • 接口:java.sql.Connection,与特定数据库的连接

      • 获得链接:DriverManger.getConnection(url,user,password)
      • user –> 数据库的用户名
      • password –> 用户名对应的密码
      • mysql url –>
        jdbc:mysql://localhost:3306/mydb

        • 方法 :
        • 获得预处理对象:prepareStatement(String sql)
        • 执行数据库存储过程:prepareCall(String sql)
  • 3 获得语句执行者

    • 接口:java.sql.Statement 获得方式:createStatement()
    • 方法:
      执行DQL(数据查询语言)语句 :ResultSet executeQuery(sql)
      ,返回值表示结果集,将所有的查询数据都存放到该对象

      执行DML(数据操作语句)语句 :int executeUpdate(sql) ,
      返回值表示响应的行数
      执行sql语句:boolean execute(sql) 如果返回true,表示执行DQL;如果返回false,表示执行的DML 返回结果为true时,通过getResultSet获得结果集

  • 4 处理结果

    • 接口:java.sql.ResultSet
    • 获得方式:Statement.executeQuery(sql) 详解
      1.默认情况结果集指向头
      2.当执行结果的next()方法,游标将向下移动一行
      3.通过getXxx方法获得需要的数据
      方法:
      getXxx(字段名称),通过指定的字段名称,获得当前记录的字段的值。 getXxx(字段索引),索引从1开始。通过指定的索引,获得指定索引的字段的值。
      4.next() 如果指向的记录,返回true,如果指向头或尾,返回false

如果出现中文乱码,在获得链接时,在url中追加参数:?useUnicode=true&characterEncoding=UTF-8
例如:DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8”, “root”, “1234”);

  • sql注入
    页面传递的数据,作为了sql语句的一部分。被数据库进行编译。
    • 预处理对象
      接口:java.sql.PreparedStatement
      获得方式:Connection.preparedStatement(sql) ,提前提供sql语句将实际参数使用?替换预先编译sql语句,在使用实际参数替换回?,实际参数就不会作为sql语句被编译,只作为具体的参数

JDBC 的增上改查:

package com.my.jdbc; 
 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
 
import org.junit.Test; 
 
public class CRUDTest { 
 
    @Test 
    public void save() throws Exception{ 
        Class.forName("com.mysql.jdbc.Driver"); 
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1234"); 
        Statement st = conn.createStatement(); 
        int r = st.executeUpdate("insert into users(id,name,age) values('u004','Joe','15')"); 
        System.out.println(r); 
        st.close(); 
        conn.close(); 
 
    } 
 
    @Test 
    public void update() throws Exception{ 
        Class.forName("com.mysql.jdbc.Driver"); 
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1234"); 
        Statement st = conn.createStatement(); 
        int r = st.executeUpdate("update users set age = '21' where id = 'u004' "); 
        System.out.println(r); 
        st.close(); 
        conn.close(); 
 
    } 
 
    @Test 
    public void delete() throws Exception{ 
        Class.forName("com.mysql.jdbc.Driver"); 
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1234"); 
        Statement st = conn.createStatement(); 
        int r = st.executeUpdate("delete from users where id = 'u004'");  
        System.out.println(r); 
        st.close(); 
        conn.close(); 
    } 
 
    @Test 
    public void findById() throws Exception{ 
        Class.forName("com.mysql.jdbc.Driver"); 
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1234"); 
        Statement st = conn.createStatement(); 
        ResultSet rs = st.executeQuery("select * from users where id = 'u004'"); 
        //处理结果  -- 通过id查询,没有结果,只有一条记录 
        if(rs.next()){ 
            String id = rs.getString("id"); 
            String name = rs.getString("name"); 
            int age = rs.getInt("age"); 
            System.out.println(id + " # " + name + " # " + age); 
        } else { 
            System.out.println("没有结果"); 
        } 
        rs.close(); 
        st.close(); 
        conn.close(); 
 
    } 
 
} 

JdbcUtils
将driver, url,username,password基本四项移到配置文件

jdbcinfo.properties:

driver=com.mysql.jdbc.Driver 
url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8 
username=root 
password=1234 

JdbcUtils demo;

package com.my.jdbc; 
 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.ResourceBundle; 
 
public class JdbcUtils { 
 
    private static Connection conn; 
 
    static { 
        try { 
            // jdbc 基本4项 : driver url user password 
            ResourceBundle bundle = ResourceBundle.getBundle("jdbcinfo"); // 文件基本名称 
            String driver = bundle.getString("driver"); 
            String url = bundle.getString("url"); 
            String user = bundle.getString("username"); 
            String password = bundle.getString("password"); 
            // 1 注册驱动 
            Class.forName(driver); 
            // 2 获得链接 
            conn = DriverManager.getConnection(url, user, password); 
        } catch (Exception e) { 
            throw new RuntimeException(e.getMessage(), e); 
        } 
    } 
 
    public static Connection getConnection() { 
        return conn; 
    } 
 
    public static void closeResource(Connection conn, Statement st, ResultSet rs) { 
        try { 
            if (rs != null) { 
                rs.close(); 
            } 
        } catch (SQLException e) { 
            throw new RuntimeException(e.getMessage(), e); 
        } finally { 
            try { 
                if (st != null) { 
                    st.close(); 
                } 
            } catch (SQLException e) { 
                throw new RuntimeException(e.getMessage(), e); 
            } finally { 
                try { 
                    if (conn != null) { 
                        conn.close(); 
                    } 
                } catch (SQLException e) { 
                    throw new RuntimeException(e.getMessage(), e); 
                } 
            } 
        } 
 
    } 
 
} 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/12070.html

(0)
上一篇 2021年7月19日 14:18
下一篇 2021年7月19日 14:18

相关推荐

发表回复

登录后才能评论