Java Web 学习笔记(8)

笑着哭i 提交于 2020-02-29 22:15:32

JDBC

Java DataBase Connectivity是一个独立于特定数据库的管理系统,通用的SQL数据库存取和操作的公共接口。

定义了一组标准为访问不同数据库提供了统一的途径。

JDBC体系结构

JDBC接口包括两个层面:

  • 面向应用的API,供程序员调用
  • 面向数据库的API,供厂商开发数据库的驱动程序

JDBC API

提供者:Java官方

内容:供开发者调用的接口

java.sql和javax.sql

  • DriverManager类
  • Connection接口
  • Statement接口
  • ResultSet接口

DriverManager

提供者:Java官方

作用:管理不同的JDBC驱动

JDBC驱动

提供者:数据库尝试

作用:负责连接不同的数据库

JDBC的使用

1、加载数据驱动,java程序和数据库之间的桥梁。

2、获取Connection,java程序与数据库的一次连接。

3、创建Statement对象,由Connection产生,执行SQL语句

4、如果需要接收返回值,创建ResultSet对象,保存Statement执行之后所查询到的结果

package com.janeroad.test;
import java.sql.*; 
import java.util.Date;
public class Test {    
	public static void main(String[] args) {       
    	try {
    		//加载驱动                      
        	Class.forName("com.mysql.cj.jdbc.Driver"); 
         	//获取链接
        	String url = "jdbc:mysql://localhost:3306/test? useUnicode=true&characterEncoding=UTF-8";            
        	String user = "root";            
        	String password = "root";            
        	Connection connection = DriverManager.getConnection(url,user,password); 
        	
            String sql = "select * from student";            
            Statement statement = connection.createStatement();           
            ResultSet resultSet = statement.executeQuery(sql);       
            while (resultSet.next()){              
            	Integer id = resultSet.getInt("id");                
            	String name = resultSet.getString(2);               
                Double score = resultSet.getDouble(3);           
                Date date = resultSet.getDate(4);                		
                System.out.println(id+"-"+name+"-"+score+"-"+date);  
               }        
            } catch (ClassNotFoundException e) {          
            	e.printStackTrace();      
            } catch (SQLException e){     
            	e.printStackTrace();     
                }  
            } 
       }

PreparedStatement

statement的子类,提供了SQL占位符的功能

使用Statement进行开发有两个问题:

1、需要频繁拼接String字符串,出错率较高

2、存在SQL注入的风险

SQL注入:利用某些系统没有对用户输入的信息进行充分检测,在用户输入的数据中注入非法的SQL语句,从而利用系统的SQL引擎完成恶意行为的做法。

String url = "jdbc:mysql://localhost:3306/test? 
useUnicode=true&characterEncoding=UTF-8"; 
String user = "root"; 
String password = "root"; 
Connection connection = DriverManager.getConnection(url,user,password); 
String username = "lisi"; 
String mypassword = "000";
String sql = "select * from t_user where username = ? and password = ?"; System.out.println(sql);
PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1,username); 
preparedStatement.setString(2,mypassword); 
ResultSet resultSet = preparedStatement.executeQuery();
if(resultSet.next()){  
	System.out.println("登陆成功"); 
}else{  
	System.out.println("登陆失败");
} 
} catch (ClassNotFoundException e) {
	e.printStackTrace();
} catch (SQLException e){  
	e.printStackTrace();
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!