设为首页 收藏本站
查看: 668|回复: 0

[经验分享] Java40: 数据库四(Oracle)

[复制链接]

尚未签到

发表于 2018-9-8 06:03:37 | 显示全部楼层 |阅读模式
  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  使用con.setAutoCommit(false)
package jdbc;  

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

  
public class OracleDemo12 {
  public static void main(String[] args) throws Exception{
  Connection con =null;
  try{
  con = DBUtils.openConnection();
  con.setAutoCommit(false);
  PreparedStatement stmt = con.prepareStatement("update pay set money = money-500 where id=10");
  int n  = stmt.executeUpdate();
  System.out.println(n+"行"+"id = 10  money -500");
  if (true) {
  throw new Exception("模仿异常");
  }
  PreparedStatement stmt2 = con.prepareStatement("update pay set money = money+500 where id=100");
  stmt2.executeUpdate();
  System.out.println("id = 100 money +500");
  con.commit();
  }catch(Exception e){
  con.rollback();
  e.printStackTrace();
  }
  finally{
  if(con!=null){
  con.close();
  }
  }
  

  }
  
}
package jdbc;  

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

  
public class OracleDemo12 {
  public static void main(String[] args) throws Exception{
  Connection con =null;
  try{
  con = DBUtils.openConnection();
  con.setAutoCommit(false);
  PreparedStatement stmt = con.prepareStatement("update pay set money = money-500 where id=10");
  int n  = stmt.executeUpdate();
  System.out.println(n+"行"+"id = 10  money -500");
  PreparedStatement stmt2 = con.prepareStatement("update pay set money = money+500 where id=100");
  stmt2.executeUpdate();
  System.out.println("id = 100 money +500");
  con.commit();
  }catch(Exception e){
  con.rollback();
  e.printStackTrace();
  }
  finally{
  if(con!=null){
  con.close();
  }
  }
  

  }
  
}
  连接池技术
  别自己写 用开源的
  Oracle
  weblogic
  阿里
  Druid
  Apache Commons
  DBCP
  POOL
  LOGGING
  连接池是一个软件 管理一系列已经建立好的连接 可以节省连接频繁建立的开销,一些牛X的连接池还可以根据当时的用户访问量动态的改变所管理连接的数目
  在应用了连接池以后
  con.close()
  只是将连接 还给连接池,不在是真正的关闭掉了
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;
  

  
import org.apache.commons.dbcp2.BasicDataSource;
  

  
public class DBUtils2 {
  private static String driver;
  private static String url;
  private static String user;
  private static String pass;
  private static BasicDataSource ds;
  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");
  ds = new BasicDataSource();
  ds.setDriverClassName(driver);
  ds.setUrl(url);
  ds.setUsername(user);
  ds.setPassword(pass);
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  public static Connection getConnection() throws Exception{
  return ds.getConnection();
  }
  
}
package jdbc;  

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

  

  
public class OracleDemo13 {
  public static void main(String[] args) throws Exception{
  Connection con = DBUtils2.getConnection();
  String sql = "insert into emp100(id,name) values(?,?)";
  PreparedStatement stmt = con.prepareStatement(sql);
  //批量插入
  for(int i =1;i

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-567096-1-1.html 上篇帖子: MySQL和Oracle行锁比较 下篇帖子: rhel 6.5 安装oracle 11g-Linux一万小时
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表