JDBC编程总结(偏底层)

文章目录

  • 1.JDBC
    • 1.1 编写过程
    • 1.2 编写过程示例
  • 2. 如何在数据库中插入数据
    • 2.1通过Statement
    • 2.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下
JDBC编程总结(偏底层)_第1张图片
右键选择properties
JDBC编程总结(偏底层)_第2张图片
JDBC编程总结(偏底层)_第3张图片
JDBC编程总结(偏底层)_第4张图片
最后点击apply and close
在这里插入图片描述
打开Referenced Libraries
JDBC编程总结(偏底层)_第5张图片
找到com.mysql.cj.jdbc.Driver
JDBC编程总结(偏底层)_第6张图片
将复制的内容粘贴到Class.forName()里
JDBC编程总结(偏底层)_第7张图片

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)

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

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

  3. 使用空闲连接

  4. 放回池子中

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)–>单例

你可能感兴趣的:(数据库,sql,java)