码迷,mamicode.com
首页 > 数据库 > 详细

Java38: 数据库四(Oracle)

时间:2016-08-12 21:50:38      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:package   oracle   public   import   数据库   

JDBC 提供访问数据库的标准  就是一系列接口 定义了访问数据库的通用的方法

由各个数据库厂商提供对JDBC的实现


JDBC接口的定义

数据库厂商对jdbc的实现 jar


建立连接-发送sql-执行sql-返回结果-关闭连接


JDBC API(接口)

    java.sql.Connection//封装和数据库的连接

    java.sql.Statement//封装SQL语句的执行

    jave.sql.ResultSet//封装DQL执行的结果

package jdbc;

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

import oracle.jdbc.OracleDriver;

public class OracleDemo01 {
	public static void main(String[] args) throws Exception{
		//装载JDBC的实现
		
		//Driver driver =new OracleDriver() ; 自己写
		//DriverManager.registerDriver(driver);
		
		//把类装载到内存中  静态 快中执行  上面的两条  就不用自己写了
		//该类的静态块中的代码会进行Driver的注册
		Class.forName("oracle.jdbc.OracleDriver");//装载JDBC的实现用这个就好了
		
		//创建连接
		//调用DriverManager 的getConnection方法
		//该方法返回的是数据库厂商对Connection接口的实现类的对象(因为DriverManager已经注册了数据库厂商的Driver信息)
		String url = "jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";
		String user = "scott";
		String pass = "xxxxx";
		Connection con = DriverManager.getConnection(url,user,pass);
														//url 用于表示数据库的连接信息(ip port 数据库名称)  不同的数据库厂商有特定的url的格式和标识
														// DriverManager 会根据这个标识来选取不同的驱动信息
														//如果同时注册了多个数据库厂商的实现
																			//user
																						//password
		//System.out.println(con);
		//执行SQL
		//Connection 的createStatement() 方法用于创建Statement 实现类的对象
		Statement stmt = con.createStatement();
			//只能执行DQL语句
			//返回值是ResultSet
			//把SQl语句传输给数据库执行
		    //获取数据库传输会的结果数据
		    //并把这个数据封装成ResultSet 对象
		ResultSet rs = stmt.executeQuery("select empno,ename name,sal from emp");
		//获取结果
		while(rs.next()){//.next() 游标 向下
			System.out.println(rs.getString("empno")+","+rs.getString("name")+","+rs.getString("sal"));
		}
		rs.close();
		//关闭连接
		
		
	} 
}
package jdbc;

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

public class OracleDemo02 {
	public static void main(String[] args) throws Exception{
		Class.forName("oracle.jdbc.OracleDriver");
		String url = "jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";
		String user="scott";
		String pass="xxxxx";
		Connection con = DriverManager.getConnection(url,user,pass);
		Statement stmt = con.createStatement();
		//执行DML语句 insert delete update
		String sql = "insert into emp2(empno,ename,sal,deptno) values(20,‘lmdtx‘,3000,10)";
		int n = stmt.executeUpdate(sql);//返回整数表示,刚才的语句影响的行数
		System.out.println(n);
		con.close();
	}
}
package jdbc;

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

public class OracleDemo03 {
	public static void main(String[] args) throws Exception{
		Class.forName("oracle.jdbc.OracleDriver");
		String url = "jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";
		String user = "scott";
		String pass = "xxxxx";
		Connection con = DriverManager.getConnection(url,user,pass);
		Statement stmt = con.createStatement();
		String sql = "delete from emp2 where ename=‘lmdtx‘";
		int n = stmt.executeUpdate(sql);
		System.out.println(n);
		con.close();
	}
}



会有被注入的风险

name:a‘ or ‘b‘=‘b
a‘ or ‘b‘=‘b
select ename,empno,sal from emp2 where ename = ‘a‘ or ‘b‘=‘b‘
package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class OracleDemo04 {
	public static void main(String[] args) throws Exception{
		Scanner in = new Scanner(System.in);
		System.out.print("name:");
		String name = in.nextLine();
		System.out.println(name);
		Class.forName("oracle.jdbc.OracleDriver");
		String url = "jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";
		String user = "scott";
		String pass = "xxxxx";
		Connection con = DriverManager.getConnection(url,user,pass);
		Statement stat = con.createStatement();
		String sql ="select ename,empno,sal from emp2 where ename = ‘"+name+"‘";
		System.out.println(sql);
		ResultSet rs = stat.executeQuery(sql);
		while(rs.next()){
			System.out.println(rs.getString(1)+","+rs.getInt(2)+","+rs.getInt(3));
		}
		con.close();
	}
}

PreparedStatement 接口(用这个好)

  提高效率

  防止SQL Injection

    1创建连接

    2PreparedStatement

        PreparedStatement stmt = con.prepareStatement(sql)

    3 stmt.setString(1,"xxx");

     stmt.setInt(1,123);

