JDBC概念、原理、连接数据库、工具类

概念

Java DataBase Connectivity:java数据库连接技术,简称JDBC.
它是使用java语言编写的一套API.为多种关系型数据库提供了统一接口。
同时,也是一个“低级”接口,在其之上可以使用“高级”接口,更方便的连接数据库。

目的

提供一个与任何数据库连接的 java 连接界面

原理

JDBC负责提供接口
数据库厂商使用自己数据库的特点来实现接口。
程序员调用接口,实际上底层调用数据库厂商实现的部门实际工作过程

编写流程
(1)加载驱动,建立连接

	1)添加第三方厂商的jar包,如连接MySQL时,需要添加mysql-connector-java-5.1.36-bin.jar
	【工程中创建一个文件夹存放jar包】-> 【build path】-> 【add to build path】
	
	2)再将Driver类通过加载器加载至JVM当中
   	Class.forName("com.mysql.jdbc.Driver");
   	
(2)获取连接
   需要提供用户名、密码、连接的URL地址,注意不要引错包 java.sql
   Connection conn = DriverManager.getConnection(url,user,password);
   mysql数据库:
	  	url:jdbc:mysql://localhost:3306/hyxy?useUnicode=true&characterEncoding=utf8
		user:root
 	  	password:root
 	  	
(3)获取Sql语句执行对象,创建句柄 
   		Statement st = conn.createStatement();
   		
(4)执行SQl语句
        String sql = "create table user("
			+ "uid int primary key auto_increment,"
			+ "uname varchar(20) unique,"
			+ "upwd varchar(10) not null,"
			+ "uage int,"
			+ "usex enum('f','m'))";
   		st.execute(sql);//执行DDL语句
   		st.executeUpdate(sql);//执行DML语句
   		st.executeQuery(sql);//执行DQL语句
(5)处理结果集
(6)关闭连接 
	st.close();
	conn.close();
案例
//连接 mysql数据库的完整程序:创建一张表
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBC_test {
     

	public static void main(String[] args) throws ClassNotFoundException {
     
		Class.forName("com.mysql.jdbc.Driver");
		
		String url = "jdbc:mysql://localhost:3306/hello?useUnicode=true&characterEncoding=utf8";//连接本地中的hello数据库
		String user = "root";
		String password = "1234";
		
		try {
     
			Connection conn = DriverManager.getConnection(url, user, password);//创建连接
			Statement st = conn.createStatement();			//创建句柄,即执行对象
			String sql = "create table user("
					+ "uid int primary key auto_increment,"
					+ "uname varchar(20) unique,"
					+ "upwd varchar(10) not null,"
					+ "uage int,"
					+ "usex enum('f','m'))";		//编写sql语句,建议先写为一行再回车换行整体
			
			st.execute(sql);	//执行sql语句
			st.close();			//先关闭句柄
			conn.close();		//再关闭连接
		} catch (SQLException e) {
     		
			e.printStackTrace();
		}		
	}
}
//在上方案例中进行其他操作:插入、修改、删除、查询

//插入
String sql1 = "insert into user value(null,'张三','123456',20,'f')";
st.execute(sql1); // 返回的是boolean类型值

//修改
String sql2 = "update user set upad='123456' where uname like '%me%'";
st.executeUpdate(sql2);  //返回的是int类型,表示受到当前操作影响的条数

//删除
String sql3 = "delete from user where uname='张三' ";
st.executeUpdate(sql3)

//executeUpdate说明:执行给定的SQL语句,该语句可以是INSERT、UPDATE或DELETE语句,也可以是不返回任何结果的SQL语句,比如SQLDDLs

//查询
String sql4 = "select * from user";
ResultSet rs = st.executeQuery(sql4); //返回的是ResultSet对象,表示数据库的结果集
while (rs.next()) {
     
		System.out.print(rs.getInt("uid")+"\t");	//返回 uid 整列值
		System.out.print(rs.getString("uname")+"\t");
				
		System.out.print(rs.getInt(1)+"\t");		//或者输入列号,返回整列值
		System.out.print(rs.getString(2)+"\t");
}

查询操作,采用预编译方式操作,举例如下:

public static void main(String[] args) throws ClassNotFoundException {
     
    	Class.forName("com.mysql.jdbc.Driver");
		String _url = "jdbc:mysql://localhost:3306/hell?useUnicode=true&characterEncoding=utf8";
		String _user = "root";
		String _password = "1234";
		try {
     
			Connection conn = DriverManager.getConnection(_url, _user, _password);
			
			PreparedStatement pst = conn.prepareStatement("select * from user where uname like ? and uage>?");//设置查询条件
			pst.setString(1, "%me%");  //第一个条件的具体内容
			pst.setInt(2, 12);		   //第二个条件的具体内容
			ResultSet rs = pst.executeQuery();
			while (rs.next()) {
     
				System.out.print(rs.getInt("uid")+"\t");
				System.out.print(rs.getString("uname")+"\t");
				System.out.print(rs.getString("upad")+"\t");

				System.out.print(rs.getInt(1)+"\t");
				System.out.print(rs.getString(2)+"\t");
				System.out.print(rs.getString(3)+"\t");
			}
			pst.close();
			conn.close();
		} catch (SQLException e) {
     
			e.printStackTrace();
		}
	}
