sql server学习笔记-day6(如何在java程序中操作数据库?)

前面已经学习了什么是数据库和对数据的一些操作方法,那么,我们应该如何在java程序中操作sql server数据库呢?

一、期望目标
1.掌握sql server数据库的备份和恢复技巧
2.掌握java对表的crud(增删改查)操作
3.掌握 Statement 和 PreparedStatement 类
4.能完成一般的java数据库编程任务

二、数据库的备份与恢复
1. 简单直观的方式:企业管理器
2. 使用sql server语句进行数据库的备份和恢复:查询分析器

--如何备份数据库
--语法:backup database 你要备份的数据库名 to disk='路径'
backup database WXY to disk='f:/sp.bak'

--删除数据库
drop database WXY

--如何恢复数据库
--语法:
restore database 你的数据库名 from disk='备份文件路径'
restore database WXY from disk='f:/sp.bak'

--有时可能不需要备份整个数据库,而是数据库中国的某些表(自己查)

三、java程序操作sql server
1. crud介绍:即增、删、改、查(增加create,查询retrieve,更新update,删除delete)。
2. jdbc的基本概念
(1)ODBC(Open Data Base Connectivity,开放的数据库接口)
其实就是一系列函数,可以被调用,函数里实现了想要对数据库执行的操作,调用者只需要给函数传递参数就行。
(2)JDBC(Java Data Base Connectivity,java数据库连接):java ---> jdbc ---> 数据库
   ① 是一种用于执行SQL语句的Java API,由一组用java语言编写的类和接口组成;
   ② 使数据库开发人员可以用纯Java API编写数据库应用程序;
   ③ JDBC API可实现对不同类型数据库的访问,“编写一次,处处运行”

3. 两种常用的操作方式(jdbc-odbc和jdbc)

(1)jdbc-odbc桥连的方式操作数据库
首先需要配置数据源(这里省略),然后在程序中连接数据源。需要注意的是,win64系统下使用这种方式会报错!
/*
 * 演示使用jdbc-odbc桥连的方式,来操作数据库 WXY(emp,dept)
 * 1.配置数据源
 * 2.在程序中去连接数据源
 * */

package com.test1;
import java.sql.*;

public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Connection ct = null;
		Statement sm = null;
		try{
			
			/*------------------------------下面是固定写法!!------------------------------*/
			
			// 1. 加载驱动 (作用是把需要的驱动程序加入内存)
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			
			// 2.得到连接 (指定连接到哪个数据源)
			//如果你配置数据源的时候,选择的是windows nt验证,则不需要“sa”和“3317”
			//即,Connection ct = DriverManager.getConnection("jdbc:odbc:hello");	
			ct = DriverManager.getConnection("jdbc:odbc:hello","sa","3317");
			
			//3. 创建Statement 或PreparedStatement
			//Statement:主要用于发送sql语句,到数据库
			sm = ct.createStatement();
			
			//4. 执行crud,创建、删除、备份数据...
			// (1) 演示添加一条数据到dept表(executeUpdate可以执行cud操作)
			// 返回值 i:表示成功加入的数据的条数 
			int i = sm.executeUpdate("insert into Hero values(3,'保安部','西永','男',20000)");
			if(i==1)
				System.out.println("添加ok");
			else
				System.out.println("添加error");
			
		} catch (Exception e){
			e.printStackTrace();
		}finally{
			//关闭资源的地方:谁后创建,则先关闭
			try {
				if(sm!=null)
				{
					sm.close();
				}
				if(ct!=null)
				{
					ct.close();
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
		}
	}
}

(2)jdbc方式操作数据库
注意:需要自行添加额外的三个数据库驱动jar包(msbase.jar, mssqlserver.jar, msutil.jar)
/**
 * JDBC方式操作数据库
 * 1. 把包java.sql.*引入
 * 2. 需要引入三个jar包
 */
package com.test2;

import java.sql.*;

public class Test2 {

	public static void main(String[] args) {
		
		//定义需要的对象
		PreparedStatement ps = null;
		Connection ct = null;
		ResultSet rs = null;
		
		try{
			
			//初始化各个对象
			
			// 1. 加载JDBC的驱动
			Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
			// 2. 得到连接
			ct = DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=WXY","sa","3317");
			
			// 3. 创建火箭车
		/*	ps = ct.prepareStatement("select * from emp");
			
			// 4. 执行(如果是增加、删除、修改 executeUpdate(), 如果是查询 executeQuery() )
			rs = ps.executeQuery();
			
			//循环取出每一行的数据:雇员的名字、雇员的薪水、部门的编号
			while(rs.next()){
				String name = rs.getString(2);
				float sal = rs.getFloat(6);
				int depno = rs.getInt(8);
				System.out.println(name+" "+sal+" "+depno);	
			}  */
			
			//插入数据
			ps = ct.prepareStatement("insert into dept values(?,?,?)");
			ps.setInt(1, 100);
			ps.setString(2, "财务部");
			ps.setString(3, "大学城");
			int i =ps.executeUpdate();
			if(i==1){
				System.out.println("添加成功!");
			}else{
				System.out.println("失败!");
			}
			
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				if(rs!=null){
					rs.close();
				}
				if(ps!=null){
					ps.close();
				}
				if(ct!=null){
					ct.close();
				}					
			} catch (SQLException e) {
				e.printStackTrace();
			}

		}

	}

}

(3)比较
Statement和PreparedStatement

①相同点
二者都可以用于把sql语句从java程序中发送到指定数据库,并执行sql语句。
②不同点
  • 直接使用Statement,驱动程序一般不会对sql语句作处理而直接交给数据库;使用PreparedStatement,形成预编译的过程,并且会对语句作字符集的转换。(在java程序中先预编译成二进制文件,再发送给sqlserver。这样缓解了服务器的压力,将压力分散给不同的java程序)。如此,有两个好处:对于多次重复执行的语句,使用PreparedStatement效率会高一点,并且在这种情况下也比较适合使用batch;另外,可以比较好地解决系统的本地化问题。
  • PreparedStatement还能有效地防止危险字符的注入,也就是sql注入的问题。
③总结
  • PreparedStatement可以提高执行效率,因为它有预编译的功能;
  • PreparedStatement可以防止sql注入,但是要求用?赋值的方式才可以。
④使用PreparedStatement的代码
/*----------------------------使用PreparedStatement-------------------------------*/
//(1)查询
ps=ct.prepareStatement("select * from dept");
rs=ps.executeQuery();  //rs指向第一条数据的上一行,因此必须要通过next()才能获取第一行数据
while(rs.next()){
     System.out.println("ok");
     //分别获取某一行的第1、2、3个字段的内容:
     int i = rs.getInt(1);
     String s1 = rs.getString(2);
     String s2 = rs.getString(3);
}
                     
//(2)插入数据
ps=ct.prepareStatement("insert into dept values(?,?,?)");
ps.setInt(1,50);
ps.setString(2,"安全部");
ps.setString(3,"北京");
int i = ps.executeUpdate();
/*----------------------------------------------------------------------------------*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值