【HM】第5课:JDBC连接MySQL数据库

  1. 云栖社区>
  2. 博客>
  3. 正文

【HM】第5课:JDBC连接MySQL数据库

技术小胖子 2017-11-11 22:56:00 浏览683
展开阅读全文

<pre>

 

day05

 

上节内容回顾

         1)数据库语句

                   *创建数据库和查看数据库的语句

                   *切换数据库和删除数据库语句

 

         2)数据库表语句

                   *创建数据库表的语句

                   *创建带约束的表

                            **mysql的约束有三个

                   *删除表

 

         3)表中的记录语句

                   *插入记录 insert

                            **如果类型是int类型,直接写值

                            **如果varchar或者日期类型,使用单引号包起来

                   *更新记录 update

                   *删除记录 delete

 

                   *查询记录

                   select.. from ... where ...group by having ...order by..

 

                   *聚集函数: count sum  max min avg

 

                   *去除重复 distinct

 

                   *别名 as ...

 

                   *mysql的关键字 limit

 

                   *多表之间关系

                   **一对多 ,多对多

 

                   *内连接和外连接


 思维导图

wKiom1WStAnCpNtwAAFvH0TMAbM309.jpg


1myeclipse工具的安装

         *安装myeclipse10.x版本

 

         **安装过程中目录中不能带中文和空格

         **启动myeclipse时候,工作空间也不能带中文和空格

 

         **破解过程中,电脑中不能安装其他版本的myeclipse

 

2jdbc简介

         1)什么是jdbcJavaDataBase Connectivityjava数据库的连接

         *比如有一台电脑,想要在电脑上安装显卡,需要显卡的驱动,是由显卡生产厂商提供的

 

         *想要使用java操作数据库,需要由数据库生产厂商提供的驱动。

 

         **一个程序员,要使用jdbc对不同的数据库进行操作,除了要掌握java代码之外,还要掌握不同的数据库驱动的代码,

         对于程序员的压力很大很大。

 

         **sun公司针对这种情况,提供了解决方案,提供一套标准的接口,各个数据库针对这套接口提供了实现类,程序员只需要

         掌握这套接口就可以了,这套接口就是jdbc

 

         2)如果想要使用jdbc对数据库进行操作,首先安装数据库的驱动,不同的数据库厂商使用jar包的形式提供的,

         只需要把数据库的jar导入到项目里面去,就相当于安装了驱动。

 

         3)导入jar包的方法:如果要操作mysql数据库,需要导入mysql-connector-java-5.0.8-bin.jar

         *在项目里面创建一个文件夹,把jar复制到文件夹里面,选择jar包,右键点击 build path -- add to build path

         当看到jar前面的图片变成了类似奶瓶的图标,表示jar导入到了项目里面。

 

3jdbc的入门案例

         1)使用javajdbc操作数据库步骤是固定的(记住)

         *使用jdbc对数据库进行操作使用到这些类和接口

         **DriverManager

         **Connection

         **Statement

         **ResultSet

 

         第一步,加载数据库的驱动

                   *DriverManager.registerDriver(new Driver());

                   Class.forName("com.mysql.jdbc.Driver");

         第二步,创建与数据库的连接

                   *Connection conn = DriverManager.getConnection(url,username,password);

 

         第三步,编写sql语句

                   *String sql = "select * from user";

 

         第四步,执行sql语句

                   *//创建statement对象

                   Statementstmt = conn.createStatement();

                   *查询操作,执行 stmt.executeQuery(sql);

                   *返回ResultSet,结果集,遍历结果集得到每一行的记录

 

         第五步,释放资源(关闭连接)

                   *调用close方法关闭连接

                   *原则:谁最后打开,谁最先关闭

 

         **入门案例的代码:

                   //加载驱动 使用DriverManager

                   DriverManager.registerDriver(newDriver());

                   //创建连接Connection

                   Connectionconn =DriverManager.getConnection("jdbc:mysql://localhost:3306/day05","root", "root");

                   //编写sql

                   Stringsql = "select * from user";

                   //执行sqlStatement

                   //创建statement对象

                   Statementstmt = conn.createStatement();

                   ResultSetrs = stmt.executeQuery(sql);

                   //遍历结果集

                   while(rs.next()){

                            //得到每一行的记录

                            intid = rs.getInt("id");

                            Stringusername = rs.getString("username");

                            Stringpassword = rs.getString("password");

                            System.out.println(id+":: "+username+" :: "+password);

                   }

                   //关闭连接

                   rs.close();

                   stmt.close();

                   conn.close();

 

