JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。

JDBC连接步骤:

  1.先导入jar包,把jar放入到工程下并 add Libar ay
  2.加载驱动 Class.forName("com.mysql.jdbc.Driver");
  3.获取连接对象 Connection connection=DriverManger.getConnection(url,user,password);
  4.获取执行sql语句的对象: Statement

1. 如何防止被sql注入

  1.什么是sql注入 ---> sql拼接安全问题

  statement存在sql注入问题 : 因为它的sql字符串拼接

  解决方案 : 使用PrepareStatement来进行sql的预编译

2.常见的JDBC组件

JDBC 的 API 提供了以下接口和类:

DriverManager :这个类管理一系列数据库驱动程序。匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。

Driver : 这个接口处理与数据库服务器的通信。你将很少直接与驱动程序互动。相反,你使用 DriverManager 中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息。

Connection : 此接口具有接触数据库的所有方法。该连接对象表示通信上下文,即,所有与数据库的通信仅通过这个连接对象进行。

Statement : 使用创建于这个接口的对象将 SQL 语句提交到数据库。除了执行存储过程以外,一些派生的接口也接受参数。

ResultSet : 在你使用语句对象执行 SQL 查询后,这些对象保存从数据获得的数据。它作为一个迭代器,让您可以通过它的数据来移动。

SQLException : 这个类处理发生在数据库应用程序的任何错误。

3.代码演示

下面是我的代码举例:

1.首先要创建一个后缀为 properties 的文件,(注意必须要写在src路径下) 写入硬编码,目的是为了程序日后有变动的话直接在这个文件中更改,源代码保持不动。

url=jdbc:mysql://localhost:3306/abc?
serverTimezone=Asia/Shanghai
user=root
password=123@qwe
drivername=com.mysql.cj.jdbc.Driver //都是以键值对的形式,(注意:这里面不需要在每段代码结尾加 ; )
//url = jdbc:mysql://路径(端口)/库名?serverTimezone(时区)=Asia(亚洲)/Shanghai
//user=(mysql账号)
//password=(mysql密码)
//drivername(这个可以自行定义)=com.mysql.cj.jdbc.Driver(这个路径是导入jar包的路径)

2.创建实体类  包名命名为 entiy(实体)

 1 public class User3 {
2 private Integer id;
3 private String name;
4 private String password;
5
6 public Integer getId() {
7 return id;
8 }
9
10 public void setId(Integer id) {
11 this.id = id;
12 }
13
14 public String getName() {
15 return name;
16 }
17
18 public void setName(String name) {
19 this.name = name;
20 }
21
22 public String getPassword() {
23 return password;
24 }
25
26 public void setPassword(String password) {
27 this.password = password;
28 }
29
30 @Override
31 public String toString() {
32 return "User3{" +
33 "id=" + id +
34 ", name='" + name + '\'' +
35 ", password='" + password + '\'' +
36 '}';
37 }
38 }

3.建立util包,里面建立BaseDao类

-类作用主要用于将UserDao3类中的重复代码进行提取,提高效率;实现代码简洁。

 1  public Connection connection;
2 public PreparedStatement ps;
3 public ResultSet resultSet;
4
5 private static String url;
6 private static String user;
7 private static String password;
8 private static String drivername;
9
10 static{
11 try {
12 //先建立输入流 创建properrties对象 加载资源流
13 InputStream resourceAsStream = BaseDao3.class.getResourceAsStream("/db2.properties");
14 Properties properties = new Properties();
15 properties.load(resourceAsStream);
16 //导入数据
17 url = properties.get("url").toString();
18 user = properties.get("user").toString();
19 password = properties.get("password").toString();
20 drivername=properties.get("drivername").toString();
21 //加载驱动(驱动只需要加载一次就可以了)
22 Class.forName(drivername);
23
24 } catch (Exception e) {
25 e.printStackTrace();
26 }
27
28 }
29
30 public void getconnection(){ //建立连接方法
31 try {
32 connection = DriverManager.getConnection(url,user,password);
33 } catch (Exception throwables) {
34 throwables.printStackTrace();
35 }
36 }
37
38 public int change(String sql,Object... arg){ //增删改方法
39 try {
40 getconnection();
41 ps=connection.prepareStatement(sql);//预编译
42 for(int index=0;index<arg.length;index++){
43 ps.setObject(index+1,arg[index]);
44 }
45 int row =ps.executeUpdate(); //执行更新
46 return row;
47 } catch (Exception throwables) {
48 throwables.printStackTrace();
49 }finally{
50 closeAll();
51 }
52 return 0;
53 }
54
55
56 public void closeAll() { //关闭连接, 从内往外关闭
57 try {
58 if (resultSet != null) { resultSet.close(); }
59 if (ps != null) { ps.close(); }
60 if (connection != null) { connection.close(); }
61 }catch(Exception e){
62 e.printStackTrace();
63 }
64 }

4.创建实体类后紧跟要创建实体类Dao, 上面我的实体类名为 user3  那么Dao类名就可以为 user3Dao

  Dao方法用来建立连接mysql数据库,实现程序连接数据库功能。

  里面写入方法,需求(增删改查)

