zoukankan      html  css  js  c++  java
  • JDBC初步

     public class TestMySqlConnection{
     public static void main(String[] args){
                 Class.forName("com.mysql.jdbc.Driver"); //加载驱动
                  
    //数据库:格式:jdbc:mysql(sqlserver):   //数据库服务器地址:端口(3306为mysql端口,sqlserver 2005为1433);数据库名称
                 String url = "jdbc:mysql://localhost:3306/db_localTest?useUnicode=true&characterEncoding=gbk;";
                 String userName = "root";
                 String userPwd = "root";
                 Connection con = DriverManager.getConnection(url,userName,userPwd);  //获取connection实例
                 String strsql = "Insert into tb_User() values('','','')";  //sql
                 Statement stmt = con.CreateStatement();  //获取Statement实例
                 stmt.excuteUpdate(strsql);  //执行sql语句
                 con.close();
            }
    }

    Class.forName("驱动路径")      //在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),成功加载后,会将Driver类的实例注册到DriverManager类中。

    备注:DriverManager 类中方法都是静态方法,直接调用

    1、getConnection(String url,String user,String password)     获取connection实例 

    备注:关于URL标示[书写形式:协议:子协议:数据源标识

    1.      协议:在JDBC中总是以jdbc开始   
    2.      子协议:是桥连接的驱动程序或是数据库管理系统名称,如mysql或者sqlserver等
    3.      数据源标识:标记找到数据库来源的地址与连接端口

    2、setLoginTimeout()      //获取驱动程序试图登陆到某一数据库可以等待的最长时间,秒为单位

    3、println(String message)        //将一条消息打印到当前JDBC日志流中

    Connection接口:表示与特地数据库连接。要对数据库中对象操作,首先需要获取数据库连接。

           Connection 实例就像是在应用程序与数据库之间开通了一条渠道。

    Statement接口:用于创建向数据库中传递SQL语句的对象,该接口提供了一些方法可以实现对数据库的常用操作。

    Statement分为3中:

    【1】静态执行SQL语句 ,通过Statement实现;

    【2】执行动态SQL语句,通常通过PreparedStatement实例实现,一般采用这种,预编译方式;可以防止SQL注入。

    【3】执行数据库存储过程,通常通过CallableStatement实例实现。 

             PreparedStatement接口:继承与Statement,用于动态的执行SQL语句,通过PreparedStatement执行的SQL语句,将被预编译保存到PreparedStatement实例中,从而可以反复SQL语句。

      执行SQL语句:

    Statement接口提供了3种执行SQL语句的方法:executeQuery(), executeUpdate()  ,execute()   

    1. 【1】ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句   ,返回一个结果集(ResultSet)对象。   
    2. 【2】int executeUpdate(String sqlString):用于执行INSERT、UPDATE或   DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等   
    3. 【3】execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。   

    ResultSet接口:

       类似于临时表(TempTable),暂时存储数据库查询操作说获取的结果集。

    通过ResultSet获取数据的形式主要是:

    while(rs.next())
    {
      String Name = rs.getString("name");
      String Pwd = rs.getString(2);

    } 

    【列的索引是从左往右编号的,并且从1开始】

    加载数据库驱动:Class.forName(String driverName)  ;

                           DriverManager.getConnection()         获取连接对象

    返回值:返回与带有给定字符串名的类或者接口相关联的Class对象。

                forName() 方法参数指定要加载的数据库驱动,加载成功,会将加载的驱动注册给DriverManager,如果失败,会抛出ClassNotFoundException异常。

    关闭JDBC对象

    1、操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:

    1. 【1】关闭记录集   
    2. 【2】关闭声明   
    3. 【3】关闭连接对象   

      1  if(rs != null){   // 关闭记录集statement   

     2         try{   
     3             rs.close() ;   
     4         }catch(SQLException e){   
     5             e.printStackTrace() ;   
     6         }   
     7           }   
     8           if(stmt != null){   // 关闭声明   
     9         try{   
    10             stmt.close() ;   
    11         }catch(SQLException e){   
    12             e.printStackTrace() ;   
    13         }   
    14           }   
    15           if(conn != null){  // 关闭连接connection对象   
    16          try{   
    17             conn.close() ;   
    18          }catch(SQLException e){   
    19             e.printStackTrace() ;   
    20      }   
    21  }  

    加载Mysql数据库驱动:

    1 try{
    2   Class.forName("com.mysql.jdbc.Driver");
    3 }catch(Exception e){
    4    e.printStackTrace();
    5 }

    使用PreparedStatement接口中的excuteUpdate()向Mysql中添加数据

    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://localhost:3306/db_database";
    String userName = "root";
    String userPwd = "root";
    Connection mycon = DriverManager.getConnection(url,userName,userPwd);
    String sql = "Insert into tb_User(username,userPwd,sex,age) values(?,?,?,?)";
    PreparedStatement ps = con.PreparedStatement(sql);
    ps.setString(1,"李四");  //给占位符?赋值  从1开始
    ps.setString(2,"aaa");
    ps.setString(3,"男");
    ps.setInt(4,23);
    ps.excuteUpdate();
    con.close()

    获得查询结果集:

     1 Class.forName("com.mysql.jdbc.Driver");
     2 String url = "jdbc:mysql://localhost:3306/db_database";
     3 String userName = "root";
     4 String userPwd = "root";
     5
     6 Connection con = DriverManager.getConnection(url,userName,userPwd);
     7 Statement stmt = con.CreateStatement();
     8 String sql = "Select * from tb_User";
     9 ResultSet rs = stmt.exuteQuery(sql);
    10 int id,age;
    11 String username,userPwd,sex;
    12 System.out.println("id	 用户名	 性别	 年龄");
    13 while(rs.next()){
    14      id = rs.getInt("id");
    15      username = rs.getString(2);
    16  .
    17  .
    18  .
    19 }

    更改数据库中数据:

     1 public static void main(String[] args){
     2 try{
     3   Class.forName("com.mysql.jdbc.Driver");
     4 }catch(Exception e){
     5    e.printStackTrace();
     6  }
     7 String url = "jdbc:mysql://localhost:3306/db_database";
     8 String userName = "root";
     9 String userPwd = "root";
    10 String sql = "update tb_users set age = 20 where id = 1";
    11 Connection con = DriverManager.getConnection(url,userName,userPwd);
    12 Statement stmt = con.CreateStatement();
    13     stmt.executeUpdate(sql);
    14     System.out.println("修改成功!");
    15 con.close();
    16 }

    使用PreparedStatement 接口中的excuteUpdate方法修改数据库中tb_User

    public static void main(String[] args){
    try{
      Class.forName("com.mysql.jdbc.Driver");
    }catch(Exception e){
      e.printStackTrace();
    }
    String url = "jdbc:mysql://localhost:3306/db_database";
    String userName = "root";
    String userPwd = "root";
    String sql = "update tb_User set username=? where sex = ?";
    Connection con = DriverManager.getConnection(url,userName,userPwd);
    PreparedStatement ps = con.PreparedStatement(sql);
    ps.setString(1,"admin");
    ps.setString(2,"女");
    int count = ps.executeUpdate();
    System.out.println("修改成功!");
    con.close();
    }

    模糊查询:

     1 //模糊查询
     2 public class Test02{
     3 public static void main(String[] args){
     4   Class.forName("driverName");
     5   String url = "jdbc:mysql://localhost:3306;DatabaseName=tb_User";
     6   String username = "root";
     7   String userPwd = "root";
     8   Connection con = DriverManager.getConnection(url,username,userPwd);
     9   Statement stmt = con.CreateStatement();
    10   String sql = "Select * from tb_User where username like '%李%'";
    11   ResultSet rs = stmt.excuteQuery(sql);
    12   int id,age;
    13   String userName,userPwd;sex;
    14   System.out.println("编号	 用户名	 性别	 年龄");
    15 while(rs.next())
    16  {
    17   id = rs.getInt("id");
    18   userName = rs.getString(2);
    19   userPwd = rs.getString("password");
    20   sex = rs.getString(4);
    21   age = rs.getInt("age");
    22   System.out.println(id+"	"+userName+"	"+sex+"	"+age);
    23  }
    24  }
    25 }

    JDBC调用存储过程(有输入参数IN没有输出参数OUT):

     1 public class TestProcedure01{
     2 public static void main(STrng[] args){
     3   System.out.println("------------调用无参数的存储过程------");
     4   Connection con = null;
     5   CallableStatement callstmt = null;
     6 try
     7  {
     8    Class.forName(ProcessProc.DB_Driver);
     9    con = DriverManager.getConnection(DB_Url,DB_Name,DB_Pwd);
    10    callstmt = con.prepareCall("{call TEST_MICHAEL_NOOUT(?,?,?,?)}");
    11
    12   callstmt.setString(1,"jdbc");
    13   callstmt.setString(2,"JDBC");
    14   callstmt.setDouble(3,8000.00);
    15   callstmt.setString(4,"http://sjsky.iteye.com");
    16    callstmt.exceute();
    17   System.out.println("-----End------");
    18  }
    19 catch(Exception e)
    20  {
    21    e.printStackTrace(System.out);
    22 }finally{
    23 if (callstmt!=null) {
    24    callstmt.close();
    25  }
    26 if (con!=null) {
    27    con.close();
    28    }
    29      }
    30    }
    31 }
    34 static class ProcessProc{
    35 private final static String DB_Driver = "mysql.jdbc.driver";
    36 private final static String DB_Url = "jdbc:mysql://localhost:3306;Db_User";
    37 private final static String DB_Name = "root";
    38 private final static STring DB_Pwd = "root";
    39 }

    JDBC批处理http://www.cnblogs.com/QQ931697811/p/5044725.html

  • 相关阅读:
    MySQL百万级、千万级数据多表关联SQL语句调优
    不就是SELECT COUNT语句吗,居然有这么多学问
    分布式锁讲解
    Java 中堆和栈的区别
    Java中的回调机制
    在Eclipse上Maven环境配置使用
    项目忽然出现 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法
    HttpServletResponse
    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
    深入浅出java常量池
  • 原文地址:https://www.cnblogs.com/QQ931697811/p/4425201.html
Copyright © 2011-2022 走看看