4jdbcDriverManager对象

         *java.sql 包下面的类

         *可以做两件事情

         第一件事情:加载数据库驱动

                   **registerDriver(Driver driver)

                   =参数是Driver对象,这个对象是数据库里面驱动对象

 

                   ***这种方式一般在实际开发中不使用,会加载驱动两次(通过查看mysql的源代码)

                   static{

                            try{

                                     java.sql.DriverManager.registerDriver(newDriver());

                            }catch (SQLException E) {

                                     thrownew RuntimeException("Can't register driver!");

                            }

                   }

 

                   **一般在开发中都使用反射的方式加载数据库驱动 Class.forName("");

                   ***得到Class类有三种方式

                   =类名.class

                   =对象.getClass()

                   =Class.forName("");

 

         第二件事情:创建与数据库的连接

                   ConnectiongetConnection(String url, String user, String password)

                   *有三个参数

                   **第一个参数:要连接的数据库地址和名称

                            ***jdbc:mysql://数据库ip:数据库端口/数据库名称

                            =jdbc:mysql://localhost:3306/day05

                            ***第一个参数有简写方式(使用的范围:当连接的是本机数据库,同时端口号是3306

                            =jdbc:mysql:///day05

                   **第二个参数:连接数据库的用户名

                   **第三个参数:连接数据库的密码

 

5jdbcConnection对象

         *使用java.sql 包里面的接口,代表数据库的连接

         *方法:

         1StatementcreateStatement() :创建执行sql的对象

         2PreparedStatementprepareStatement(String sql) :得到预编译的对象

         3CallableStatementprepareCall(String sql) :执行存储过程的方法

 

6jdbcStatement对象

         *java.sql 包里面的接口,执行sql语句的对象

         *方法:

         1ResultSetexecuteQuery(String sql) :执行查询操作的方法,返回ResultSet结果集

         2intexecuteUpdate(String sql) :执行插入、修改、删除的方法,返回成功的记录数 int类型

         3booleanexecute(String sql) :执行sql语句,返回结果如果是查询操作返回true,否则返回false

 

7jdbcResultSet对象

         *java.sql包里面的接口,表示做查询操作返回的结果集

         *结果集

         +------+----------+----------+

         |id   | username | password |

         +------+----------+----------+

         |    1 | aaa     | 123456   |

         |    2 | bbb     | bbb      |

         +------+----------+----------+

         *遍历结果集

         **方法:next()

         *得到每一条记录

         **方法操作一:根据不同的类型使用不同的方法

         =如果是int类型,使用int getInt("字段的名称")

         =如果是varchar类型,使用getString("字段的名称")

         =如果不知道类型,使用 Object getObject("字段的名称") 

 

         **方法操作二:根据不同的类型使用不同的方法

         =如果是int类型,使用int getInt(字段的位置)

         =如果是varchar类型,使用getString(字段的位置)

         =如果不知道类型,使用 Object getObject(字段的位置)

 

         *结果集的遍历的过程(画图分析)

         **在没有执行next方法时候,在第一行之前,执行next方法之后,

         一行一行的向下进行遍历,在默认情况下,只能向下不能向上。

 

8jdbc释放资源(关闭连接)

         *原则:谁最后打开,谁最先关闭

         **规范写法

         **首先使用try-catch-finally,把释放资源的代码写到finally里面(finally里面的语句肯定会执行)

         **if(rs != null) {

                   try{

                            rs.close();

                   }catch(Exceptione) {

                   }

                   //jvm快速的回收

                   rs= null;

           }

 

9、使用jdbc完成crud操作

         *jdbc的操作步骤

         **如果做查询操作时候,执行statement里面executeQuery方法,返回结果集ResultSet

         **如果做增加修改和删除操作的时候,执行Statement里面executeUpdate方法,返回成功的记录数 int数目

         **最终不要忘记释放资源

 

         **做增加,修改,删除操作时候,只是sql语句不一样

         **包含和查询比较,有很多的代码都是重复的,可以把类里面或者方法里面重复的代码提取到一个工具类里面,

         在这些方法里面直接调用工具类里面的方法就可以了,这样可以节省代码量,利用代码的维护。

 

10jdbc工具类的封装(方法提取)

         1)获取数据库连接的方法

         2)释放资源的方法(查询和其他操作释放的不一样,重载一个方法传递不同的参数)

         3)数据库驱动的名称、用户名和密码可以进一步提取

                   **达到效果,如果修改数据库名称,不修改java代码,就可以把这些值放到一个配置文件里面,

                   在方法里面直接读取配置文件就可以了。

 

