JDBC基本用法

JDBC简介:

JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句的一种技术手段!

JDBC核心类(接口)介绍:

DriverManager:用于注册驱动
Connection: 表示与数据库创建的连接
Statement: 操作数据库sql语句的对象
ResultSet: 结果集或一张虚拟表

DriverManger(驱动管理器)的作用有两个:

  1. 注册驱动:这可以让JDBC知道要使用的是哪个驱动;
  2. 获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。

Connection对象表示连接,与数据库的通讯都是通过这个对象展开的;
负责传输数据
Connection最为重要的一个方法就是用来获取Statement对象;

Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句;

void executeUpdate(String sql):执行更新操作(insert、update、delete等);
ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;

ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生;
结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据;

boolean next():使”行光标”移动到下一行,并返回移动后的行是否存在;
XXX getXXX(int col):获取当前行指定列上的值,参数就是列数,列数从1开始,而不是0。

JDBC使用(以MySQL数据库为例):

操作步骤:

第1步:加载驱动 (仅仅做一次)

第2步:建立连接(Connection)

第3步:创建运行SQL的语句(Statement)

第4步:运行语句

第5步:处理运行结果(ResultSet)

第6步:释放资源

前期准备工作:
导入mysql-connector-java-5.1.13-bin.jar包

在这里插入图片描述

配置成功后
在这里插入图片描述
在taobao的数据库中建立一个tb_user表

在这里插入图片描述

一、加载驱动:
private static String drvier = "com.mysql.jdbc.Driver";
try {
			Class.forName(drvier);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
二、建立连接:
String url = "jdbc:mysql://localhost:3306/taobao?useUnicode=true&characterEncoding=utf-8";
String user = "root";
String password = null;
Connection con = null;
		try {
			con = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
三、创建statement 执行器
//创建sql执行器
 Statement statement = connection.createStatement();
 //编写sql
String sql="select * from tb_user";
四、运行语句
//返回得到一个结果集
ResultSet set = statement.executeQuery(sql);
五、处理运行结果
while(rs.next())
    	{
    	  System.out.println(rs.getObject(1));	
    	  System.out.println(rs.getObject(2));	
    	  System.out.println(rs.getObject(3));	
    	  System.out.println("========================");
    	}

六、关闭连接释放资源
	rs.close();
    statement.close();
   	connection.close();

对JDBC进行封装到工具类中,数据库的驱动路径、用户名、密码写在properties配置文件中

database.properties(配置文件,更换数据库时,只需改变配置文件中的信息,方便日后维护)
因为我的数据库都没有设置密码,所以password那一项都改为null

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/petshop?useUnicode=true&characterEncoding=UTF8
user=root
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

/**
 * 数据库连接、操作、关闭
 * 
 * @author 惠普
 *
 */
public class BaseDao {
	private static String driver;// 数据库驱动
	private static String url;// URL
	private static String user;// 用户名

	/**
	 * 静态代码块,执行时获取配置文件的信息,并加载驱动
	 */
	static {
		try {
			// 从配置文件中获取driver、url、user
			Properties p = new Properties();
			p.load(new FileInputStream("database.properties"));
			driver = p.getProperty("driver");
			url = p.getProperty("url");
			user = p.getProperty("user");

			// 加载驱动
			Class.forName(driver);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 得到数据库的连接
	 * 
	 * @return
	 */
	public static Connection getConn() {
		Connection con = null;
		try {
			con = DriverManager.getConnection(url, user, null);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}

	/**
	 * 执行sql语句,进行增、删、改操作
	 * 
	 * 返回受影响的行数
	 * 
	 * @param sql
	 * @param param
	 * @return
	 */
	public static int executeSQL(String sql, Object... param) {
		int num = 0;
		Connection con = null;
		PreparedStatement ps = null;

		try {
			// 得到数据库的连接
			con = getConn();
		// 得到prepareStatement对象
		// PreparedStatement 用于预编译模板SQL语句,在运行时接受sql输入参数
		// PreparedStatement 在性能和代码灵活上比Statement更高,是Statement的子类
		// PreparedStatement 对象使用?作为占位符,即参数标记
		// 使用setXXX(index,value)方法将值绑定到参数中,每个参数标记是其顺序位置引用,index从1开始
			ps = con.prepareStatement(sql);
			if (param != null) {//防止空指针异常
			//进行预编译
				for (int i = 0; i < param.length; i++) {
					ps.setObject(i + 1, param[i]);
				}
			}
			// 得到受影响的行数
			num = ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			closeAll(con, ps, null);
		}
		return num;
	}
	/**
	例如
	String sql = "insert into pet(`name`,typeName,health,love,birthday) values(?,?,?,?,?)";
	Object[] param = {"yy","dog",60,70,01-01};
	executeSQL(sql , param);
	相当于在数据库中执行了insert into pet(`name`,typeName,health,love,birthday) values ("yy","dog",60,70,01-01);
	*/

	/**
	 * 关闭数据库连接
	 * 
	 * @param con
	 * @param ps
	 * @param rs
	 */
	public static void closeAll(Connection con, PreparedStatement ps, ResultSet rs) {
		// 如果ResultSet不空,关闭rResultSets
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		// 如果PreparedStatement不空,关闭PreparedStatement
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		// 如果Connection不空,关闭Connection
		if (con != null) {
			try {
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值