栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDBC编程总结(偏底层)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC编程总结(偏底层)

文章目录

1.JDBC

1.1 编写过程1.2 编写过程示例 2. 如何在数据库中插入数据

2.1通过Statement2.2通过PreparedStatement 3.数据源(DataSource)

3.1jdbc的不足? 3. 数据连接池(DBCP)

3.1 数据源框架(druid)

3.1.1 使用流程

1.JDBC

JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这些类库可以以一种标准的方法、方便地访问数据库资源。
JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

1.1 编写过程

JDBC编程涉及的三个部分

1.应用程序
开发人员编写的客户端程序。在应用程序中调用JDBC API,将SQL语句发送到数据库并检索结果。
2.驱动程序管理器
JDBC将驱动程序管理器负责使用正确的JDBC驱动程序和连接信息访问数据库,在Java应用程序和数据库之间建立连接
3.驱动程序
驱动程序由数据库厂商提供,实现数据库驱动接口。能够把SQL指令正确发送到数据库服务器。

1.2 编写过程示例

先在java工程下创建一个lib文件夹

将下图jar文件复制到lib下

右键选择properties



最后点击apply and close

打开Referenced Libraries

找到com.mysql.cj.jdbc.Driver

将复制的内容粘贴到Class.forName()里

2. 如何在数据库中插入数据 2.1通过Statement

Statement:每次执行都会在sql语句进行编译

public static void main(String[] args) {
		try {
			String url = "jdbc:mysql://localhost:3306/store?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
			String sql = "insert into emp values(0,10,'李四','123456',0,22,'长安南路','2142123',15000)";

			Class.forName("com.mysql.cj.jdbc.Driver");// 加载驱动
			Connection con = DriverManager.getConnection(url, "root", "1234");// 得到连接对象,Connection是个接口
			Statement st = con.createStatement();// 创建sql操作面板,Statement是个接口
			boolean flag = st.execute(sql);// 执行sql操作,并返回结果

			System.out.println(flag);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

2.2通过PreparedStatement

PreparedStatement:表示预编译的sql语句的对象,每次执行只需要传参就可以直接执行,不需要对sql再进行编译,效率高,开发主要使用

public static void main(String[] args) {
		try {
			String url = "jdbc:mysql://localhost:3306/store?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
			String sql = "insert into emp values(0,?,?,?,?,?,?,?,?)";// ?占位符,等待传参
			Class.forName("com.mysql.cj.jdbc.Driver");// 加载驱动
			Connection con = DriverManager.getConnection(url, "root", "1234");// 得到连接对象,Connection是个接口
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setInt(1, 20);// 第一个问号,赋值20。在创建表时,第二个是部门int类型,所以这里用setInt
			ps.setString(2, "王五");
			ps.setString(3, "123");
			ps.setString(4, "1");
			ps.setInt(5, 20);
			ps.setString(6, "长安东路");
			ps.setString(7, "1531651515");
			ps.setFloat(8, 14000);

			int result = ps.executeUpdate();
			ps.close();
			con.close();
			System.out.println(result);

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

3.数据源(DataSource) 3.1jdbc的不足?

jdbc: java 和数据库的桥梁。

步骤如下:

注册驱动 Class.forName() --一次

建立连接 Connection ----每一次

预处理对象PreparedStatement

Statement对象

PreparedStatement对象

public interface PreparedStatement extends Statement

Statement : sql拼接 SQL注入漏洞

String s = “猫”;

String k = “波斯猫’ OR 1='1”;

“Select * from pet_tab WHERe pet_category=’” +s+"’ AND pet_kind=“ ‘+k+"’"

SELECt * FROM pet_tab WHERe pet_category=‘猫’ AND pet_kind =‘xxx’ OR 1=‘1’

执行SQL

关闭连接 —每一次

建立连接(消耗资源) …关闭连接(释放资源)

3. 数据连接池(DBCP)

    定义好连接数–先创建10个连接/建立连接后存储再池子中

    从池子中查找是否有空闲连接

    使用空闲连接

    放回池子中

3.1 数据源框架(druid)

阿里的开源连接池框架

3.1.1 使用流程

1.创建druid.properties文件

druid.driver = com.mysql.cj.jdbc.Driver
druid.url = jdbc:mysql://localhost:3306/mvc_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
druid.username=root
druid.password=1234

2.使用Properties对象,读取配置信息

String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
String fileName = path + "/com/dyit/resources/druid.properties";

try {
    prop.load(new FileReader(fileName));
} catch (IOException e) {
    Logger.getLogger(JdbcUtil.class).debug(e.getMessage());
    e.printStackTrace();
}

3.创建数据源对象DruidDataSource

	private static void init() {
		ds = new DruidDataSource();
		ds.configFromPropety(Config.prop());
		Logger.getLogger(JdbcUtil.class).debug("数据源配置成功," + ds);
	}

4.建立连接

public static void connect() {
		try {
			conn = ds.getConnection();
		} catch (SQLException e) {
			Logger.getLogger(JdbcUtil.class).debug(e.getMessage());
			e.printStackTrace();
		}

	}

jdbc–> 封装(static)–>properties(配置文件)–>数据源(dbcp)–>单例

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760524.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号