==================================================================================

上午内容总结:

         1)什么是jdbcsun公司针对不同的数据库提供的标准接口

                   *如果要使用jdbc对数据库进行操作,首先导入不同的数据库的jar

                   *导入jar包到项目步骤

         2)掌握jdbc代码步骤

                    * 1、加载数据库驱动

                    * 2、创建连接

                    * 3、编写sql

                    * 4、执行sql

                    * 5、释放资源

         3jdbc里面的四个对象

                   *DriverManager

                   *Connection

                   *Statement

                   *ResultSet

         4jdbc操作释放资源写法

                   *释放资源写在finally里面

                   *固定的写法

                  

         5)掌握jdbc完成对数据库的crud操作代码(****

 

         6jdbc工具类封装方法

 

11jdbc工具类的封装

         1)获取数据库连接的方法

         2)释放资源的方法(查询和其他操作释放的不一样,重载一个方法传递不同的参数)

 

         3)把数据库驱动名称,url地址,用户名和密码放到配置文件中,在方法里面直接读取配置文件得到这些值

         =properties格式的配置文件,类似于key-value形式

         **     drivername=com.mysql.jdbc.Driver

                   url=jdbc:mysql:///day05

                   username=root

                   password=root

 

         4)读取properties文件的方式:

         **有两种方式:

         第一种方式:使用类Properties读取

                   **  load(InputStream inStream):表示把配置文件的输入流加载到类里面

                            ***得到文件的输入流 InputStream in = new FileInputStream("");

                   **  String getProperty(String key) :根据配置文件里面的key得到value的值

                   ***一般做文件操作的时候都使用字节流,InputStream。如果是字符流不能处理类似图片格式文件

 

                   **代码:               

                   //第一种方式读取

                   Propertiesp = new Properties();

                   //得到文件的输入流

                   InputStreamin = new FileInputStream("src/db.properties");

                   p.load(in);

                   //根据名称得到值  String getProperty(String key) 

                   Stringdrivername = p.getProperty("drivername");

                   Stringurl = p.getProperty("url");

                   Stringusername = p.getProperty("username");

                   Stringpassword = p.getProperty("password");

                   System.out.println(drivername+": "+url+" : "+username+" : "+password);

        

         第二种方式:使用工具类,ResoutceBundle读取

                   **使用ResoutceBundle读取文件使用范围:

                            1)只能读取properties格式的文件

                            2properties文件必须要放到src下面

                   **代码

                   Stringdrivername =ResourceBundle.getBundle("db").getString("drivername");

                   Stringurl = ResourceBundle.getBundle("db").getString("url");

                   Stringusername =ResourceBundle.getBundle("db").getString("username");

                  String password =ResourceBundle.getBundle("db").getString("password");

                  

