zoukankan      html  css  js  c++  java
  • 数据库-第四天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方式操作数据库
  • 相关阅读:
    Java Swing打猎射击游戏源码
    php实现在线下载程序安装包功能
    WP
    双人对战的球类游戏IOS源码
    非常不错的新闻客户端应用安卓源码
    创业建议:如何写挖人邮件
    wp8路线跟踪应用源码详细说明
    wp版笔记本应用源码
    旅游风景展示应用源码iPad版
    bitset优化背包
  • 原文地址:https://www.cnblogs.com/baiweiguo/p/2920638.html
Copyright © 2011-2022 走看看