张晨光-JAVA零基础保姆式JDBC技术教程

Posted 云和数据张老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了张晨光-JAVA零基础保姆式JDBC技术教程相关的知识,希望对你有一定的参考价值。

JDBC文档

JDBC概述

JDBC概述

Java DataBase Connectivity Java 数据库连接技术

JDBC的作用

通过Java语言操作数据库,操作表中的数据

SUN公司为**了简化、**统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC

JDBC的本质

是官方(sun公司)定义的一套操作所有关系型数据库的规则(接口)。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,运行时的代码其实是驱动jar包中的实现类。

总结:

在java中要想访问数据库只能通过JDBC.
JDBC是java访问数据库的基础,其他数据库访问技术都是对JDBC的封装(Hibernate,MyBatis)
JDBC是为了访问不同的数据库,提供了一种统一的访问方式
JDBC本身是java连接数据库的一个标准,是进行数据库连接的抽象层.由java编写的一组类和接口,接口的实现由各大数据库厂商来实现

JDBC 入门案例

使用junit测试用例

/**
 * @Auther: yanqi
 * 只有无返回值和没有参数据的情况下才能使用junit,点击方法用右击运行JUnit run 
 * @Desc:
 *      在同一个类中只能有一个main方法,这个main是被jvm所调用
 *      我还想测试main2,没办法去运行这个main2
 *      为了解决多次测试问题?
 *      提供了一个  【测试用例】 junit
 */
public class JdbcDemo1 

    /*
        使用junit测试用例:
            1:在方法上加@Test
            2: 前提-测试的方法返回值只能是void , 不能参数
            3:注意 类名不能叫 test
     */

    //单元测试
    @Test
    public void test1()
        System.out.println("aaaa");
    

    //单元测试
    @Test
    public void test2()
        System.out.println("bbbb");
    



JDBC_CRUD操作

实现步骤

1、要连接mysql数据库。有一个mysql的数据库,并且要启动
2、创建一个数据库,创建一个表,把表添加一些数据。
3、找到msyql的驱动,并且拷贝到工程中。build-path
4、书写java代码。

准备数据库

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(25) DEFAULT NULL,
  `passworld` varchar(25) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建JavaWeb工程

添加驱动jar包

JDBC的查询操作

    /**
     * 通过jdbc连接数据库步骤
     * 1、加载驱动
     * 2、连接数据库
     * 3、创建statement对象
     * 4、发送sql
     * 5、处理结果集
     * 6、关闭连接
     */
public class JDBC_CRUD 
    /**
     * jdbc实现查询操作
     */
    @Test
    public void TestSelectUser() throws Exception 
        // 1、加载驱动
        Class.forName("com.mysql.jdbc.Driver");

        // 2、连接数据库
        String url="jdbc:mysql://localhost:3306/test";
        String user="root";
        String password ="root";
        Connection conn = DriverManager.getConnection(url, user, password);

        // 3、创建statement对象,这个对象是可以发送sql
        Statement statm = conn.createStatement();

        //4、发送sql
        String sql="select * from t_user";
        ResultSet rs = statm.executeQuery(sql);

        //5、处理结果集
        while (rs.next())//指针一个一个的去找,如果找到就取出
            int id = rs.getInt("id");
            String username = rs.getString("username");
            String passworld2 = rs.getString("passworld");
            int age = rs.getInt("age");
            System.out.println(id+"-"+username+"-"+passworld2+"-"+age);
        

        // 6、关闭连接 后打开的先关闭
        rs.close();
        statm.close();
        conn.close();
    

两种取值方式

//5、处理结果集
while (rs.next())//指针一个一个的去找,如果找到就取出

    /**
     * 取值方式有两种:
     * 1、按字段名来取,比较真观,推荐使用(常用)
     * 2、按列号来取,可以在字段少的情况下使用
     */
    int id = rs.getInt(1);//表示第一列id字段
    String username = rs.getString(2);//表示第二列username字段
    String passworld2 = rs.getString("passworld");
    int age = rs.getInt("age");

    System.out.println(id+"-"+username+"-"+passworld2+"-"+age);

