jdbc

/**
 * jdbc的规范模式
 */
import java.sql.*;

public class learn1 {
 public static void main(String[] args) {
  Connection conn=null;
  Statement st=null;
  ResultSet rs=null;
  //1.注册驱动
  try {
   Class.forName("com.mysql.cj.jdbc.Driver"); 
  }catch(Exception e) {
   e.printStackTrace();
  }
  
/*
   * url:统一资源定位符,(网络中某个资源的绝对路径
   * URL包括哪几个部分:协议,IP,port,资源名
   * eg:https://www.baidu.com/  也可以用 http://182.61.200.7:80/index.html
   * 其中 http:// 表示通信协议  , 182.61.200.7 是百度服务器的ip  , 80 是服务器上软件的端口
   * (IP是计算机的代号,而端口号是这台计算机上某个软件的代号
   * index.html 是服务器上的某个资源名
   * 例如数据库中url: “ jdbc:mysql://127.0.0.1:3306/powernode "
   * jdbc:mysql:// 是指协议,127.0.0.1 或localhost(本机) 指明你连的是哪个机器,3306指明连的是哪个端口,powernode指明连接的是
   */

try {
   //2,获取连接
   String url="jdbc:mysql://localhost:3306/runoob?serverTimezone=GMT";
   String username="root";
   String password="1746996100mao";
   conn = DriverManager.getConnection(url,username,password);
   System.out.println("数据库连接对象:"+conn);  //com.mysql.cj.jdbc.ConnectionImpl@6b57696f

 //3.获取数据库操作对象 (Statement专门执行SQL语句的)
   st = conn.createStatement();
   
   //4.执行SQL
   /*SQL语句分为两种:返回信息的语句->executeQuery()方法(select语句),返回类型为ResultSet
    * 和不返回信息的语句->executeUpdate()方法(update,delete,insert语句),返回类型为int
    * JDBC语句写SQL语句不需要提供分号!!!
    */
String sql = "select * from employee_tbl";  //SQL语句
   rs = st.executeQuery(sql);   //把SQL语句传入
   //或者直接 ResultSet rs = st.executeQuery("select * from employee_tbl");
   System.out.println(rs);
   
   String sql2 = "insert into employee_tbl (id,name,date) values (10,'sherry',NOW())";
   int count = st.executeUpdate(sql2);  //count 表示“影响数据库的记录条数”
   System.out.println(count==1?"保存成功":"保存失败");
   
//5.处理查询结果集
   
  }catch(Exception e) {
   e.printStackTrace();
  }finally {
  //6.释放连接  
  
/**
  ① 为了保证资源一定释放,在finally语句中释放资源
  ②并且遵循从小到大依次关闭,依次对其进行try...catch...(都放在自己单独的异常处理语句中)
  (因为如果放到一个异常处理里面,则如果前面任意一个发生异常,后面的关闭操作就不会再进行,导致后面的资源没有被释放)
  ③且只有不为空的时候关闭才有意义
   */
   try {
    if(rs!=null) {
     rs.close();
    }
}catch(Exception e) {
    e.printStackTrace();
   }
   
   try {
    if(st!=null) {
     st.close();
    }
   }catch(Exception e) {
    e.printStackTrace();
   }

try {
    if(conn!=null) {
     conn.close();
    }
   }catch(Exception e) {
    e.printStackTrace();
   }
   
 }
 }
}
/**
 * 处理查询结果集
 */
import java.sql.*;
public class learn2 {
 public static void main(String[] args) {
  Connection conn = null;
  Statement st = null;
  ResultSet rs = null;
  try {
   //1.注册驱动
   Class.forName("com.mysql.cj.jdbc.Driver");
   //2.建立连接
   conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/runoob?serverTimezone=GMT","root","1746996100mao");
   System.out.println("数据库连接对象:"+conn);  //com.mysql.cj.jdbc.ConnectionImpl@6b57696f
   //3.获取数据库操作对象
   st = conn.createStatement();
   //4.执行SQL语句
   String sql = "select id as a,name,date from employee_tbl";
   rs = st.executeQuery(sql);
   //5.处理查询结果集
   /**
    * 刚开始rs指向第一行,也就是属性那一行
    * rs.next指向数据第一行
    */
   
   /*
   boolean flag1 = rs.next();
   if(flag1) {
    //getString()方法的特点:不管数据库中的类型是什么,都以String的形式取出
    //jdbc的列数是从1开始的
    String id = rs.getString(1); //1表示第一列
    String name = rs.getString(2); //得到该行第二列的值
    String date = rs.getString(3);  //得到该行第3列的值
    System.out.println(id+','+name+','+date);  //得到flag1那一行的前三列的值
   }
   boolean flag2 =rs.next(); //第2行
   if(flag2) {
    String name = rs.getString("name");  //得到第二行,属性名为"name"的那列值
    System.out.println(name);  
   }
   */

//   //遍历得到的数据表
//   while(rs.next()) {  //rs.next为false,即光标已经移到不存在的行数时
//    /*
//    String id = rs.getString(1); //1表示第一列
//    String name = rs.getString(2); //得到该行第二列的值
//    String date = rs.getString(3);  //得到该行第3列的值
//    */
//    //上述直接用列的下标1,2,3,这样不健壮,如下,直接用列名使程序更加健壮
//    //注意下述列名称是指查询结果的列名称,还是查询结果的列名称
//    //答案是:下述列名称是查询结果的列名称,如下述id是查询a,而不是id (原来是id,但在sql语句中id as a改名成了a,所以下述也要用a去查询,而不是用id去查询
//    String num = rs.getString("a"); //1表示第一列
//    String name = rs.getString("name"); //得到该行第二列的值
//    String date = rs.getString("date");  //得到该行第3列的值
//    System.out.println(num+','+name+','+date);  //得到flag1那一行的前三列的值
//   }

   //除了getString(),getInt(),还有getDouble(),用int和double的好处是,可以直接进行数据运算
   boolean flag1 = rs.next();
   double id = rs.getDouble(1);
   System.out.println(id+100);

  }catch(Exception e) {
   e.printStackTrace();
  }finally {
   //6.释放连接
   if(rs != null) {
   try {
     rs.close();
    }catch(Exception e) {
     e.printStackTrace();
    }
   }
   if(st != null) {
    try {
     st.close();
    }catch(Exception e) {
     e.printStackTrace();
    }
   }
   if(conn != null) {
    try {
     conn.close();
    }catch(Exception e) {
     e.printStackTrace();
    }
   }
  }
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值