Oracle (三)

Oracle数据库备份

exp导出

本机备份
exp 用户名/密码@数据库名 file=文件存放的位置/文件名.dmp tables=(要导出的表)

远程备份
exp 用户名/密码 @IP地址:端口号/数据库名 file=文件存放的位置/文件名.dmp tables=(要导出的表)

imp导入
imp 用户名/密码@数据库名 file=文件存放的位置/文件名.dmp tables=(要导入的表)

导出用户
exp 用户名/密码@数据库名 file=文件存放的位置/文件名.dmp owner=(要导出的用户)

导入用户
imp 用户名/密码@数据库名 file=文件存放的位置/文件名.dmp fromuser=(要导入的用户)

注意:导出和导入有区别,导出是owner,导入是fromuser
导入多个用户时多个用户可以导入一个文件:exp system/orcl@XE file=E:/two.dmp owner=(yy,tt)//yy tt 用户用逗号分隔
导入则需要每个用户分别导入:
imp system/orcl@XE file=E:/two.dmp fromuser=tt touser=tt
imp system/orcl@XE file=E:/two.dmp fromuser=yy touser=yy
同时要注意给用户create session权限,否则导出和导入会失败,建议给dba权限,否则会出很多问题

将orcl整个数据库导出,生成dmp文件
exp 用户名/密码@数据库名 file=文件存放的位置/文件名.dmp full=y //full导出整个数据库 y代表yes

将生成dmp文件,导入orcl整个数据库中
imp yy/yy@orcl file=E:/lvling.dmp full=y ignore=y // ignore忽略创建错误
因为有的表已经存在,然后它就报错,对该表就不进行导入

可以在PL/SQL Developer 中对数据进行备份与还原

导入sql文件可用文本编辑器查看,通用性比较好,适合小数据量导入导出。尤其注意的是表中不能有大字段(blob,clob,long),如果有,会提示不能导出

tools ->export user objects 选择选项,导出.sql文件。导出的是表结构
tools ->export tables ->SQL Inserts 导出.sql文件。导出表中的数据
tools->import tables->SQL Inserts 导入(表结构).sql文件。
tools->import tables->SQL Inserts 导入(表中的数据).sql文件
注意:在导入的时候有可能提示只有DBA才能导入DBA导出的数据

MyEclipse连接Oracle

jdbc方式连接Oracle

package oraleLJ;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class LianJie {
	public static void main(String[] args) {
		Connection conn = null;
		try {
			// 加载驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");//加载的驱动无论用哪个版本的驱动jar包都是固定的驱动名字
			// 创建连接
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracl", "DengLu", "y123456");
			//"[连接方式jdbc]:[连接的数据库]:[thin/oci]:@[server ip]:[数据库端口号]:[数据库名字]","[用户名]","[密码]"
			Statement st = conn.createStatement();
			System.out.println("连接成功!!");
			// 查询
			String sql = "select * from gz";
			ResultSet rs = st.executeQuery(sql);
			while (rs.next()) {
				int gh = rs.getInt("gh");
				int sal = rs.getInt("sal");
				String name = rs.getString("name");
				System.out.println(name + " " + gh + " " + sal);

			}

		} catch (Exception e) {

			e.printStackTrace();
		} finally {
			if (conn != null) {
				try {
					conn.close();// 关闭连接
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

两种连接模式
thin模式与oci模式在功能上并无区别,thin是四类驱动,oci是二类驱动,oci模式连接需要安装Oracle客户端,oci的速度会快一些,但是使用比较麻烦,所以thin更好用一些

修改、添加、删除

package oraleLJ;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class a {
public static void main(String[] args) {
	Connection conn=null;
	try {
		Class.forName("oracle.jdbc.driver.OracleDriver");
		conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracl","DengLu","y123456");
		Statement st=conn.createStatement();
		String sql="insert into gz values('王二',60000,66666)";
		int count=st.executeUpdate(sql);//添加、修改、删除,返回受影响的行数
		System.out.println(count);
	} catch (Exception e) {
		
		e.printStackTrace();
	}finally {
		if (conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				
				e.printStackTrace();
			}
		}
	}
}
}

sql注入

在输入密码的时候输入’ ’ or 1=1–,后面的and password就被注释掉了

防止sql注入

package oraleLJ;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class a {
	public static void main(String[] args) {
		Connection conn = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracl", "DengLu", "y123456");
			// 防止sql注入,仅在查询中使用即可
			String sql = "select * from gz where name=? and gh=?";
			PreparedStatement st = conn.prepareStatement(sql);
			st.setString(1, "黎明");
			st.setInt(2, 14785);
			ResultSet rs = st.executeQuery();
			while (rs.next()) {
				System.out.println(rs.getString(1) + "  " + rs.getInt(2) + "  " + rs.getInt(3));
			}
			Statement sta = conn.createStatement();
			String sql1 = "update gz set sal=(select sal+500 from gz where name='黎明')where name='黎明'";
			int count = sta.executeUpdate(sql1);// 添加、修改、删除,返回受影响的行数
			System.out.println(count);
		} catch (Exception e) {

			e.printStackTrace();
		} finally {
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {

					e.printStackTrace();
				}
			}
		}
	}
}

项目规范的添加方法

新建一个java项目,然后新建一个包,在包上右键新建一个Folder,通常有四种vo(实体类)、ui(页面)、Tools(数据库连接)、dao(对数据库增删改查的方法)

在这里插入图片描述
注意千万不要忘记导数据库驱动包

数据库连接Tools

package yuangong.Tools;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Lian {
	// 连接数据库
	public static Connection getConnection() throws ClassNotFoundException, SQLException {
		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracl", "DengLu", "y123456");
		System.out.println(conn);
		return conn;
	}
}

实体类vo

package yuangong.vo;

import java.util.Date;

//实体类
public class yuangong {

	private String name;
	private int sal;
	private int gh;
	private Date birthday;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getSal() {
		return sal;
	}

	public void setSal(int sal) {
		this.sal = sal;
	}

	public int getGh() {
		return gh;
	}

	public void setGh(int gh) {
		this.gh = gh;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

}

页面ui

package yuangong.ui;

import yuangong.Tools.DateTools;
import yuangong.dao.YuanGongDao;
import yuangong.vo.yuangong;

public class Test {

	public void addyuangong(){
		

		String name="李红雷";
		String sal="5400";
		String gh="12995";
		String birthday="1999-12-12";
		
		yuangong yg=new yuangong();
		yg.setName(name);
		yg.setGh(Integer.parseInt(gh));
		yg.setSal(Integer.parseInt(sal));
		yg.setBirthday(DateTools.stringOfDate(birthday));
		
		YuanGongDao dao=new YuanGongDao();
		try {
			dao.addYuanGong(yg);
			System.out.println("添加成功");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("网站正在建设中,请稍后......");
		} 
	}
	public static void main(String[] args){
		new Test().addyuangong();
	}
}

数据库方法dao

package yuangong.dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Date;

import yuangong.Tools.Lian;
import yuangong.vo.yuangong;

public class YuanGongDao {

	public void addYuanGong(yuangong ygs) throws ClassNotFoundException, SQLException {
		
		Connection conn=Lian.getConnection();
		Statement st=conn.createStatement();
		String sql="insert into csh values("+"'"+ygs.getName()+"',"+ygs.getGh()+","+ygs.getSal()+",to_date('"+new Date(ygs.getBirthday().getTime())+"','yyyy-MM-DD'"+"))";
		st.executeUpdate(sql);
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值