JDBC的添加操作

/**
 * jdbc实现添加操作
 */
@Test
public void TestAddUser() throws Exception 
    // 1、加载驱动
    Class.forName("com.mysql.jdbc.Driver");

    //2、连接数据库
    String url="jdbc:mysql://127.0.0.1:3306/test";
    String user="root";
    String pwd="root";
    Connection conn = DriverManager.getConnection(url, user, pwd);

    //3、创建statement对象
    Statement stmt = conn.createStatement();

    //4、发送sql  添加,修改,删除 都用executeUpdate()方法
    String sql = "INSERT INTO `test`.`t_user`(`id`, `username`, `passworld`, `age`) VALUES (null, 'rose', '123', 97)";
    int i = stmt.executeUpdate(sql);
    System.out.println(i);//表示的影响的行数

    //5、关闭连接
    stmt.close();
    conn.close();

JDBC的删除操作

/**
 * jdbc实现删除操作
 */
@Test
public void TestDeleteUser() throws Exception 
    // 1、加载驱动
    Class.forName("com.mysql.jdbc.Driver");

    // 2、连接数据库
    String url="jdbc:mysql://127.0.0.1:3306/test";
    String user="root";
    String pwd="root";
    Connection conn = DriverManager.getConnection(url, user, pwd);

    // 3、创建statement对象
    Statement stmt = conn.createStatement();

    // 4、发送sql
    String sql="delete from t_user";
    int i = stmt.executeUpdate(sql);
    System.out.println(i);

    // 5、关闭连接
    stmt.close();
    conn.close();

JDBC的修改操作

/**
 * jdbc实现修改操作
 */
@Test
public void TestUpdateUser() throws Exception 
    // 1、加载驱动
    Class.forName("com.mysql.jdbc.Driver");

    // 2、连接数据库
    String url="jdbc:mysql://127.0.0.1:3306/test";
    String user="root";
    String pwd="root";
    Connection conn = DriverManager.getConnection(url, user, pwd);

    // 3、创建statement对象
    Statement stmt = conn.createStatement();

    // 4、发送sql
    String sql="update t_user set username ='张三' where id = 4 ";
    int i = stmt.executeUpdate(sql);
    System.out.println(i);

    // 5、关闭连接
    stmt.close();
    conn.close();

异常的处理

public class JdbcEx 
    /**
     * jdbc实现查询操作
     */
    @Test
    public void TestSelectUser()
        // 1、加载驱动
        try 
            Class.forName("com.mysql.jdbc.Driver");
         catch (ClassNotFoundException e) 
            e.printStackTrace();
        

        // 2、连接数据库
