数据库-第四天-java操作数据库

内容:

1.sql server数据库的备份和恢复

2.java程序如何操作数据库

目标:

1.掌握sql sever数据库的备份和恢复技巧

2.掌握java对表的 crud 操作

3.掌握Statement和PreparedSatement

4.能完成一般的java数据库编程任务

分离/附加:影响原数据库

备份/恢复:不影响原数据库

--如何备份数据库
backup database liang to disk = 'f:/sp.bak'

--删除数据库
drop database liang

--恢复数据库
restore database Liang from disk = 'f:/sp.bak'

--有时,可能不需备份整个数据库,只备份表

 

java程序操作数据库

crud(增删改查):增加(Create)、查询(Retrieve)、更新(Update)和删除(delete),主要描述软件系统中数据库的基本操作功能。

jdbc

JDBC(Java Data Base Connectivity,java数据库连接)是一种执行SQL语句的javaAPI,可以为多种关系数据库提供统一的访问。它由一组由java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯java API编写数据库应用程序。

image                                                                                 常见的两种jdbc驱动方式图

 

jdbc驱动分类

目前常见的JDBC驱动程序可以分为四个种类:

(1)jdbc-odbc桥连接

(2)本地协议纯java驱动程序

(3)网络协议纯java驱动程序

(4)本地api

jdbc的不足

JDBC在java语言层面实现了统一,但在不同数据库之间存在许多差异,为了更好的实现跨数据库操作,诞生了Hibernate(orm技术)

,实现了JDBC的再封装,实现了对数据库操作更为广泛的统一和更好的移植性

案例:

1.使用jdbc-odbc(open data base connectivity)桥接的方式操作sql server数据库。

   需要配置数据源:

   打开 管理工具-> 数据源(ODBC);在用户DSN项中添加一个数据源“mytest”,其中服务器 写/选 local 或写 . ,然后...;配置完后可测试数据源状态  

jdbc-odbc案例代码

 

 

 

注:此时的jdbc-odbc桥接驱动为:sun.jdbc.odbc.JdbcOdbcDriver

在cmd中使用 netstat –an 可查看连接状态。

注:资源 ResultSet 也要删除!

Statement和PreparedStatement的区别:

Statement和PreparedStatement都可以用于把sql语句从java程序中发送到指定的数据库,并执行sql语句,但存在如下区别:

(1)直接使用Statement,驱动程序一般不会对sql语句做处理而直接交给数据库;使用PreparedStatement,形成预编译的过程(在客户端程序中预先编译成数据库能直接执行的二进制代码),并能对语句做字符集的转换(至少在sql server)中如此。

好处:对于多次重复执行的语句,使用PreparedStatement效率会更高一些(提供小部分缓存),并且在此种情况下也较适合使用batch(批处理);另外可以比较好的解决系统本地化问题。

PreparedStatement将数据库的压力分散到客户端。

(2)PreparedStatement还能有效的防止危险字符的注入。

 image

 

 

--演示sql注入漏洞

create table users(
username varchar(30),
passwd varchar(30)
)

insert into users values('baiweiguo','baiweiguo')

select * from users where username = 'dekjg' and passwd='gasdj' or 1='1' 

 

    使用PreparedStatement编码: 

preparedStatement代码java

 

 

注:

PreparedStatement中使用 ? 机制才能防止注入漏洞,否则不能防止。

如下代码同样能获取用户姓名与密码:

ps = ct.prepareStatement("select * from users " +
					"where username = 'ba' and passwd = 'gjk' or 1=1");
rs = ps.executeQuery();
			
while(rs.next())
{
	System.out.println(rs.getString("username")+""+rs.getString("passwd"));
}

 

总结:

     1.PreparedStatement可以提供执行的效率(它有预编译的功能)

     2.PreparedStatement可以防止sql注入,但是要求用?赋值的方式才行。

2.使用 jdbc 驱动程序直接操作sql server数据库。

注意:

1.sql server 2008的驱动名字(记):com.microsoft.sqlserver.jdbc.SQLServerDriver

2.不需要创建数据源,但需要加载包 sqljdbc4.jar

127.0.0.1表示要连接的数据库的ip,此处为本地ip,可以是 localhost

1433表示sql server的默认端口

jdbc方式操作数据库

 

posted @ 2013-02-21 15:10  winko  阅读(792)  评论(0编辑  收藏  举报