12、内容补充

         *首先创建项目(java project  web project

         *在项目的src下面创建包 xx.xx.xxx

         *在包里面创建类 :类命名方法,首字母大写

         *在一个类里面定义变量命名规范

                   **总的原则:看到名字知道含义

                   **英语单词:userName

                   **使用汉语拼音:yonghuming

                   **一定不要既有英语也有汉语拼音 userMing

         *java里面快捷键

                   **代码提示 alt /

                   **快速导包 ctrl shift o

                   **删除一行 ctrl d

 

13jdbc练习(登录后台代码实现)

         *判断用户名和密码,同时都正确的话,登录成功

         **通过查询数据库进行操作

         ***sql语句: select * from user where username='' and password=''

        

14sql的注入

         *select * from user where username='aaa' or '1=1' and password=''

         **在传递用户名的时候,这样写 aaa' or '1=1,密码可以为空,也可以登录成功

 

         *sql注入可以PreparedStatement对象解决问题

         **connection里面PreparedStatement prepareStatement(String sql)

         ***这个对象代表预编译对象,在sql语句执行之前编译出来,防止注入

 

         *PreparedStatement是一个接口,是Statement的子接口

         **执行查询使用 ResultSet executeQuery() 

         **执行增加修改删除:int executeUpdate()

 

 15PreparedStatement使用(***

         **代码

         //登录的逻辑的代码

         publicstatic boolean login(String username,String password) {

                   //定义变量

                   Connectionconn = null;

                   PreparedStatementpsmt = null;

                   ResultSetrs = null;

                   try{

                            //使用工具类得到连接

                            conn= JDBCUtils.getConnection();

                            //编写sql

                            Stringsql ="select * from user where username=? and password=?";

                            //执行sql

                            //预编译sql

                            psmt= conn.prepareStatement(sql);     

                            //设置两个参数

                            psmt.setString(1,username);

                            psmt.setString(2,password);

                            rs= psmt.executeQuery();

                            while(rs.next()){

                                     System.out.println(rs.getString("username"));

                                     returntrue;

                            }

                   }catch(Exception e ) {

                           

                   }finally {

                            //释放资源

                            JDBCUtils.clear1(rs, psmt,conn);

                   }

                   returnfalse;

         }

 

16、批处理的操作

         *什么是批处理:同时执行多条sql语句

         **应用:向一个表里面添加多条记录

 

         *Statement常用两个方法对批处理进行操作

         **addBatch(String sql):把多个sql语句加到批处理操作里面

         **executeBatch() :执行批处理里面的这些sql语句

 

17、事务的介绍

         *有一组操作(有增加操作,还有一个修改的操作),在事务里面这些操作要么都成功,只要有一个失败,这些操作都失败。

         **银行转账的操作肯定会用到事务操作

         ***如果小丽给小金转账一万,在小丽转账过程中出现了异常,小丽钱少了,但是小金没有收到这个钱,

         就可以使用事务进行操作。

 

         *事务四个特性:原子性、一致性、隔离性、持久性

 

         *使用jdbc操作事务

         **mysql数据库里面,默认情况下事务是会自动提交

         **设置mysql里面的事务不是自动提交,需要手动进行提交

         =connection里面setAutoCommit(boolean autoCommit):如果不写默认的值true,可以设置值是false不会自动提交

         =connection里面commit() :手动提交事务

         =connection里面rollback():回滚事务(回到操作之前的状态)

 

         **代码

         //使用修改操作演示事务

         publicstatic void main(String[] args) {

                   Connectionconn = null;

                   Statementstmt = null;

                   try{

                            //得到数据库的连接

                            conn= JDBCUtils.getConnection();

                            //设置数据库不会自动提交

                            conn.setAutoCommit(false);

                            //编写sql

                            Stringsql = "update user set username='EEEEE' where id=6";

                            //执行sql

                            stmt= conn.createStatement();

                            stmt.executeUpdate(sql);

                            //出现了异常

                            inta = 10/0;

                            //提交事务

                            conn.commit();

                   }catch(Exceptione) {

                            e.printStackTrace();

                            //回滚事务

                            try{

                                     conn.rollback();

                            }catch (SQLException e1) {

                            }

                   }finally{

                            //释放资源

                            JDBCUtils.clear1(stmt,conn);

                   }

 

====================================================================================

今天内容的总结

         1)什么是jdbcsun公司针对不同的数据库提供的标准接口

                   *如果要使用jdbc对数据库进行操作,首先导入不同的数据库的jar

                   *导入jar包到项目步骤

         2)掌握jdbc代码步骤

                    * 1、加载数据库驱动

                    * 2、创建连接

                    * 3、编写sql

                    * 4、执行sql

                    * 5、释放资源

         3jdbc里面的四个对象

                   *DriverManager

                   *Connection

                   *Statement

                   *ResultSet

         4jdbc操作释放资源写法

                   *释放资源写在finally里面

                   *固定的写法

                  

         5)掌握jdbc完成对数据库的crud操作代码(****

 

         6jdbc工具类封装方法

                   *读取配置文件两种方式(properties文件)

        

         7)使用工具类进行crud操作代码(****

        

         8jdbc简单登录后台案例

                   *登录实现逻辑

                   *sql注入

                   *解决sql注入漏洞的方法,使用PreparedStatement接口

 

         9PreparedStatement接口,父接口是Statement****

                   *预编译

                   *使用PreparedStatement实现crud操作

        

         10)批处理

                   *同时执行多条sql语句

                   **statement里面操作批处理两个方法

 

         11)事务

                   *事务:要么多成功,要多都失败。

                   *事务四个特性

                   *使用jdbc操作事务三个方法

===================================================================

         完成的任务:

         1)使用工具类进行crud操作代码至少写两遍

         2)使用PreparedStatement完成crud操作

</pre>





      本文转自屠夫章哥  51CTO博客,原文链接:http://blog.51cto.com/4259297/1669569,如需转载请自行联系原作者



网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注