数据库入门
1.1引入:
方式一数据放到内存
优点:
1)擦写数据的效率很高
缺点:
1)无法永久保存,当程序关闭数据丢失
方式二 数据放到普通文件
优点:
1)可以永久保存
缺点:
1)频繁的进行IO操作,效率比较低
2)查询数据不方便
方式三:数据放到数据库
优点:
1)数据永久的保存下去
2)查询数据非常方便
3)效率不能低
1.2数据库常见的数据库软件
数据库软件:存储和管理数据的仓库
Oracle是甲骨文公司的产品:满足中大型的应用和java语言的兼容性非常好的。
mysql:开源的数据库产品。和java语言的兼容性非常好,满足中小型应用。
SQL Server:是微软公司的产品,和net平台(c#语言)兼容性最好
DB2是IBM的产品
mangoDB noSQL数据库
mysql满足中小型应用
oracle满足中大型应用
1.3mysql 数据库的基本使用
如何卸载
服务-》mysql关闭
控制面板-》管理工具-》卸载程序功能,-》安装目录全部清空
找到影藏文件(颜色比较浅的)找到mysql然后全部删除
1.jdbc入门
1.1简介
使用java程序访问(操作)数据库(发送sql语句),这就用到了jdbc技术!!1
1.2使用jdbc访问数据的前提
先登录数据库
数据库的主机地址(IP地址)
端口
数据库用户名
数据库用户名密码
链接数据库
2)发送sql语句
2.jdbc核心的api
Driver接口:驱动程序接口
|-Connection connect() 用于连接数据库的方法
Connection接口: 代表和数据库的连接
Statement createStatement() 创建Statement接口对象
PreparedStatement prepareStatement(String sql) 创建PreparedStatement接口对象
CallableStatement prepareCall(String sql)创建CallableStatement接口对象
|Statement接口 属于执行静态的sql语句
DDL create
DML insert update delete
|-int executeUpdate(String sql)执行DDL和DML语句(更新sql语句)
|- ResultSet executeQuery(String sql) 执行DQL语句(查询sql语句)
|-PreparedStatement 接口:用于执行预编译的sql语句
|-int executeUpdate()执行DDL和DML语句(更新sql语句)
|- ResultSet executeQuery() 执行DQL语句(查询sql语句)
|-CallableStatement接口:执行存储过程的sql语句
|- ResultSet executeQuery() 存储过程只能执行查询sql(call) )
-ResultSet接口:表示数据库结果集
|boolean next() 将光标移至下一行
|-getXXX()获取结果集中每列的值
3.jdbc操作步骤
1)注册驱动程序
2)获取连接对象
3)准备sql语句
4)创建Statement对象
5)执行sql语句
DDL+DML:executeUpdate(sql )
6)返回结果,处理结果
7)关闭资源
Statement接口
sql注入行为:SELECT * from students where name='王六' or 1=1 ; where 1=1恒成立
问题:可以被用户注入sql,不安全。
全部当做查询语句去执行
|-PreparedStatement 接口
先进行预编译:有几个?、就需要传入几个值
将传入的变量分别进行匹配
4.使用PreparedStatement执行sql语句
Statement vs PreparedStatement
语发不同
1)Statement只能执行静态的sql语句
2)PreparedStatement既可以执行静态的sql语句,也可以执行预编译sql语句
安全性不同:
1)Statement可以别用户进行sql注入
2)PreparedStatement不能被用户注入sql,比Statement更安全
执行效率不同:
1)Statement不能利用数据库sql缓存功能
2)PreparedStatement可以利用数据库sql缓存功能,比Statement的执行效率更高!!!
结论:建议尽量去使用PreparedStatement
5.优化类路径
使用类路径读取jdbc.properties
总结:
1)jdbc使用java程序操作数据库的技术(一套接口)
2)jdbc步骤
2.1)注册驱动:
Class.from(驱动名称);
2.2Connection coon=Driver.getConnection(URL,user,password);
2.3创建Statement/PreparedStatement/CallableStatement
coon.createStatement()
coon.preparedStatement(sql);
2.4如何使用PreparedStatement/CallableStatement设置参数
stmt.setXXX(参数位置,参数值);
2.5执行sql发送参数
stmt.executeUpdate() DDL+DML
PresultSet rs=stmt.executeQuery() DQL
2.60处理集
rs.next()
rs.getXXX()
2.7关闭资源
rs.close
stmt.close
coon.close