package jdbc;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class OracleDemo05 {
	public static void main(String[] args)throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("name:");
		String name = br.readLine();
		Class.forName("oracle.jdbc.OracleDriver");
		String url = "jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";
		String user = "scott";
		String pass = "xxxxx";
		Connection con = DriverManager.getConnection(url,user,pass);
		String sql = "select empno,ename,sal from emp2 where ename=?";
		PreparedStatement stmt = con.prepareStatement(sql);
		//将 sql 中 第一个问号的值设置为字符串 
		stmt.setString(1,name);
		ResultSet rs = stmt.executeQuery();
		while(rs.next()){
			System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getInt(3));
		}
		con.close();
		
	}
}

    

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class OracleDemo06 {
	public static void main(String[] args) throws Exception{
		Class.forName("oracle.jdbc.OracleDriver");
		String url ="jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";
		String user ="scott";
		String pass = "xxxxx";
		Connection con = DriverManager.getConnection(url,user,pass);
		String sql ="insert into emp2(empno,ename) values(?,?)";
		PreparedStatement stmt = con.prepareStatement(sql);
		int n =0;
		for(int i =1000;i<3000;i++){
			stmt.setInt(1, i+1);
			stmt.setString(2, "sting"+i);
			n = stmt.executeUpdate();
			System.out.println(i+","+n);
		}
		con.close();
		
	}
}


封装连接工具类

properties 

    文本文件, 存放的是KEY—VALUSE

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@x1.zongxuan.online:1521:xx
user=scott
pass=xxxxx
package jdbc;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

public class DBUtils {
	private static String driver;
	private static String url;
	private static String user;
	private static String pass;
	
	static{
		Properties props = new Properties();
		try {
			props.load(DBUtils.class.getClassLoader().getResourceAsStream("jdbc/db.properties"));
			driver= props.getProperty("driver");
			url= props.getProperty("url");
			user= props.getProperty("user");
			pass= props.getProperty("pass");
			Class.forName(driver);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public static Connection openConnection() throws Exception{
		return DriverManager.getConnection(url,user,pass);
	}
}
package jdbc;

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

public class OracleDemo08 {
	public static void main(String[] args) throws Exception {
		Connection con = DBUtils.openConnection();
		String sql = "select empno,ename,sal from emp2";
		PreparedStatement stmt = con.prepareStatement(sql);
		// 将 sql 中 第一个问号的值设置为字符串

		ResultSet rs = stmt.executeQuery();
		while (rs.next()) {
			System.out.println(rs.getInt(1) + "," + rs.getString(2) + ","
					+ rs.getInt(3));
		}
		con.close();
	}
}


日期

package jdbc;

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

public class Oracledemo09 {
	public static void main(String[] args) throws Exception{
		Connection con = DBUtils.openConnection();
		String sql ="insert into emp2(empno,ename,hiredate)"
				+ "values(?,?,?)";
		PreparedStatement stmt =con.prepareStatement(sql);
		stmt.setInt(1, 4000);
		stmt.setString(2,"lmdtx");
		stmt.setDate(3,new Date(System.currentTimeMillis()));
		int n =stmt.executeUpdate();
		System.out.println(n);
		con.close();
	}
}



批处理

    Batch 处理 批量的插入 更新

    stmt.addBatch();

        把刚刚设置好的数据添加批处理缓冲

    stmt

        执行批处理,把缓冲的数据一次传送给数据库执行

    

    缓存的批处理量受到哭护短JVM内存的限制要指定一个合理的批量值才好

package jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;


public class OracleDemo10 {
	public static void main(String[] args) throws Exception{
		Connection con = DBUtils.openConnection();
		String sql = "insert into emp2(empno,ename) values(?,?)";
		PreparedStatement stmt = con.prepareStatement(sql);
		//批量插入
		for(int i =5000;i<=6000;i++){
			stmt.setInt(1, i);
			stmt.setString(2, "M"+i);
			stmt.addBatch();//添加批处理
		}
		stmt.executeBatch();//执行批处理
		con.close();
	}
}
package jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;


public class OracleDemo10 {
	public static void main(String[] args) throws Exception{
		Connection con = DBUtils.openConnection();
		String sql = "insert into emp100(id,name) values(?,?)";
		PreparedStatement stmt = con.prepareStatement(sql);
		//批量插入
		for(int i =1;i<=2000000;i++){
			stmt.setInt(1, i);
			stmt.setString(2, "M"+i);
			stmt.addBatch();//添加批处理
			if(i%20000==0){
				stmt.executeBatch();
			}
		}
		stmt.executeBatch();//执行批处理
		con.close();
	}
}



JDBC的事物操作

    JDBC 中所有的DML会默认提交 在每条DML语句后会默认的加入commit

本文出自 “浪漫的偷笑” 博客,请务必保留此出处http://lmdtx.blog.51cto.com/6942028/1837387

Java38: 数据库四(Oracle)

标签:package   oracle   public   import   数据库   

原文地址:http://lmdtx.blog.51cto.com/6942028/1837387

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!