<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
*多表之间关系
**一对多 ,多对多
*内连接和外连接
思维导图
1、myeclipse工具的安装
*安装myeclipse10.x版本
**安装过程中目录中不能带中文和空格
**启动myeclipse时候,工作空间也不能带中文和空格
**破解过程中,电脑中不能安装其他版本的myeclipse
2、jdbc简介
(1)什么是jdbc:JavaDataBase Connectivity,java数据库的连接
*比如有一台电脑,想要在电脑上安装显卡,需要显卡的驱动,是由显卡生产厂商提供的
*想要使用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导入到了项目里面。
3、jdbc的入门案例
(1)使用java的jdbc操作数据库步骤是固定的(记住)
*使用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();
4、jdbc的DriverManager对象
*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
**第二个参数:连接数据库的用户名
**第三个参数:连接数据库的密码
5、jdbc的Connection对象
*使用java.sql 包里面的接口,代表数据库的连接
*方法:
(1)StatementcreateStatement() :创建执行sql的对象
(2)PreparedStatementprepareStatement(String sql) :得到预编译的对象
(3)CallableStatementprepareCall(String sql) :执行存储过程的方法
6、jdbc的Statement对象
*是java.sql 包里面的接口,执行sql语句的对象
*方法:
(1)ResultSetexecuteQuery(String sql) :执行查询操作的方法,返回ResultSet结果集
(2)intexecuteUpdate(String sql) :执行插入、修改、删除的方法,返回成功的记录数 int类型
(3)booleanexecute(String sql) :执行sql语句,返回结果如果是查询操作返回true,否则返回false
7、jdbc的ResultSet对象
*是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方法之后,
一行一行的向下进行遍历,在默认情况下,只能向下不能向上。
8、jdbc释放资源(关闭连接)
*原则:谁最后打开,谁最先关闭
**规范写法
**首先使用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语句不一样
**包含和查询比较,有很多的代码都是重复的,可以把类里面或者方法里面重复的代码提取到一个工具类里面,
在这些方法里面直接调用工具类里面的方法就可以了,这样可以节省代码量,利用代码的维护。
10、jdbc工具类的封装(方法提取)
(1)获取数据库连接的方法
(2)释放资源的方法(查询和其他操作释放的不一样,重载一个方法传递不同的参数)
(3)数据库驱动的名称、用户名和密码可以进一步提取
**达到效果,如果修改数据库名称,不修改java代码,就可以把这些值放到一个配置文件里面,
在方法里面直接读取配置文件就可以了。
==================================================================================
上午内容总结:
(1)什么是jdbc:sun公司针对不同的数据库提供的标准接口
*如果要使用jdbc对数据库进行操作,首先导入不同的数据库的jar包
*导入jar包到项目步骤
(2)掌握jdbc代码步骤
* 1、加载数据库驱动
* 2、创建连接
* 3、编写sql
* 4、执行sql
* 5、释放资源
(3)jdbc里面的四个对象
*DriverManager
*Connection
*Statement
*ResultSet
(4)jdbc操作释放资源写法
*释放资源写在finally里面
*固定的写法
(5)掌握jdbc完成对数据库的crud操作代码(****)
(6)jdbc工具类封装方法
11、jdbc工具类的封装
(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格式的文件
(2)properties文件必须要放到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
13、jdbc练习(登录后台代码实现)
*判断用户名和密码,同时都正确的话,登录成功
**通过查询数据库进行操作
***sql语句: select * from user where username='' and password=''
14、sql的注入
*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()
15、PreparedStatement使用(***)
**代码
//登录的逻辑的代码
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)什么是jdbc:sun公司针对不同的数据库提供的标准接口
*如果要使用jdbc对数据库进行操作,首先导入不同的数据库的jar包
*导入jar包到项目步骤
(2)掌握jdbc代码步骤
* 1、加载数据库驱动
* 2、创建连接
* 3、编写sql
* 4、执行sql
* 5、释放资源
(3)jdbc里面的四个对象
*DriverManager
*Connection
*Statement
*ResultSet
(4)jdbc操作释放资源写法
*释放资源写在finally里面
*固定的写法
(5)掌握jdbc完成对数据库的crud操作代码(****)
(6)jdbc工具类封装方法
*读取配置文件两种方式(properties文件)
(7)使用工具类进行crud操作代码(****)
(8)jdbc简单登录后台案例
*登录实现逻辑
*sql注入
*解决sql注入漏洞的方法,使用PreparedStatement接口
(9)PreparedStatement接口,父接口是Statement(****)
*预编译
*使用PreparedStatement实现crud操作
(10)批处理
*同时执行多条sql语句
**statement里面操作批处理两个方法
(11)事务
*事务:要么多成功,要多都失败。
*事务四个特性
*使用jdbc操作事务三个方法
===================================================================
完成的任务:
(1)使用工具类进行crud操作代码至少写两遍
(2)使用PreparedStatement完成crud操作
</pre>
本文转自屠夫章哥 51CTO博客,原文链接:http://blog.51cto.com/4259297/1669569,如需转载请自行联系原作者