`	    String url="jdbc:mysql://localhost:3306/test";
        String user="root";
        String password ="root";
        Connection conn = null;
        Statement statm = null;
        ResultSet rs = null;
        try 
            conn = DriverManager.getConnection(url, user, password);

            // 3、创建statement对象,这个对象是可以发送sql
            statm = conn.createStatement();

            //4、发送sql
            String sql="select * from t_user";
            rs = statm.executeQuery(sql);

            //5、处理结果集
            while (rs.next())//批针一个一个的去找,如果找到就取出

                /**
                 * 取值方式有两种:
                 * 1、按字段名来取,比较真观,推荐使用(常用)
                 * 2、按列号来取,可以在字段少的情况下使用
                 */
                int id = rs.getInt(1);//表示第一列id字段
                String username = rs.getString(2);//表示第二列username字段
                String passworld2 = rs.getString("passworld");
                int age = rs.getInt("age");

                System.out.println(id+"-"+username+"-"+passworld2+"-"+age);
            
         catch (SQLException e) 
            e.printStackTrace();
        finally 
            // 6、关闭连接 后打开的先关闭
            try 
                if(rs != null)
                    rs.close();
                    rs =null;//关闭连接,给赋值null,gc垃圾回收回机制会优先处理这些对象
                
             catch (SQLException e) 
                e.printStackTrace();
            
            try 
                if(statm != null)
                    statm.close();
                    statm=null;
                
             catch (SQLException e) 
                e.printStackTrace();
            
            try 
                if(conn != null)
                     conn.close();
                     conn = null;
                
             catch (SQLException e) 
                e.printStackTrace();
            
        

    

工具类的抽取

public class JDBCUtil 
    //静态代码块,随着类的加载而加载,并且只加载一次
    static 
        try 
            Class.forName("com.mysql.jdbc.Driver");
         catch (ClassNotFoundException e) 
            e.printStackTrace();
        
    
    //获取连接
    public static Connection getConnection()
        String url="jdbc:mysql://localhost:3306/test";
        String user="root";
        String password ="root";
        Connection conn = null;
        try 
            conn =  DriverManager.getConnection(url, user, password);
         catch (SQLException e) 
            e.printStackTrace();
        
        return conn;
    
    //关闭方法
    public static void close(ResultSet rs , Statement statm, Connection conn)
        try 
            if(rs != null)
                rs.close();
                rs =null;//关闭连接,给赋值null,gc垃圾回收回机制会优先处理这些对象
            
         catch (SQLException e) 
            e.printStackTrace();
        
        try 
            if(statm != null)
                statm.close();
                statm=null;
            
         catch (SQLException e) 
            e.printStackTrace();
        
        try 
            if(conn != null)
                conn.close();
                conn = null;
            
         catch (SQLException e) 
            e.printStackTrace();
        
    

    //关闭方法
    public static void close( Statement statm, Connection conn)
        try 
            if(statm != null)
                statm.close();
                statm=null;
            
         catch (SQLException e) 
            e.printStackTrace();
        
        try 
            if(conn != null)
                conn.close();
                conn = null;
            
         catch (SQLException e) 
            e.printStackTrace();
        
    

工具类的测试

public class UtilTest 
    @Test
    public void testUpdate()
        Connection conn = null;
        Statement stmt = null;
        try 
            conn = JDBCUtil.getConnection();
            stmt = conn.createStatement();
            int i = stmt.executeUpdate("update t_user set username = '江一燕' where id = 4");
            System.out.println(i);
         catch (SQLException e) 
            e.printStackTrace();
        finally 
            JDBCUtil.close(stmt,conn);
        

    

    /**
     * 测试的查询
     */
    @Test
    public void test()
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try 
            conn =  JDBCUtil.getConnection();

            stmt = conn.createStatement();

            rs = stmt.executeQuery("select * from t_user");

            while (rs.next())
                int id = rs.getInt("id");
                String username = rs.getString("username");
                String passworld = rs.getString("passworld");
                int age = rs.getInt("age");
                System.out.println(id);
                System.out.println(username);
                System.out.println(passworld);
                System.out.println(age);
            

         catch (SQLException e) 
            e.printStackTrace();
        finally 
            JDBCUtil.close(rs,stmt,conn);
        
    

工具类的优化

jdbc.properties

ClassforName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
user=root
password=root
public class JDBCUtil 
    private static  String classforName;
    private static String url;
    private static  String user;
    private static String password;
    private static Connection conn = null;

    //静态代码块,随着类的加载而加载,并且只加载一次
    static 

        //FileInputStream fis = null;  //获取的配置文件方式一
        Properties pro = null;
        try 
            //fis = new FileInputStream("src/jdbc.properties"); //获取的配置文件方式一,web项目中无法用
            
            //获取的配置文件二(通过类加载器)
            InputStream is=JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
            pro = new Properties();
            
            //加载到Properties集合对象中
            pro.load(is);
         catch (IOException e) 
            e.printStackTrace();
        finally 
            try 
                is.close();
     

以上是关于张晨光-JAVA零基础保姆式JDBC技术教程的主要内容,如果未能解决你的问题,请参考以下文章

JDBC从零开始的保姆级教程!!!

JDBC保姆级教程_jdbc学习笔记

保姆级Java入门练习教程,附代码讲解,小白零基础入门必备(建议收藏)

Mysql学习基于Swing+jdbc+mysql的Java图书管理系统保姆级教程

JAVA保姆式JDBC数据库免费教程之02-连接池技术

保姆级的HTML零基础教程少见吧?这是第一节