总结
  1. 驱动管理类:【java.sql.DriverManager】
    作用:用于管理一组JDBC驱动程序的基本服务。
    — 常用方法: static Connection getConnection(url,user,password)
    — 作用: 通过地址,数据库用户名,用户密码获取连接对象
  2. 连接接口:【java.sql.Connection】
    作用:与特定数据库的连接(会话)。执行SQL语句并在连接上下文中返回结果。
    — 常用方法:Statement createStatement()
    — 作用:获取一个SQL语句编译对象
  3. SQL语句对象接口:【java.sql.Statement】
    作用:用于执行静态SQL语句并返回其生成的结果的对象。
    常用方法:
    boolean execute(String sql):
    执行DDL语句,返回false
    执行DML语句,返回false
    执行DQL语句,返回true
    ResultSet executeQuery(String sql):
    用于执行DQL语言
    int executeUpdate(String sql):
    用于执行DML语言,返回值表示该条sql影响的行数
  4. SQL预编译语句对象接口:【java.sql.PreparedStatement】
    作用:表示预编译SQL语句的对象。SQL语句被预编译并存储在PreparedStatement对象中。然后可以使用此对象有效地多次执行此语句。
  5. 结果集:【java.sql.ResultSet】
    作用:表示数据库结果集的数据表,通常由执行查询数据库的语句生成。ResultSet对象维护指向其当前数据行的游标。
    最初,光标定位在第一行之前。next方法将光标移动到下一行,因为当ResultSet对象中没有更多行时,它返回false,
    所以可以在while循环中使用它来遍历结果集。默认的ResultSet对象是不可更新的,并且只有一个向前移动的游标。您只能遍历它一次,而且只能从第一行到最后一行。
使用工具类改进程序
  1. 在项目下创建一个文件,用来存放驱动、数据库的名称、密码、地址,如下:

    DB.properties文件

    driver=com.mysql.jdbc.Driver
    username=root
    password=1234
    url=jdbc:mysql://localhost:3306/hello?useUnicode=true&characterEncoding=utf8
    
  2. 编写工具类 DBUtil

    package jdbc;
    
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class DBUtil {
           
    	//也可以在创建属性时,直接将属性赋值,就不用再创建文件了
    	private static String driver1;		//自定义一个驱动属性
    	private static String username1;	//用户
    	private static String password1;	//密码
    	private static String url1;			//地址
    	
    	private static Properties pro= new Properties();
    	static{
           
    		try {
           			
    			//通过load方法加载数据库属性文件
    			pro.load(DBUtil.class.getResourceAsStream("DB.properties"));
    			
    			//开始给当前类中所定义的属性赋值
    			driver1=pro.getProperty("driver");
    			username1=pro.getProperty("username");
    			password1=pro.getProperty("password");
    			url1=pro.getProperty("url");
    			
    			Class.forName(driver1);
    		} catch (ClassNotFoundException | IOException e) {
           
    			e.printStackTrace();
    		}
    	}
    	
    	//创建获取连接方法
    	public static Connection getConnection() throws SQLException{
           
    		return DriverManager.getConnection(url1, username1, password1);
    	}
    	
    	//关闭方法(也可能有三个参数,采用预编译方式,添加参数 PreparedStatement)
    	public static void close(Statement st,Connection conn){
           
    		if(st!=null){
           
    			try {
           
    				st.close();
    			} catch (SQLException e) {
           
    				e.printStackTrace();
    			}
    		}
    		
    		if(conn!=null){
           
    			try {
           
    				conn.close();
    			} catch (SQLException e) {
           
    				e.printStackTrace();
    			}
    		}
    	}	
    
    }
    
    
  3. 比如创建表时使用工具类

    package jdbc;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JDBC_test {
           
    
    	public static void main(String[] args) throws ClassNotFoundException {
           
    		
    		try {
           
    			Connection conn = DBUtil.getConnection();//创建连接
    			Statement st = conn.createStatement();			//创建句柄,即执行对象
    			String sql = "create table user3("
    					+ "uid int primary key auto_increment,"
    					+ "uname varchar(20) unique,"
    					+ "upwd varchar(10) not null,"
    					+ "uage int,"
    					+ "usex enum('f','m'))";		//编写sql语句,建议先写为一行再回车换行整体
    			
    			st.execute(sql);	//执行sql语句
    			DBUtil.close(st, conn); //关闭句柄和连接
    		} catch (SQLException e) {
           		
    			e.printStackTrace();
    		}
    	}
    }
    

你可能感兴趣的:(JDBC,jdbc,jdbc连接数据库)