JAVA 笔记-JDBC(五)

简介: JAVA 笔记-JDBC(五)

1、什么是jdbc?

    java database conectivity

    sun公司制订的一种用来访问数据库的通用的api,这些api由不同的数据库厂商来实现,这样,开发人员就可以使用相同的方式来访问不同的数据库。

2、如何使用jdbc?

    (1)三个重要的对象

         a,  Connection : 负责建立连接(java程序与数据库之间

         的连接)

         b,  Statement :负责发送sql给数据库(Statement由

         Connection来创建)

         c,   ResultSet : 负责封装数据库返回的查询的结果。

    (2)编程步骤

          step1, 加载驱动(需要事先将驱动程序对应的

         jar文件放到classpath对应的路径)

              驱动:就是不同的数据库厂商实现的api。

              Class.forName(驱动类名);

          step2,获得连接

              Connection conn =

              DriverManager.getConnection(url,user,pwd);

              url:数据库所在的机器在的ip,端口,sid

              user:用户名

              pwd:密码

          step3, 获得Statement

              Statement stat = conn.creatStatement();

          step4, 执行SQL

              a, 执行查询

                   ResultSet rst = stat.executeQuery(SQL);

              b,执行删除、更新、插入

                   int stat.executeUpdate(SQL);

          step5,如果是查询,需要遍历ResultSet

                   遍历: 将查询的结果一条一条取出来,获取其中的数据。

3、mysql

    (1)简单使用

         1)登录mysql(使用root用户)

              mysql -uroot;

         2)查看当前有哪些数据库

              show databases;

         3)创建一个数据库 (名叫jd1305db,缺省的

         字符集是utf8)

              create database jd1305db default

              character set utf8;

         4) 使用某个数据库

              use  jd1305db;

         5) 查看当前数据库有哪些表

              show tables;

         6)  建表

              create table t_user(

                   id int primary key  auto_increment,

                   username varchar(50),

                   pwd varchar(30),

                   age int

              )type=innodb;

              insert into t_user(username,pwd,age)

              values('jetty','test',23);

         注意:

              auto_increment: 自增长列,即该列的值由数据库

              自动赋值,一般用于主健的生成。

              type=innodb:  表示该表支持事务。

4、使用jdbc访问数据库,常见的错误

    (1) 参数错误

    (2) 驱动程序(jar文件)不合适,或者没有放到

    classpath路径里面。              

    (3) sql语句错误

5、PreparedStatement (预编译的Statement)

         1)sql注入问题:

              通过刻意构造一些参数值,来改变系统原有sql语句的结构,从而达到破坏系统的目的(比如,非法获取系统敏感的数据,非法登录等等)

         2)PreparedStatement

              a,PreparedStatement是如何执行的?

                   step1, sql语句先发送给数据库,数据库会生成一个执行计划(预编译)

                   step2, 将参数值发送给数据库,执行sql。

              b,优点

                   b1:  防止sql注入因为PreparedStatement执行的sql语句结构是不会改变的 。

                   b2:如果有多条结构相同的sql语句要执行,则 PreparedStatement执行效率要比Statement高。

6、DAO (Data Access Object)

    (1)DAO是什么?

         封装了数据访问逻辑的一个模块。

    (2)如何写一个DAO?

         step1,  写一个实体类就是一个普通的java类,这个类与数据库的

         表对应:

              该类的属性与表的列对应(数据类型匹配),这些属性要有对应的get/set方法。

              实体类的作用,是为了将数据库中的记录封装成一个对应的java对象。

         step2,  写一个DAO接口

              在DAO接口中,要声明一系列用来访问数据库的方法。

              声明这些方法时,不要涉及任何具体的数据库访问技术。

         step3,  写一个DAO实现类

              既使用具体的数据库访问技术来实现DAO接口。

         step4,  写一个工厂类

              "工厂设计模式":                    工厂负责为调用者提供一个符合接口要求的对象(该对象一般称之为产品)。                    这样做的好处是:调用者不用了解对象的创建的细节,并且,当对象发生了改变,不会影响到调用者。

7、事务

    (1)什么是事务?

          将多个操作当做一个原子操作来进行。

    (2)jdbc如何控制事务?

         1)jdbc在默认情况下是自动提交事务,即一条sql语句执行之后,会立即提交事务。

         2)如果多个操作(即有多条sql语句要执行)要当做一个整体来执行,比如在“转帐”业务当中,需要执行两个sql: 一个sql用来对一个帐号进行扣除余额的操作(-1000),

              另外一个sql用来对另外一个帐号进行增加余额的操作(+1000),很显示,这两个操作要么同时成功,要么同时失败。

         3)三个方法

              //当flag为false时,表示禁止自动提交。

               connection.setAutoCommit(boolean flag);

              //提交事务

              connection.commit();

              //回滚事务

              connection.rollback();

    (3) 事务的封装

              比如,要“转帐":

              从资金帐户(t_account表中的某条记录)扣掉200元,然后,股票帐户(t_stock表中的某条记录)增加价值200元的股票。

         create table t_account(

              id int primary key auto_increment,

              accountNo varchar(16),

              balance int

         )type=innodb;

         insert into t_account(accountNo,balance)

         values('6225881003192000',1000);

         create table t_stock(

              id int primary key auto_increment,

              stockNo varchar(6),

              qty int

         )type=innodb;

         insert into t_stock(stockNo,qty)

         values('600015',0);    

    (4) Threadlocal (线程局部变量)

         a,作用

              为每一个线程维护一个变量的副本。

         b,用途

              一个线程要访问多个方法,需要在多个方法之间共享同一个数据(比如,一个connection对象)。

                 

             

相关文章
|
16天前
|
Java
Java基础—笔记—static篇
`static`关键字用于声明静态变量和方法,在类加载时初始化,只有一份共享内存。静态变量可通过类名或对象访问,但推荐使用类名。静态方法无`this`,不能访问实例成员,常用于工具类。静态代码块在类加载时执行一次,用于初始化静态成员。
10 0
|
16天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
15 0
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
2月前
|
监控 负载均衡 Dubbo
|
3天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
16天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--快速排序
数据结构与算法(Java篇)笔记--快速排序
|
1月前
|
机器学习/深度学习 算法 搜索推荐
数据结构与算法(Java篇)笔记--归并排序
数据结构与算法(Java篇)笔记--归并排序
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--插入排序
数据结构与算法(Java篇)笔记--插入排序
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--选择排序
数据结构与算法(Java篇)笔记--选择排序