一、CRUD(增删改查)

 C:增加Create  R查询(Retrieve)  U更新(Update)  D删除(Delete)

在JDBC中,增加,删除,修改,操作都基本一样,只是传递不同SQL语句,最后使用execute()方法执行SQL语句

查询,使用executeQuery()方法执行SQL语句。

1、使用Statement来执行SQL语句

package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; public class TestJDBC{
public static void main(String[] args){
try{
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
}catch(ClassNotFoundException e){
e.printStackTrace();
} try(
Connection c=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8","root","root");//建立连接数据库
Statement s=c.createStatement();
){
String strSql="delete from demo where id=6";
//执行删除语句
s.execute(strSql);
String sql="select * from user where name='"+name+"' and password='"+password+"'";
//执行查询语句,并把结果集返回给ResultSet
ResultSet rs=s.executeQuery(sql);
if(rs.next()){//从结果集获取到账号密码
System.out.println("账号密码正确!");
}
else{
System.out.println("账号密码错误!");
}
}catch(SQLException e){
e.printStackTrace();
}
}
}

2、使用PreparedStatement来执行SQL语句(采用预编译,性能比Statement快,能防止SQL注入)

区别:能够设定参数,指定相应的值,而不是Statement那样使用字符串拼接

package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; public class TestJDBC{
public static void main(String[] args){
try{
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
}catch(ClassNotFoundException e){
e.printStackTrace();
}
String strSql="insert into hero values(null,?,?,?)";
try(
Connection c=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8","root","root");//建立连接数据库
PreparedStatement ps=c.prepareStatement(strSql);
){
//设置strSql问号的参数
ps.setString(1,"temo");
ps.setFloat(2,22.0f);
ps.setInt(3,59);
//执行sql
ps.execute();
}catch(SQLException e){
e.printStackTrace();
}
}
}

二、数据库连接池

  连接池原理

    • 有多个线程,每个线程都需要连接数据库执行SQL语句,那么每个线程都会创建数据库连接,并在使用完之后关闭,由于创建连接和关闭连接过程是比较消耗时间的,多线程的时候,系统就会很卡顿,而一个数据库同时支持连接总数也是有限的,如果多线程并发量很大,那么数据库连接的总数就会被消耗完,那么后续线程连接数据库就会失败。
    • 数据库连接池,在使用之前,就会创建好一定数量的连接,如果有任何线程需要连接,就会在连接池中借用,而不是自己创建。使用完毕后,又把这个连接归还给连接池供下一次使用或者其他线程使用。
    • 加入发成多线程并发情况,连接池里的连接被用光了,那么其他线程就会等待,知道有连接被归还回来,再继续使用整个过程,这些连接都不会被关闭,而是不断的被循环使用,从而节约了启动和关闭连接的时间。

package jdbc;
  
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
  
public class ConnectionPool {
  
    List<Connection> cs = new ArrayList<Connection>();
  
    int size;
  
    public ConnectionPool(int size) {
        this.size = size;
        init();
    }
  
    public void init() {
          
        //这里恰恰不能使用try-with-resource的方式,因为这些连接都需要是"活"的,不要被自动关闭了
        try {
            Class.forName("com.mysql.jdbc.Driver");
            for (int i = 0; i < size; i++) {
                Connection c = DriverManager
                        .getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin");
  
                cs.add(c);
  
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
  
    public synchronized Connection getConnection() {
        while (cs.isEmpty()) {
            try {
                this.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        Connection c = cs.remove(0);
        return c;
    }
  
    public synchronized void returnConnection(Connection c) {
        cs.add(c);
        this.notifyAll();
    }
  
}

一、JDBC的更多相关文章

  1. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  2. 玩转spring boot——结合AngularJs和JDBC

    参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...

  3. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  4. JDBC MySQL 多表关联查询查询

    public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...

  5. JDBC增加删除修改

    一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...

  6. JDBC简介

    jdbc连接数据库的四个对象 DriverManager  驱动类   DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 ...

  7. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  8. FineReport如何用JDBC连接阿里云ADS数据库

    在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...

  9. JDBC基础

    今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...

  10. Spring学习记录(十四)---JDBC基本操作

    先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...

随机推荐

  1. BZOJ 3673: 可持久化并查集(可持久化并查集+启发式合并)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3673 题意: 思路: 可持久化数组可以用可持久化线段树来实现,并查集的查询操作和原来的一般并查集操作 ...

  2. jdk1.8和tomcat9.0、maven3.5.0配置教程

    一.jdk环境变量 JAVA_HOME :C:\Program Files\Java\jdk1.8.0_77(这个是你安装JDK时的路径,按照实际情况改成你自己的目录) CLASSPATH:   .; ...

  3. R 语言 Windows 环境 安装与Windows下制作R的package--Rtools

    1.1    预装的软件 (所有软件都可以在 http://www.biosino.org/R/R-doc/Rm/ 和 http://www.biosino.org/R/requiredSoftWar ...

  4. hdu 6170 Two strings dp

    Two strings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Prob ...

  5. Java一次性读取文件的内容

    我们做文本处理的时候的最常用的就是读写文件了,尤其是读取文件,不论是什么文件,我都倾向于一次性将文本的原始内容直接读取到内存中再做处理,当然,这需要你有一台大内存的机器,内存不够者……可以一次读取少部 ...

  6. Java java.lang.SecurityException: Prohibited package name

    java.lang.SecurityException: Prohibited package name 提示java错误: Exception in thread "main" ...

  7. 【C#】采用OleDB读取Excel文件转DataTable

    using System; using System.Data; using System.Data.OleDb; using System.IO; using System.Linq; using ...

  8. art-template实战

    内容div <div id="sku-cont"> <div class="form-group col-lg-12"> <div ...

  9. Token和SessionStorage(会话存储对象)

    sessionStorage数据只在当前标签页共享 存在本地   关闭浏览器后会清除数据(关闭标签页不会清楚) localStorage数据会存在浏览器中  浏览器关了数据也还在 只有清除缓存才会消失 ...

  10. js 高级知识点

    在JS中统计函数执行次数与执行时间 详解JS中统计函数执行次数与执行时间 JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript 之间转换 javascript设 ...