java数据库连接图解加代码

2 篇文章 0 订阅

在这里插入图片描述

Statement普通语句执行平台

package com.offcn.jabc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import com.offcn.entity.User;

public class JABCDemo {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		selectDemo();
	}
	//添加数据
	public static void insertDemo() throws ClassNotFoundException, SQLException {
		//注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		
		//准备三要素
		String url = "jdbc:mysql://localhost:3306/day3?useSSL=true";
        String user = "root";
        String password = "root";
        
        //获取数据库连接对象
        Connection connection = DriverManager.getConnection(url, user, password);
        
        //获取语句执行平台
        Statement statement = connection.createStatement();
        
        //执行sql语句
        int row = statement.executeUpdate("insert into user values (null,'赵奕欢','111','女')");
        
        //展示结果
        System.out.println(row > 0 ? "添加成功" : "添加失败");
        
        //释放资源
        statement.close(); //语句平台
        connection.close(); //连接对象
        
	}
	//修改数据
	public static void updateDemo() {
		/*因为资源的关闭需要在finally中书写,需要将语句平台以及连接对象提升作用域
		放在try catch finally 外面声明!
		在try内部赋值! */
		Connection connection = null;
		Statement statement = null;
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//给在外界声明的连接对象以及语句平台对象赋值!
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/day3",
					"root","root");
			statement = connection.createStatement();
			int row = statement.executeUpdate("update user set uname = '吴京' where uid = 22");
			System.out.println(row > 0 ? "修改成功" : "修改失败");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			/*关闭资源时,按照后创建的优先关闭的原则书写关闭代码
		 	关闭资源时要防止空指针异常的产生,所以添加判断条件*/
			try {
				if (statement != null) {
					statement.close();
				}
				if (connection != null) {
					connection.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	//删除数据
	public static void deleteDemo() {
		/*因为资源的关闭需要在finally中书写,需要将语句平台以及连接对象提升作用域
		放在try catch finally 外面声明!
		在try内部赋值! */
		Connection connection = null;
		Statement statement = null;
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//给在外界声明的连接对象以及语句平台对象赋值!
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/day3",
					"root","root");
			statement = connection.createStatement();
			int row = statement.executeUpdate("delete from user where uname = '周冬雨2'");
			System.out.println(row > 0 ? "删除成功" : "删除失败");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			/*关闭资源时,按照后创建的优先关闭的原则书写关闭代码
		 	关闭资源时要防止空指针异常的产生,所以添加判断条件*/
			try {
				if (statement != null) {
					statement.close();
				}
				if (connection != null) {
					connection.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	//查询数据
	public static void selectDemo() {
		Connection connection = null;
		Statement statement = null;
		ResultSet set = null;
		try {
			//加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//三要素准备
			String url = "jdbc:mysql://localhost:3306/day3?useSSL=true";
	        String user = "root";
	        String password = "root";
	        //获取数据库连接对象
			connection = DriverManager.getConnection(url,user,password);
			//获取执行语句平台
			statement = connection.createStatement();
			//执行sql语句
			/*
		 	语句平台执行查询sql语句时,调用的方法为executeQuery(查询的sql语句)
		 	方法的返回值为ResultSet结果集,查询语句得到的结果全部封装到结果集中
			 */
			String sql  = "select * from user";
			set = statement.executeQuery(sql);
			//创建List集合储存ResultSet set中的内容
			List<User> users = new ArrayList<>();
			//遍历ResultSet set
			while(set.next()) {
				int uid = set.getInt("uid");
				String uname = set.getString("uname");
				String pwd = set.getString("pwd");
				String gender = set.getString("gender");
				//创建User类的对象
				User user1 = new User(uid, uname, pwd, gender);
				users.add(user1);
			}
			for (User user2 : users) {
				System.out.println(user2);
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				//查询语句时,结果集也要释放~
				if (set != null) {
					set.close();
				}
				if (statement != null) {
					statement.close();
				}
				if (connection != null) {
					connection.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

PreparedStatement预编译语句平台

package com.offcn.homework;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class Login {

	public static void main(String[] args) {
		safeRegister() ;
	}
	
	//注册案例
	public static void safeRegister() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要注册的用户名");
		String uname = sc.nextLine();
		System.out.println("请输入要注册的密码");
		String pwd = sc.nextLine();
		System.out.println("请输入你的性别");
		String gender = sc.nextLine();
		
		//判断是否注册成功就是判断数据库中书否存在
		//也就是查询  只需要查询用户名水是否存在即可
		Connection connection = JDBCUtils.getConnection();
		PreparedStatement pStat = null;
		ResultSet set = null;
		String sql = "Select * from user where uname = ?";
		try {
			pStat = connection.prepareStatement(sql);
			pStat.setObject(1, uname);
			set = pStat.executeQuery();
			System.out.println(set.next()? "注册失败" : "注册成功");
			if (set.next()? true : false ) {
				System.out.println("您输入的用户名已被占用");
			}else {
				pStat = connection.prepareStatement("insert into user values(null,?,?,?)");
				pStat.setObject(1, uname);
				pStat.setObject(2, pwd);
				pStat.setObject(3, gender);
				int row = pStat.executeUpdate();
				System.out.println(row>0?"数据写入成功":"数据写入失败");
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.closeMethod(connection, pStat, set);
			
		}
		
	}
	
	//安全登录案例
	public static void safeLogin() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入用户名");
		String uname = sc.nextLine();
		System.out.println("请输入密码");
		String pwd = sc.nextLine();
		
		Connection connection = JDBCUtils.getConnection();
		PreparedStatement pStat = null;
		ResultSet set = null;
		String sql = "Select * from user where uname = ? and pwd = ?";
		try {
			pStat = connection.prepareStatement(sql);
			pStat.setObject(1, uname);
			pStat.setObject(2, pwd);
			set = pStat.executeQuery();
			System.out.println(set.next()? "登录成功" : "登录失败");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.closeMethod(connection, pStat, set);

		}
	}
}

JDBC工具类的封装

package com.offcn.homework;

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

/**
 * 
 * @author Administrator
 *	此类专门用于封装jdbc操作
 *	封装获取数据库连接Connection的方法
 *	封装获取语句平台Statement的方法
 *	封装释放资源的方法
 *
 *	工具类封装有什么要求呢?
 *	1、工具类中的方法为了方便调用,都是类方法 static
 *	2、方法内部如果出现了异常,只能用try catch捕获,不能throws抛出
 *	3、工具类方法在设计时,需要遵循高内聚、低耦合,方法与方法之间互相独立、互不干扰。
 */
public class JDBCUtils {
	
	//声明连接对象
	private static Connection connection;
	
	//获取连接对象Connection的方法
	public static Connection getConnection() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/day3";
			String username = "root";
			String password = "root";
			connection = DriverManager.getConnection(url, username, password);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return connection;
	}
	
	//封装获取普通语句平台的方法
	public static Statement getStat() {
		try {
			return connection.createStatement();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	//封装获取预编译语句平台的方法
	public static PreparedStatement getPstat(String sql, Object[] params) {
		try {
			PreparedStatement pStat = connection.prepareStatement(sql);
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					pStat.setObject(i + 1, params[i]);
				}
			}
			return pStat;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	//封装释放资源的方法,增删改
	public static void closeMethod(Connection connection, Statement statement) {
		try {
			if (statement != null) {
				statement.close();
			}
			if (connection != null) {
				connection.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//封装释放资源的方法,查询
	public static void closeMethod(Connection connection, Statement statement, ResultSet set) {
		try {
			if (set != null) {
				set.close();
			}
			if (statement != null) {
				statement.close();
			}
			if (connection != null) {
				connection.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


数据库连接池:
dbcp操作代码:

package com.offcn.dbcp;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.offcn.entity.User;

public class DBCPDemo {
	public static void main(String[] args) {
		/*
		 	使用dbcp数据源来操作数据库
		 	方式1:在创建QueryRunner时,给定数据源,此时不需要书写获取连接的代码
		 		会自动从数据源中获取数据库连接对象,而且不需要书写关闭资源的方法,因为连接对象使用完成之后
		 		会自动归还数据库连接池!!!
		 	方式2:我们可以通过数据源对象.getConnection()获取到由数据库连接池管理的数据库连接对象
		 		使用完毕后,关闭资源,并不是将连接对象销毁,而是将连接对象归还池子
		 */
		//方式1
		/*
		QueryRunner qRunner = new QueryRunner(DBCPUtils.getDataSource());
		//此时连接自动获取,执行sql语句时,不需要再传入连接对象connection了
		try {
			List<User> users = qRunner.query("select * from user", new BeanListHandler<User>(User.class));
			for (User user : users) {
				System.out.println(user);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		
		/*
		QueryRunner qRunner = new QueryRunner(DBCPUtils.getDataSource());
		try {
			int row = 
					qRunner.update("insert into user values (null, ?, ?, ?)", "渣男程", "438", "妖怪");
			System.out.println(row > 0 ? "添加成功" : "添加失败");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		
		//方式2
		Connection connection = null;
		try {
			//从数据源中获取到连接对象
			connection = DBCPUtils.getDataSource().getConnection();
			//创建QueryRunner
			QueryRunner qRunner = new QueryRunner();
			int row = qRunner.update(connection, "update user set uname = ? where uid = ?", "小菜花", 8);
			System.out.println(row > 0 ? "修改成功" : "修改失败");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				//此时关闭连接对象,是归还池子,不是销毁!
				DbUtils.close(connection);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}


dbcp数据源封装类代码:

package com.offcn.dbcp;

import java.io.FileInputStream;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

/**
 * 此类只有一个目的,为QueryRunner提供创建时的数据源!!!
 */
public class DBCPUtils {
	//数据源对象
	private static DataSource dataSource = null;
	
	/*
	 	数据源、数据库连接池对象,在应用程序只需要一个就够了,池子中的连接对象是多个的!
	 	所以要保证获取到的数据源只有,那么赋值过程只能走一次,我们可以放在静态代码块中执行
	 */
	static {
		//dbcp创建数据源时需要的属性文件对象
		Properties properties = new Properties();
		
		FileInputStream fStream = null;
		try {
			/*
			 	加载dbcp.properties配置文件中配置给连接池、数据源的信息
			 	properties对象的load()方法需要传入一个输入流对象,来将输入流读取的内容加载到属性文件对象中
			 	所以此时我们需要创建一个输入流对象来读取dbcp.properties,然后传入到load()方法中作为参数
			 */
			fStream = new FileInputStream("src/dbcp.properties");
			properties.load(fStream);
			//将加载完配置信息的属性文件对象,往dbcp生成数据源的方法中一传,那么数据源就有了配置信息
			dataSource = BasicDataSourceFactory.createDataSource(properties);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//获取数据源
	public static DataSource getDataSource() {
		//返回dbcp中的数据源
		return dataSource;
	}
}



Druid操作代码

package com.offcn.druid;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.offcn.entity.User;

public class DruidDemo {
	public static void main(String[] args) {
		QueryRunner qRunner = new QueryRunner(DruidUtils.getDataSource());
		try {
			User user = 
					qRunner.query("select * from user where uid = ?", new BeanHandler<User>(User.class), 14);
					qRunner.update("delete from user where uname = '赵云'");
			System.out.println(user);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Druid数据源封装类代码:

package com.offcn.druid;

import java.io.FileInputStream;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

/**
 * 
 * @author Administrator
 *	此类专门为QueryRunner提供数据源
 */
public class DruidUtils {
	private static DataSource dataSource = null;
	
	static {
		Properties properties = new Properties();
		FileInputStream fStream = null;
		try {
			fStream = new FileInputStream("src/druid.properties");
			properties.load(fStream);
			dataSource = DruidDataSourceFactory.createDataSource(properties);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static DataSource getDataSource() {
		return dataSource;
	}
}


c3p0操作代码

package com.offcn.c3p0;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.offcn.entity.User;

public class C3P0Demo {
	public static void main(String[] args) {
		//ComboPooledDataSource 就是c3p0的数据源,而且数据源的配置信息已经自动读取过了~
		QueryRunner qRunner = new QueryRunner(new ComboPooledDataSource());
		try {
			List<User> users = qRunner.query("select * from user", new BeanListHandler<User>(User.class));
			for (User user : users) {
				System.out.println(user);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值