JDBC

Posted qfdy123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC相关的知识,希望对你有一定的参考价值。

1、什么是jdbc

  Java数据库连接,由一些接口和类构成的API(Application Programming Interface,应用程序编程接口),java对外提供数据库连接的接口,各个数据库厂商提供连接时的实现类(驱动),实现java和数据库的连接

       jdbc作用:是java程序和数据库之间的桥梁

  应用程序,jdbcAPI,数据库驱动及数据库之间的关系

技术图片

 

2、jdbc开发步骤

package com.zy.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

import org.junit.Test;

public class MyJDBC 

    public static void main(String[] args) throws Exception 
        // jdbc是连接数据库一种技术
        //程序——>数据库
        //八股文编程法----顺序要求明显,不要自由发挥
        
        //1加载驱动
        //该复制的不要手写,所有bug都是手写出来的        
        Class forName = Class.forName("com.mysql.jdbc.Driver");
        //2建立连接                                                          ip       端口    数据库名
        String url="jdbc:mysql://localhost:3306/data75";
        Connection connection = DriverManager.getConnection(url, "root", "123456");        
        if(!connection.isClosed())
            System.out.println("Succeeded connecting to the Database!");
        
        //3准备sql
        String sql="select * from student";
        //4得到执行对象
        Statement st = connection.createStatement();
        //5执行得到结果集
        ResultSet rs = st.executeQuery(sql);
        //6遍历结果集
        while(rs.next())//结果集如果取下一行已经到头返回false
            int id = rs.getInt(1);
            String name = rs.getString(2);
            String sex = rs.getString(3);
            String birth = rs.getString(4);
            String department = rs.getString(5);
            String address = rs.getString(6);
            System.out.println(name+"\\t"+sex+"\\t"+birth+"\\t"+department+"\\t"+address);
        
        //7关闭资源(先开后关)
        rs.close();
        st.close();
        connection.close();
    
    

3、sql注入风险

Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String name = sc.nextLine();
        System.out.println("请输入密码");
        String pwd =sc.nextLine();
        //1加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2得到连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/data75", "root", "123456");
        //3准备一个sql
//        String sql="SELECT * FROM user WHERE name=‘"+name+"‘ AND password=‘"+pwd+"‘";
//        4得到执行对象
//        Statement st = connection.createStatement();
//        5执行查询
//        ResultSet rs = st.executeQuery(sql);
//        rs.next()向下获取一行数据 如果到末尾返回false
//        if(rs.next())
//            System.out.println("登录成功");
//            
//        else
//            System.out.println("登录失败");
//            
//        
        //6关闭资源
//        rs.close();
//        st.close();
//        connection.close();
        
        //------------------------------------------------------
        //Statement 存在sql注入的风险所以prepareStatement  准备/预编译的
        //占位符?-----替代了原始的字符串拼接
        //3 sql
        String sql="SELECT * FROM user WHERE name=? AND password=?";
        //4得到执行对象
        PreparedStatement ps = connection.prepareStatement(sql);
        //5设置占位符参数 1表示第一个问号
        ps.setString(1, name);//传入的参数只会当做一个值,而不是拼接状态,跟+拼接不一样
        ps.setString(2, pwd);
        //6执行
        ResultSet rs = ps.executeQuery();//除了查询,其他都用executeUpdate
        //7判断
        if(rs.next())
        System.out.println("登录成功");
        
        else
            System.out.println("登录失败");
            
        
        rs.close();
        connection.close();

技术图片

4、单元测试

//1 通过eclipse加入单元测试jar包
    //2使用@Test注解
    //单元测试----可以达到类似main方法的一个效果
    
    @Test
    public void show()
        System.out.println("这里写单元测试");
    
    
    //删除
    @Test
    public void delete() throws Exception
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/data75", "root", "123456");
        String sql="DELETE FROM user WHERE name=?";
        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setString(1, "hello");
        int executeUpdate = ps.executeUpdate();
        System.out.println("执行后的返回值"+executeUpdate);
        ps.close();
        connection.close();
        
    
    
    //更新
    @Test
    public void update() throws Exception        
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/data75", "root", "123456");
        String sql="UPDATE USER SET NAME = ? WHERE id = ?";
        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setString(1, "小红");
        ps.setString(2, "2");
        int executeUpdate = ps.executeUpdate();
        System.out.println("执行后的返回值"+executeUpdate);
        ps.close();
        connection.close();
        
    
    //增加
        @Test
    public void insert() throws Exception
        
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/data75", "root", "123456");
        String sql="INSERT INTO user VALUES(NULL,?,?)";
        PreparedStatement ps = connection.prepareStatement(sql);
        
        ps.setString(1, "hello");
        ps.setString(2, "111");
        
        int executeUpdate = ps.executeUpdate();
        System.out.println("执行的返回值"+executeUpdate);
        ps.close();
        connection.close();
    
    
    

5、将连接数据库包封装成JDBCUtil工具类

package com.zy.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCutil 
    //静态代码块会在该类被使用时自动加载到内存,所以里面适合放一些初始化的代码
    static
        try 
            //1加载驱动
            Class.forName("com.mysql.jdbc.Driver");
         catch (ClassNotFoundException e) 
            e.printStackTrace();
        
    
    
    
    public static  PreparedStatement getPreparedStatement(Connection connection,String url,String username,String password,String
            sql)
         try 
             //2得到连接
            connection = DriverManager.getConnection(url, username, password);
            //4得到执行对象
            PreparedStatement ps = connection.prepareStatement(sql);
            return ps;
          catch (SQLException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        
        
        return null;
    
    

    
    //7关闭资源(static就是方便调用)
    public static void closeAll(ResultSet rs,Connection connection,PreparedStatement ps)
        if(rs!=null)
            try 
                rs.close();
             catch (SQLException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
                    
        
        if(ps!=null)
            try 
                ps.close();
             catch (SQLException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
                    
        
        if(connection!=null)
            try 
                connection.close();
             catch (SQLException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
                    
        
                
    
    
    //根据id删除某条数据
    public static void deleteById(PreparedStatement ps,int id)
        try 
            ps.setInt(1,id);
            ps.executeUpdate();
         catch (SQLException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        
       
    
    
@Test
  public void update2() throws Exception
        Connection connection=null;
        String url="jdbc:mysql://localhost:3306/data75";
        String username="root";
        String password="123456";
        //3准备一个sql
        String sql="UPDATE USER SET NAME = ? WHERE id = ?";
        PreparedStatement ps = JDBCutil.getPreparedStatement(connection, url, username, password, sql);
        //5设置占位符参数 
        ps.setString(1, "小明");
        ps.setString(2, "2");
        //6执行
        ps.executeUpdate();
        JDBCutil.closeAll(null, connection, ps);
  
   
   @Test
   public void delete2() throws Exception
       Connection connection=null;
        String url="jdbc:mysql://localhost:3306/data75";
        String username="root";
        String password="123456";
        String sql="DELETE FROM user WHERE id=?";
        int id=4;        
        PreparedStatement ps = JDBCutil.getPreparedStatement(connection, url, username, password, sql);
        JDBCutil.deleteById(ps, id);
        JDBCutil.closeAll(null, connection, ps);
       
   

 

以上是关于JDBC的主要内容,如果未能解决你的问题,请参考以下文章

JDBCJDBC连接mySQL数据库常见错误

JDBCJDBC连接mySQL数据库常见错误

JDBC

关于JDBC小总结

java JDBC编程学习笔记

java JDBC编程学习笔记