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);
}
}