public class UserDao3 extends BaseDao3 { //继承刚才写好的BaseDao父类
//添加数据
public int insert(User3 user3){
String a="insert into user (id,name,password) values (?,?,?)";
return change(a,user3.getId(),user3.getName(),user3.getPassword());
} //使用list遍历表中数据
public List<User3> select(){
List<User3> list =new ArrayList<>(); try {
getconnection();
String a ="select * from user";
ps=connection.prepareStatement(a);
resultSet = ps.executeQuery();
while(resultSet.next()){
User3 user3 =new User3();
user3.setId(resultSet.getInt(1));
user3.setName(resultSet.getString(2));
user3.setPassword(resultSet.getString(3));
list.add(user3);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return list;
} public int update(User3 user3){ //修改数据库表中数据
String a ="update user set password=? where id=?";
return change(a,user3.getPassword(),user3.getId());
} public int delete(User3 user3){ //删除表中数据
String a = "delete from user where id=?";
return change(a,user3.getId());
}
}

JDBC:(java database Connection) java数据库连接。的更多相关文章

  1. JDBC (Java DataBase Connectivity)数据库连接池原理解析与实现

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  2. JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language

    JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据 ...

  3. 【学习笔记】JDBC数据库连接技术(Java Database Connectivity)

    一.JDBC简介 Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称.它可以把数据持久保存,是一种持久化机制. 1.持久化 持久化就是将程序中的数据在瞬时状态和 ...

  4. [19/05/06-星期一] JDBC(Java DataBase Connectivity,java数据库连接)_基本知识

    一.概念 JDBC(Java Database Connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准API. J ...

  5. 【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement

    本blog提供了一个简单的通过JDBC驱动建立JDBC连接例程.并分别通过Statement和PreparedStatement实现对数据库的查询. 在下一篇blog中将重点比較Statement与P ...

  6. com.mysql.jdbc.connection和java.sql.connection的区别

    com.mysql.jdbc.Connection 是mysql自己的接口 针对于对mysql的出来,java.sql.Connection 这是一个公共的接口包括对mysql的支持oracle,sq ...

  7. ambari-server启动出现ERROR main] DBAccessorImpl:106 - Error while creating database accessor java.lang.ClassNotFoundException:com.mysql.jdbc.Driver问题解决办法(图文详解)

    不多说,直接上干货! 问题详情 ambari-server启动时,报如下的错误 问题分析 注:启动ambari访问前,请确保mysql驱动已经放置在/usr/share/Java内且名字是mysql- ...

  8. [19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存储大量的文本数据)与BLOB(存储大量的二进制数据)

    一. CLOB(Character Large Object ) – 用于存储大量的文本数据 – 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的.而非一般的字段,一次 ...

  9. JDBC(Java Database Connectivity)编写步骤

    JDBC是代表一组公共的接口,是Java连接数据库技术: JDBC中的这些公共接口和DBMS数据库厂商提供的实现类(驱动jar),是为了实现Java代码可以连接DBMS,并且操作它里面的数据而声名的. ...

随机推荐

  1. java 线程基础篇,看这一篇就够了。

    前言: Java三大基础框架:集合,线程,io基本是开发必用,面试必问的核心内容,今天我们讲讲线程. 想要把线程理解透彻,这需要具备很多方面的知识和经验,本篇主要是关于线程基础包括线程状态和常用方法. ...

  2. 手写AVL平衡二叉搜索树

    手写AVL平衡二叉搜索树 二叉搜索树的局限性 先说一下什么是二叉搜索树,二叉树每个节点只有两个节点,二叉搜索树的每个左子节点的值小于其父节点的值,每个右子节点的值大于其左子节点的值.如下图: 二叉搜索 ...

  3. 史上最全git命令集

    配置化命令 git config --global user.name "Your Name" git config --global user.email "email ...

  4. redis 主从复制详解

    引言 我们之前操作 Redis 都是单机版,但是实际应用中没人使用单机版,都是搭建集群的方式.这篇文章要介绍的主从复制,是指将一台 Redis 服务器的数据,复制到其他 Redis 服务器,我们将前者 ...

  5. autoCAD绘制简单三维立体图形

    第一步: 首先绘制一个简单的(封闭的)二维图形: 第二步: 变换观察视角,比如修改为 变换后的视角: 第三步: 选中闭合图形边框,使用组合键"ctrl + shift + E",然 ...

  6. vue-cli-service build 环境设置

    zhidao zhouzongshuo的那个是使用vue-cli3打包项目,通过配置不同的指令给项目设置不一样的配置. npm run serve时会把process.env.NODE_ENV设置为' ...

  7. XXE从0到1

    XXE从0到1 1. XXE概述 XXE(XML External Entity Injection)即XML外部实体注入.漏洞是在对不安全的外部实体数据进行处理时引发的安全问题. 下面我们主要介绍P ...

  8. Expression 表达式动态生成

    http://blog.csdn.net/duan1311/article/details/51769119 以上是拼装和调用GroupBy的方法,是不是很简单,只要传入分组列与合计列就OK了! 下面 ...

  9. Docker系列(13)- 部署es+kibana

    部署elasticsearch # es 暴露的端口很多 # es 十分的消耗内存 # es 的数据一帮需要放置到安全目录!通过挂载实现 # DockerHub上安装文档,其中 --net somen ...

  10. CF1556D-Take a Guess【交互】

    正题 题目链接:https://codeforces.com/contest/1556/problem/D 题目大意 现在有\(n\)个你不知道的数字,你有两种询问操作 询问两个下标的数字的\(and ...