java连接oracle数据库

package text;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Arrays;
import java.util.Date;
public class OracleConnection{
	
	/***************JDBC常用接口和类******************
	 * DriverManager:驱动管理器获得数据库连接
	 * Connection:数据库连接接口
	 * Statement: 语句接口,用来静态操作SQL语句
	 * PreparedStatement,优先考虑使用的接口,是Statement的子接口,采用预处理方式
	 * CallableStatement: 可以调用存储过程的预定义语句
	 * ResultSet: 结果集,保存数据记录的结果集合
	 * ReseltSetMetaData: 结果集 元数据,如列名称、列类型等
	 * DatebaseMetaData: 数据元数据,如数据库名称、版本等。
	 * 
	 * ******操作流程*********
	 * 1:加载数据库驱动程序
	 * 2:依靠DriverManager类链接数据库
	 * 3:进行数据库的CRUD操作(Statement、PreparedStatement、ResultSet)
	 * 4:关闭数据库连接
	 * */
	
	public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
	
	//第一个参数:指的是数据库的连接地址。标准格式:jdbc:oracle:thin:@IP地址:端口号:数据库的SID名称
	public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
	
	public static final String DBUSER = "scott";//连接用户名
	public static final String PASSWORD = "tiger";//连接密码
	public static void main(String[] args) throws Exception {
		//第一步:加载数据库驱动程序
		Class.forName(DBDRIVER);//向容器中加载驱动连接类
		//第二步:取得数据库连接对象
		Connection conn = DriverManager.getConnection(DBURL,DBUSER,PASSWORD);//Connection只负责数据库的连接使用
		//第三步:进行数据库的数据操作
		System.out.println(conn);
		Statement stmt = conn.createStatement();//创建数据库的操作
		String sql_1 = " update member set name='李四',birthday=sysdate where mid in(1,3,5,7,9)";
		String sql_2 = "insert into member(mid,name,age,birthday,note)values(myseq.nextval,'张三',10,TO_DATE('1989-10-10','yyyy-mm-dd'),'是个人')";
		String sql_3 = "delete from member where mid = 3";
//		int len_1 = stmt.executeUpdate(sql_1);//执行更新,返回更新行数
//		int len_2 = stmt.executeUpdate(sql_2);//执行插入操作,返回插入行数
//		int len_3 = stmt.executeUpdate(sql_3);//执行删除操作,返回删除行数
//		System.out.println("影响的数据行数:"+len_3);
//		System.out.println("-------------------------------------------------");
		
		//查询全部
		//以后不准写*
		String sql_4 = "select mid,name,age,birthday,note from member";
//		ResultSet rs = stmt.executeQuery(sql_4);//数据查询操作
		//知道循环结束条件,但是不知道循环次数,用while循环遍历结果集
//		while(rs.next()){//移动指针判断是否还有数据行
//			int mid  = rs.getInt("mid");
//			String name = rs.getString("name");
//			int age = rs.getInt("age");
//			Date birthday  = rs.getDate("birthday");
//			String note = rs.getString("note");
//			System.out.println("mid="+mid+" name="+name+" age="+age+" birthday="+birthday+" note="+note);
//		}
//		System.out.println("-------------------------------------------------");
		//以上的代码明确写出了要查询的列名称,所以在使用getXXX()方法读取的数据可以不写列名称,直接写序号

		//查询全部
//		while(rs.next()){//移动指针判断是否还有数据行
//			String note = rs.getString(5);//取数据的顺序可以改变,不一定按照顺序来
//			int mid  = rs.getInt(1);
//			String name = rs.getString(2);
//			int age = rs.getInt(3);
//			Date birthday  = rs.getDate(4);
//			System.out.println("mid="+mid+" name="+name+" age="+age+" birthday="+birthday+" note="+note);
//		}
		
		System.out.println("-------------------------------------------------");
		//*******利用PreparedStatement接口***********
		String name = "Mr'Smith";
		int age = 30;
		Date birthday = new Date();//这是java.util.Date
		String note = "是个能活动的人";
		String sql_5 = "insert into member(mid,name,age,birthday,note) values (myseq.nextval,?,?,?,?)";
		PreparedStatement pstmt = conn.prepareStatement(sql_5);//已经预处理了sql
		//用setXXX()方法设置问号内容,没有问号则不用设置内容
		pstmt.setString(1, name);
		pstmt.setInt(2, age);
		pstmt.setDate(3,new java.sql.Date(birthday.getTime()));//该方法使用的是java.sql.Date
		pstmt.setString(4, note);
		System.out.println(pstmt.executeUpdate());//执行更新
		
		//查询全部
		pstmt = conn.prepareStatement(sql_4);
		ResultSet rs = pstmt.executeQuery();
		while(rs.next()){//移动指针判断是否还有数据行
			String note1 = rs.getString(5);//取数据的顺序可以改变,不一定按照顺序来
			int mid1  = rs.getInt(1);
			String name1 = rs.getString(2);
			int age1 = rs.getInt(3);
			Date birthday1  = rs.getDate(4);
			System.out.println("mid="+mid1+" name="+name1+" age="+age1+" birthday="+birthday1+" note="+note1);
		}
		
		System.out.println("----------------------------------");
		
		//限定查询:
		String sql_6 = "select mid,name,age,birthday,note from member where mid=?";
		pstmt = conn.prepareStatement(sql_6);
		pstmt.setInt(1, 100);
		//由于只返回一行,可用if-else代替while循环
		rs = pstmt.executeQuery();
		if(rs.next()){//移动指针判断是否还有数据行
			String note1 = rs.getString(5);//取数据的顺序可以改变,不一定按照顺序来
			int mid1  = rs.getInt(1);
			String name1 = rs.getString(2);
			int age1 = rs.getInt(3);
			Date birthday1  = rs.getDate(4);
			System.out.println("mid="+mid1+" name="+name1+" age="+age1+" birthday="+birthday1+" note="+note1);
		}
		else{
			System.out.println("此数据不存在");
		}
		
		System.out.println("------------------------------");
		//模糊查询:
		String keyWord = "三";//若keyWord = "";表示未设置查询的条件,则为查询全部
		String sql_7 = "select mid,name,age,birthday,note from member where name like ?";//字段不能使用占位符,不能把name这个字段用?来占位
		pstmt = conn.prepareStatement(sql_7);
		pstmt.setString(1, "%"+keyWord+"%");//设置匹配符
		rs = pstmt.executeQuery();
		while(rs.next()){//移动指针判断是否还有数据行
			String note1 = rs.getString(5);//取数据的顺序可以改变,不一定按照顺序来
			int mid1  = rs.getInt(1);
			String name1 = rs.getString(2);
			int age1 = rs.getInt(3);
			Date birthday1  = rs.getDate(4);
			System.out.println("mid="+mid1+" name="+name1+" age="+age1+" birthday="+birthday1+" note="+note1);
		}
		System.out.println("------------------------------");
		//包含 统计函数的查询:
		String sql_8 = "select count(*) from member";
		pstmt = conn.prepareStatement(sql_8);
		rs = pstmt.executeQuery();
		if(rs.next()){
			int count = rs.getInt(1);
			System.out.println(count);
		}
		System.out.println("-----------------------------------");
		//分页查询:
		int currentPage = 3;//这是第几页
		int lineSize = 5;//每一页显示多少行
		String sql_9 = "select * from ( "
			+" select mid,name,age,birthday,note,rownum rn "
			+" from member "
			+" where name like ? and rownum<=?) temp "
			+" where temp.rn>?";
		pstmt = conn.prepareStatement(sql_9);
		pstmt.setString(1, "%"+keyWord+"%");//设置匹配符
		pstmt.setInt(2, currentPage*lineSize);
		pstmt.setInt(3, (currentPage-1)*lineSize);
		rs = pstmt.executeQuery();
		while(rs.next()){//移动指针判断是否还有数据行
			String note1 = rs.getString(5);//取数据的顺序可以改变,不一定按照顺序来
			int mid1  = rs.getInt(1);
			String name1 = rs.getString(2);
			int age1 = rs.getInt(3);
			Date birthday1  = rs.getDate(4);
			System.out.println(" mid= "+mid1+" name= "+name1+" age= "+age1+" birthday= "+birthday1+" note=  "+note1);
		}
		
		System.out.println("--------------------");
		//批处理与事务处理
		//批处理指的是多条语句一起执行
		/*自动提交控制:public void setAutoCommit(boolean autoCommit) throws SQLException
		 *提交:public void commit() throws SQLException 
		 *回滚:public void rowback() throws SQLException   
		 */
		//例子:增加事物控制:
		conn.setAutoCommit(false);//取消事务的自动提交,因为jdbc中事业会自动提交
		try{//这是一整个事物,将可能发生错误的语句放入try语句块中
			stmt.addBatch(sql_1);
			stmt.addBatch(sql_2);
			stmt.addBatch(sql_3);
			stmt.addBatch(sql_2);
			stmt.addBatch(sql_3);
			int result[] = stmt.executeBatch();//执行批处理
			System.out.println(Arrays.toString(result));
			conn.commit();//没有错误则提交整个事务
			System.out.println("事务提成功!");
		}catch(Exception e){
			e.printStackTrace();//打印错误信息
			conn.rollback();
		}
		//最后一步:关闭数据库连接
		conn.close();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值