zoukankan      html  css  js  c++  java
  • 0202 JDBC

    JDBC是接口,JDBC中提供了一种工具和接口让开发人员能够编写数据库的程序

    java提供的访问数据规范叫JDBC,生产厂商提供规范的数据类称为驱动

    导入驱动jar包:

    (1)创建lib目录,用于存放当前项目需要的所有jar包

    (2)选择jar包,右键执行build path / Add to Build Path

    以mySql为例

    JDBC开发步骤

    (1)注册驱动:Class.forName("com.mysql.jdbc.Driver");

    (2)获得链接:

    String url="jdbc:mysql://localhost:3306/java1127?characterEncoding=utf-8";
    String user="root";
    String pwd="123456";
    Connection conn=DriverManager.getConnection(url,user,pwd);

    (3)获得sql执行语句对象:

    格式:

    String sql = "某SQL语句";

    获取Statement语句执行平台:Statement stmt = con.createStatement();

    该对象的常用方法: 

    int executeUpdate(String sql); --执行insert update delete语句.

    ResultSet executeQuery(String sql); --执行select语句

    (4)执行sql语句

    (5)处理结果集:

    处理结果集常用方法:因为查询到的结果是放在resultSet结果集里边需要去遍历得到每一个值,

    rs.next();//指向第一行 rs.getInt(1);//获取第一行第一列的数据,类似迭代器

    注:如果是用的查询则需要处理结果集,如果是其他的不用这一步

    (6)释放资源:按照先开后关原则

    代码展示:

    public class Demo01 {
    
    	public static void main(String[] args) throws ClassNotFoundException, SQLException {
    		// TODO Auto-generated method stub
    
    		//注册驱动
    		Class.forName("com.mysql.jdbc.Driver");
    		//获得连接对象
    		String url="jdbc:mysql://localhost:3306/java1127?characterEncoding=utf-8";
    		String user="root";
    		String pwd="123456";
    		Connection conn=DriverManager.getConnection(url,user,pwd);
    		//获得语句执行对象
    		Statement sta=conn.createStatement();
    		//执行sql语句
    		String sql="insert into sort(sname,sdesc) value('口红','骗钱')";
    		int row=sta.executeUpdate(sql);
    		System.out.println(row);
    		//释放资源
    		sta.close();
    		conn.close();
    	}
    }

      SQL注入问题:

    当我们模拟一个登录界面

    代码展示

    public class Demo03 {
    
    	public static void main(String[] args) throws ClassNotFoundException, SQLException {
    		// TODO Auto-generated method stub
    
    		//注册驱动
    		Class.forName("com.mysql.jdbc.Driver");
    		//获得链接对象
    		String url="jdbc:mysql://localhost:3306/java1127?characterEncoding=utf-8";
    		String user="root";
    		String pwd="123456";
    		Connection conn=DriverManager.getConnection(url,user,pwd);
    		//获取语句执行对象
    		Statement sta=conn.createStatement();
    		//执行sql语句
    		Scanner sc=new Scanner(System.in);
    		System.out.println("请输入用户名");
    		String name=sc.next();
    		System.out.println("请输入密码");
    		String password=sc.next();
    		String sql="select count(*)from user where uname='"+name+"' and pwd='"+password+"' ";
    		ResultSet rs=sta.executeQuery(sql);
    		//处理结果集
    		int count=0;
    		while(rs.next()){
    			count=rs.getInt(1);
    		}
    		if(count>0){
    			System.out.println("登陆成功");
    		}else{
    			System.out.println("用户名或密码错误");
    		}
    		//释放资源
    		rs.close();
    		sta.close();
    		conn.close();
    		
    	}
    
    }
    

      当用户输入密码 ‘or’ 1=1;类似这种数据也能登录成功,原因是代码中运用了字符拼接,误将用户输入的or当做了代码中的关键字去使用,多以导致了这样的结果,那为了避免这个结果的发生,提供了预处理对象去创建sql语句执行对象,预处理对象PreparedStatement,建议用预处理对象时建议将所有的实际参数用?代替,然后用setInt,setString方法为?赋准确的值

    运用预处理对象,代码展示

    public class Demo04 {
    
    	public static void main(String[] args) throws ClassNotFoundException, SQLException {
    		// TODO Auto-generated method stub
    
    		//注册驱动
    		Class.forName("com.mysql.jdbc.Driver");
    		//获得链接对象
    		String url="jdbc:mysql://localhost:3306/java1127?characterEncoding=utf-8";
    		String user="root";
    		String pwd="123456";
    		Connection conn=DriverManager.getConnection(url,user,pwd);
    		//获取语句执行对象
    		String sql="select count(*) from user where uname=? and pwd=?";
    		PreparedStatement pst=conn.prepareStatement(sql);
    		//执行sql语句
    		Scanner sc=new Scanner(System.in);
    		System.out.println("请输入用户名");
    		String name=sc.next();
    		System.out.println("请输入密码");
    		String password=sc.next();
    		//给占位符赋值
    		pst.setString(1, name);
    		pst.setString(2, password);
    		ResultSet rs=pst.executeQuery();
    		//处理结果集
    		int count=0;
    		while(rs.next()){
    			count=rs.getInt(1);
    		}
    		if(count>0){
    			System.out.println("登陆成功");
    		}else{
    			System.out.println("用户名或密码错误");
    		}
    		//释放资源
    		rs.close();
    		pst.close();
    		conn.close();
    		
    	}
    
    }
    

      

    1、插入

    public class Demo05 {
    
    	public static void main(String[] args) throws ClassNotFoundException, SQLException {
    		// TODO Auto-generated method stub
    
    		//注册驱动
    		Class.forName("com.mysql.jdbc.Driver");
    		//获得链接对象
    		String url="jdbc:mysql://localhost:3306/java1127?characterEncoding=utf-8";
    		String user="root";
    		String pwd="123456";
    		Connection conn=DriverManager.getConnection(url,user,pwd);
    		//获得语句执行兑现
    		String sql="insert into sort(sname,sdesc) value(?,?)";
    		PreparedStatement pst=conn.prepareStatement(sql);
    		//执行sql
    		pst.setString(1, "汽车");
    		pst.setString(2, "男人的钱");
    		int row=pst.executeUpdate();
    		System.out.println(row);
    		//释放资源
    		pst.close();
    		conn.close();
    		
    	}
    
    }
    

      

    2、修改

    ublic class Demo06 {
    
    	public static void main(String[] args) throws ClassNotFoundException, SQLException {
    		// TODO Auto-generated method stub
    
    		//注册驱动
    		Class.forName("com.mysql.jdbc.Driver");
    		//获得链接对象
    		String url="jdbc:mysql://localhost:3306/java1127?characterEncoding=utf-8";
    		String user="root";
    		String pwd="123456";
    		Connection conn=DriverManager.getConnection(url,user,pwd);
    		//获得语句执行兑现
    		String sql="update sort set sname=?,sdesc=? where sid=?";
    		PreparedStatement pst=conn.prepareStatement(sql);
    		//执行sql
    		//给占位符赋值
    		pst.setString(1, "修脚");
    		pst.setString(2, "抠脚");
    		pst.setInt(3, 1);
    		int row=pst.executeUpdate();
    		System.out.println(row);
    		//释放资源
    		pst.close();
    		conn.close();
    		
    	}
    
    }
    

      

    3、删除

    public static void shanchu() throws ClassNotFoundException, SQLException{
    		//注册驱动
    		Class.forName("com.mysql.jdbc.Driver");
    		//获得链接
    		String url="jdbc:mysql://localhost:3306/java1127?characterEncoding=utf-8";
    		String user="root";
    		String pwd="123456";
    		Connection conn=DriverManager.getConnection(url,user,pwd);
    		//获取第二个数据库对象
    		Scanner sc=new Scanner(System.in);
    		System.out.println("请您输入您要删除的序号");
    		int id2=sc.nextInt();
    		String sql3="delete from sort where sid=?";
    		PreparedStatement pst3=conn.prepareStatement(sql3);
    		pst3.setInt(1, id2);
    		int row3=pst3.executeUpdate();
    		if(row3>0){
    			System.out.println("删除成功!");
    		}
    		//释放资源
    				pst3.close();
    				conn.close();
    	}
    

      

    4、查询

    public class Demo07 {
    
    	public static void main(String[] args) throws ClassNotFoundException, SQLException {
    		// TODO Auto-generated method stub
    
    		//注册驱动
    		Class.forName("com.mysql.jdbc.Driver");
    		//获得链接对象
    		String url="jdbc:mysql://localhost:3306/java1127?characterEncoding=utf-8";
    		String user="root";
    		String pwd="123456";
    		Connection conn=DriverManager.getConnection(url,user,pwd);
    		//获得语句执行兑现
    		String sql="select * from sort";
    		PreparedStatement pst=conn.prepareStatement(sql);
    		//执行sql
    		ResultSet rs=pst.executeQuery();
    		//处理结果集
    		while(rs.next()){
    			System.out.println(rs.getInt("sid")+".."+rs.getString("sname")+"..."+rs.getString("sdesc"));
    		}
    		//释放资源
    		rs.close();
    		pst.close();
    		conn.close();
    		
    	}
    
    }
    

      

  • 相关阅读:
    表单输入框黏贴自动过滤转义实例
    前端性能优化成神之路-浏览器缓存机制详解
    前端性能优化成神之路-HTTP压缩开启gzip
    前端性能优化成神之路—重绘与回流
    前端性能优化成神之路—图片相关的优化
    ES5-ES6-ES7_集合Set和Map
    ES5-ES6-ES7_解构赋值
    ES5-ES6-ES7_函数的扩展
    ES5-ES6-ES7_数值的扩展
    ES5-ES6-ES7_字符串与JOSN格式的数据相互转换以及深度克隆新对象
  • 原文地址:https://www.cnblogs.com/-gongxue/p/14364173.html
Copyright © 2011-2022 走看看