JDBC与DAO篇--01 JDBC原理、JDBC基础编程
发布日期:2021-06-29 15:41:29 浏览次数:2 分类:技术文章

本文共 6123 字,大约阅读时间需要 20 分钟。

1.JDBC

Java Database Connectivity:Java访问数据库的解决方案。希望用相同的方式访问不同的数据库,以实现与具体数据库无关的Java操作界面。JDBC定义一套标准接口,即访问数据库的通用API,不同的数据库厂商根据各自数据库的特点去实现这些接口。

2.JDBC工作原理

JDBC定义接口,数据库厂商实现接口,程序员调用接口,实际调用的是底层数据库厂商的实现部分。

JDBC工作过程:

1)导入JDBC驱动jar

2)注册JDBC驱动 Class.forName(“驱动程序类名”)

3)获得Connection对象

需要3个对象:url,uername,password

连接到数据库

4)创建Statement(语句)对象

conn.getStatement()方法创建

用途:用于执行SQL语句的

--execute(ddl)执行任何SQL,常用执行DDL

--executeUpdate(dml)执行DML语句,如insert update delete

--executeQuery(dql)执行DQL语句,如:select

5)处理执行结果

--execute(ddl)如果没有异常则成功

--executeUpdate(dml)返回数字,表示更新“行”数量,抛出异常失败

--executeQuery(dql)返回ResultSet(结果集)对象,代表2维查询结果

6)关闭数据连接

例子1

package com.lcz.jdbc.day01;/* * 执行DDL语句 */import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Demo01 {	public static void main(String[] args) {		//驱动程序名		String driver="com.mysql.jdbc.Driver";		//声明Connection对象		Connection conn;		//URL指向要访问的数据库名		String url="jdbc:mysql://localhost:3306/test2";		//MySQL配置的用户名		String user="root";		//MySQL配置的密码		String password="root";		try {			//(1)加载驱动程序			Class.forName(driver);			//(2)连接MySQL数据库			conn=DriverManager.getConnection(url,user,password);			//(3)创建statement类对象,用来执行SQL语句			Statement statement=conn.createStatement();			//sql语句			String sql="create table emp(empno int(4),ename varchar(10),job varchar(9),hiredate date,sal float(7,2))";			//(4)处理SQL处理结果			boolean b = statement.execute(sql);			System.out.println(b);			//(5)关闭连接			conn.close();		} catch (ClassNotFoundException e) {			//数据库驱动类异常处理			System.out.println("sorry can't find the Driver!");			e.printStackTrace();		} catch (SQLException e) {			//数据库连接失败异常处理			e.printStackTrace();		}	}}

例子2:

package com.lcz.jdbc.day01;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;/* * 执行DML语句 */public class Demo02 {	public static void main(String[] args) {		try {			//注册驱动			Class.forName("com.mysql.jdbc.Driver");			//获得连接			String url="jdbc:mysql://localhost:3306/test2";			String user="root";			String password="root";			Connection con=DriverManager.getConnection(url,user,password);			//获得Statement语句			Statement statement=con.createStatement();			//sql语句			String dml="insert into emp(empno,ename,job,hiredate,sal) values(1,'lcz','student','2015-09-12',10000)";			int executeUpdate = statement.executeUpdate(dml);			System.out.println(executeUpdate);			//关闭连接			con.close();		} catch (ClassNotFoundException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} catch (SQLException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}}

例子3

package com.lcz.jdbc.day01;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Date;/** * 执行DQL语句 * @author LvChaoZhang * */public class Demo3 {	public static void main(String[] args) {		try {			//注册驱动			Class.forName("com.mysql.jdbc.Driver");			String user="root";			String password="root";			String url="jdbc:mysql://localhost:3306/test2";			//连接			Connection con = DriverManager.getConnection(url,user,password);			//获得Statement			Statement statement = con.createStatement();			//dml语句			String dml="select *from  emp";			//执行结果			ResultSet resultSet = statement.executeQuery(dml);			//resultSet.next()移动结果集游标移到下一行			while(resultSet.next()) {				//获取名字				String name=resultSet.getString("ename");				//获取工资				String job=resultSet.getString("job");				//获取hiredate日期				Date date=resultSet.getDate("hiredate");				//获取工资				int sal=resultSet.getInt("sal");				System.out.println(name+" "+job+" "+date+" "+sal);			}			resultSet.close();			con.close();		} catch (ClassNotFoundException e) {			System.out.println("异常发生了");			e.printStackTrace();		}catch (SQLException e) {			System.out.println("yic");			e.printStackTrace();		}	}}

3.连接管理

在软件中数据库连接使用非常频繁,如果每次都创建连接,就会造成代码的大量的冗余,常规的做法是建立数据库连接工具类,封装数据库连接过程,统一数据库连接过程,使用时候就可以简化代码。

Properties是Java中专门用于读取配置文件的API

(1)其底层就是文本文件IO
(2)Properties本身实现Map接口,内部是散列表
(3)Properties限定了key和Value都是String类型
实现步骤:
(1)创建数据库连接参数文件db.properties
(2)创建DbUtils.java封装数据库连接方法
--利用Properties读取配置文件夹中的数据库连接参数
--创建方法getConnection封装数据库连接过程
(3)使用getConnection方法
说明:
(1)driver url uername password是四个数据库连接参数,因为只需要一份则定义为静态变量
(2)静态代码块的目的是从配置文件中读取4个数据库连接参数的值
(3)getConnection()方法封装数据库连接过程

(4)close方法封装了数据库连接关闭的过程

具体步骤:

新建一个 db.properties

# db.propertiesjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/test2jdbc.user=rootjdbc.password=root

新建一个DbUtils.java

package com.lcz.jdbc.day01;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.util.Properties;public class DbUtils {	static String driver;	static String url;	static String user;	static String password;	//读取文件中数据库连接参数	//静态代码块,初始化静态属性	static {		//1.利用properties读取配置文件		Properties cfg=new Properties();		InputStream in=DbUtils.class.getClassLoader().getResourceAsStream("db.properties");		try {			cfg.load(in);			System.out.println(cfg);		} catch (IOException e) {			e.printStackTrace();		}		//2.从配置文件中查找相应参数		driver=cfg.getProperty("jdbc.driver");		url=cfg.getProperty("jdbc.url");		user=cfg.getProperty("jdbc.user");		password=cfg.getProperty("jdbc.password");	}	/**	 * 封装创建数据库连接的过程	 * 简化数据库连接	 * @return	 */		public static Connection getConnection() {		try {			Class.forName(driver);			Connection conn = DriverManager.getConnection(url,user,password);			return conn;		}catch (Exception e) {			e.printStackTrace();			throw new RuntimeException(e);		}			}}

实现连接的Demo

package com.lcz.jdbc.day01;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Demo4 {	public static void main(String[] args) throws Exception {		//创建连接		Connection conn = DbUtils.getConnection();		Statement statement = conn.createStatement();		String sql="select *from emp";		ResultSet set = statement.executeQuery(sql);		while(set.next()) {			String name=set.getString("ename");			System.out.println(name);		}		conn.close();	}}

转载地址:https://codingchaozhang.blog.csdn.net/article/details/79645356 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Java面试题九】算法篇
下一篇:【Java面试题八】Java算法优化篇

发表评论

最新留言

很好
[***.229.124.182]2024年04月19日 16时49分14秒