not in 不是区间而是本身
在选择列中如果有列、表达式、分组函数 那么这些列和表达式必须有一个(1个不够就2个 )出现在group by中 不然报错
子查询中使用排序没有意义 会出错
distinct 可以放在里面去重
创建数据库实例
1、使用向导工具来创建
database configuration assistant
SID 是数据库的ID
默认装载oracle 同级目录的oracledata
2、手工创建数据库(文档)
当我们创建完一个新的数据库实例后在服务中会有两个新的服务创建 这时 你根据实际需要去启动相应的数据库实例
在同一台机器 可以同时启动多个数据库实例 我们在登录或连接的时候 需要指定主机字符串
主机字符串:就数据库实例名
java 连接oracle 有两种方式
1、jdbc直连
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct = DriverManger.getConnection("jdbc.oracle:thin:@127.0.0.1:1521:myoracle","scott","123")
sun公司提供了一套对数据库操作接口/类 放在java.sql 包
interface Connection{
commit();
}
oracle 把接口实现后就打了一个包 微软打3个
启动Listen 才能用jdbc连接
connection
与特定数据库的连接(会话)。
prearedstatement
与特定数据库的连接表示预编译的SQL语句的对象
resultset
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
public static void main(String[] args) {
//定义我们需要的变量
//与特定的数据库的连接
Connection ct = null;
//表示预编译的sql语句的对象
PreparedStatement ps = null;
//表示数据库结果集的数据表 通常通过执行查询数据库的语句生成
ResultSet rs = null;
try {
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//得到连接
ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521","scott","123");//就是个类 还在加载驱动是jvm的任务
//创建 PreparedStatement 接口引用对象
ps = ct.prepareStatement("select * from emp");
System.out.println(ps);
rs = ps.executeQuery();
//循环 输出结果
while(rs.next()) {//指向表头 所以要next 不然就是空的
System.out.println(rs.getString("ename"));
}
} catch (Exception e) {
// TODO: handle exception
}finally {
// 关闭资源还是后创建的先关闭
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rs=null; //最后写上
}
if(ps!=null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ps = null;
}
if(ct!=null) {
try {
ct.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2、jdbc 桥连
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection ct = DriverManager.getConnection("jdbc.odbc:testsp","scott","m123");