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对象)。

                 

             

相关文章
|
28天前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
42 1
|
29天前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
32 2
|
1月前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
19天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
19天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
19天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
|
5天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
9 0
|
28天前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
20 1
|
28天前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。若需快速入门,建议查阅“简洁”系列教程。本文重点探讨Kotlin与Java共存的高级话题,包括属性访问、空安全、泛型处理、同步机制及SAM转换等,助你在项目中逐步引入Kotlin。
20 1
|
29天前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
Kotlin语法笔记(28) -Kotlin 与 Java 混编
25 2
下一篇
无影云桌面