代码改变世界

java JDBC

2017-10-14 09:47  晨曦曙光  阅读(425)  评论(0编辑  收藏  举报

1.什么是JDBC?

JDBC全称为java data base connectivity(java 数据连接)连接数据库的桥梁,由 java语言编写的类和接口组成。可以为多种数据库提供统一的访问。

2.jdbc  的安装步骤:

(1)进入mysql 的官网下载java与mysql 的连接器:https://dev.mysql.com/downloads/connector/j/

(2)在eclipse 中创建一个java工程 ,在在这个工程中创建一个文件夹(lib),如图

 

 

(2)解压文件,复制当中的jar文件到lib 文件中

(3)配置jdbc文件

 3.JDBC 在使用中常见的有以下三类:

JDBC-ODBC 桥连接:是SUN 在JDK的开发包中提供的最标准的一套JDBC 操作类库,使用的时候将JDBC-ODB-数据库,中间要经过一个ODBC 的连接,那么就意味着整体的性能将会降低,所以在开发中是绝对不会去使用JDBC-ODBC的连接方式的。

JDBC 连接,使用各个数据库提供商给定的数据库驱动程序,完成JDBC的开发,使用的时候需要在classpath中配置数据库的驱动程序

JDBC 网络连接:主要使用通过网络连接数据库

4.JDBC 的操作步骤

在进行JDBC 操作的时候可以按照以下的步骤完成:

1、加载数据库驱动程序,加载的时候需要将驱动程序配置到classpath之中

2、连接数据库,通过Connection 接口和 DriverManager 类完成

3、操作数据库,通过Statement(声明)、PreparedStatement(事先准备好的声明)、ResultSet(结果集) 三个接口完成

4、关闭数据库,在实际开发中数据库资源非常有限,操作完之后必须关闭

5。数据库连接操作

在JDBC 的操作中,如果要想进行数据库的连接,则必须按照以上的几步完成

1、通过Class.forName()加载数据库的驱动程序

2、通过DriverManager 类进行数据库的连接,连接的时候要输入数据库的连接地址、用户名、密码

3、通过Connection 接口接收连接

package com.j1702.db;

import java.sql.*;  

public class DBUtil {

  private static final String URL="jdbc:mysql://127.0.0.1:3306/jdbc_test";

  private static final String USER="root";

  private static final String PASSWORD="";

  public static void main(String[] args)throws Exception {

//1.加载mysql驱动

  Class.forName("com.mysql.jdbc.Driver");

  //2.获得数据库链接对象conn

  Connection conn=DriverManager.getConnection(URL,USER,PASSWORD);

       //3.创建查询语句

  Statement stmt=conn.createStatement();

  //4.stmt 执行 sql 语句

     ResultSet res =stmt.executeQuery("select * from Student");

    //5.遍历输出结果集

     while (res.next()){

     System.out.println("id:"+res.getInt("id")+",姓名:"+res.getString("name")+",年龄:"+res.getInt("age"));

          }

  }

 

}

6.MVC 三层架构模式

7.java JDBC mvc(三层架构)代码实例:

(1)db层M:DBUtil.java 获取数据库的连接(工具类)

package com.j1702.db;

import java.sql.*;

public class DBUtil {

  private static final String URL="jdbc:mysql://127.0.0.1:3306/jdbc_test";

  private static final String USER="root";

  private static final String PASSWORD="";

  

private static Connection conn = null;

static {

 

try {

// 1.加载mysql驱动

Class.forName("com.mysql.jdbc.Driver");

// 2.获得数据库链接对象conn

setConn(DriverManager.getConnection(URL, USER, PASSWORD));

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

  }

public static Connection getConn() {

return conn;

}

public static void setConn(Connection conn) {

DBUtil.conn = conn;

}

}

 

(2)  模型层M:Student.java 类,和数据库字段相对应

package com.j1702.model;

 

public class Student {

 private Integer id;

 private String  name;

 private Integer age;

 private String  address;

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

 

 

}
View Code

(3)dao层:StudentDao.java 增删改查方法。

package com.j1702.dao;
 import java.sql.*;
import java.util.*;

import com.j1702.db.DBUtil;
import com.j1702.model.Student;


public class StudentDao {
    public static void main(String[] args) throws Exception{
        Student stu =new Student();
        stu.setName("翠花");
        stu.setAge(21); 
        stu.setId(1002); 
        //update(stu);
        //query(stu);
        //add(stu);
///    delete(1005);
        //queryWithId(1004);
        
        
        Map<String,Object> map = new HashMap<String,Object>();
          map.put("key", "name");
        map.put("value","'张全蛋'");
        Map<String,Object> map2 = new HashMap<String,Object>();
        map2.put("key", "age");
        map2.put("value", 25);
        List<Map<String,Object>> li= new ArrayList<Map<String,Object>>();
        li.add(map);
        li.add(map2);
        
        queryWithParam(li);
    }
    
    
   //1.增
    public static void add(Student stu) throws Exception{
        //通过工具类,获取数据库链接对象
        Connection conn= DBUtil.getConn();
        //创建 sql 语句
        String sql = "insert Student (name,age) value (?,?)";
        //创建 预加载 的sql 语句执行对象
        PreparedStatement ptmt=conn.prepareStatement(sql);
        //给名字赋值
        ptmt.setString(1, stu.getName());
        //给年龄赋值
        ptmt.setInt(2, stu.getAge());
        
        
        //执行 sql 语句
        ptmt.execute();
//        if(ptmt.execute()){
//        System.out.println("数据插入到数据库成功");
//        }else{
//            System.out.println("数据插入到数据库失败");
//        }
    }
    //2.删
    public static  void delete(Integer id) throws Exception{
        //通过工具类,获取数据库链接对象
                Connection conn= DBUtil.getConn();
                //创建 sql 语句
                String sql = " delete  from Student where id =?";
                //创建 预加载 的sql 语句执行对象
                PreparedStatement ptmt=conn.prepareStatement(sql);
                //给名字赋值
                ptmt.setInt(1,id);
                
                ptmt.execute();
        
        
    }
    //3.改
    public static void update(Student stu) throws Exception{
        //通过工具类,获取数据库链接对象
        Connection conn= DBUtil.getConn();
        //创建 sql 语句
        String sql = "update Student  set name=?,age=? where id =?";
        //创建 预加载 的sql 语句执行对象
        PreparedStatement ptmt=conn.prepareStatement(sql);
        //给名字赋值
        ptmt.setString(1, stu.getName());
        //给年龄赋值
        ptmt.setInt(2, stu.getAge());
        
        ptmt.setInt(3, stu.getId());
        
        //执行 sql 语句
        ptmt.execute();
        
    }
    //4.查所有
    public static void query(Student stu ) throws Exception{
        //通过工具类,获取数据库链接对象
        Connection conn= DBUtil.getConn();
        //创建 sql 语句
        String sql = "select * from Student";
    //创建 预加载 的sql 语句执行对象
        Statement stmt=conn.createStatement();
    ResultSet rs=stmt.executeQuery(sql);
    
    while(rs.next()){
        System.out.println("id:"+rs.getInt("id")+"\t \tname:"+rs.getString("name")+"\tage"+rs.getInt("age"));
    }

        
    }
    //5.查某个
    public static void queryWithId(Integer id) throws Exception{
        
        Connection conn= DBUtil.getConn();
        //创建 sql 语句
        String sql = "select * from Student  where id=?";
    //创建 预加载 的sql 语句执行对象
        PreparedStatement ptmt= conn.prepareStatement(sql);
        ptmt.setInt(1, id);
    ResultSet rs=ptmt.executeQuery();
    
    while(rs.next()){
        System.out.println("id:"+rs.getInt("id")+"\t \tname:"
    +rs.getString("name")+"\tage:"+rs.getInt("age"));
    }
        
    }
    //6.条件查询
    public static void queryWithParam(List<Map<String,Object>>param) throws Exception{
        
        Connection conn= DBUtil.getConn();
        //创建 sql 语句
        StringBuffer sql = new StringBuffer();
        sql.append("select * from Student where 1=1");
        for (Map<String, Object> map : param) {
            sql.append(" and "+map.get("key")
            +"="+map.get("value"));
        }
        
    //创建 预加载 的sql 语句执行对象
        PreparedStatement ptmt= conn.prepareStatement(sql.toString());
        
    ResultSet rs=ptmt.executeQuery();
    
    while(rs.next()){
        System.out.println("id:"+rs.getInt("id")+"\t \tname:"
    +rs.getString("name")+"\tage:"+rs.getInt("age"));
    }
    
        
    }
    
}
View Code

(4)actich层,控制层

package com.j1702.action;

import com.j1702.dao.StudentDao;
import com.j1702.model.Student;
//这一层是我们的controller 层:他是view和model层的服务员
public class StudentAction {
  //想数据库中插入一条数据
    public static void insert(Student stu) throws Exception{
        StudentDao.add( stu);
    }
    
    //根据传入的id 删除学生
    public static void delete(Integer id) throws Exception{
        StudentDao.delete(id);
    }
 //更新学生信息数据
    public static void update(Student stu) throws Exception{
        StudentDao.update(stu);
    }
    //查找Student
    public static void find(Integer id) throws Exception{
        StudentDao.queryWithId(id);
    }
}
View Code

 (5)view层:TestView.java 终端操作界面层

package com.j1702.view;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

import  com.j1702.dao.*;
import com.j1702.db.DBUtil;
import com.j1702.model.Student;

public class TestView {
    public static void main(String[] args) throws Exception{
    //编程以终端为view 层,实现数据的增、删、改
        /**
         * 请输入你要做的操作:A-添加,D-删除,U更新,F-查询,exit-退出
         * 
         * A 请输入插入的数据 name,age,address 
         * 
         */
        login();
        
    }
    
    public static void login(){
        System.out.println("请输入你要做的操作:A-添加,D-删除,U更新,F-查询,exit-退出");
        Scanner in= new Scanner (System.in);
        String xz=in.next();
          switch(xz){
          case "A" :
              try {
                add();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
             break;
          case "D":
              try {
                delete();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
              break;
          case "U":
              try {
                update();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
              break;
          case "F" :
              find();
              break;
          case "exit":
        exit();
        
          break;
          default :
              System.out.println("没有你输入的选项,请重新选择");
              login();
          
          }
         
    }
    public static void add() throws Exception{
        Student stu=new Student();
        
        System.out.println("请输入插入的数据 name:");
        Scanner cn=new Scanner (System.in);
        String name=cn.next();
        System.out.println("请输入插入的数据 age:");
        Scanner ca=new Scanner (System.in);
        int age=ca.nextInt();
        System.out.println("请输入插入的数据 address :");
        Scanner cd=new Scanner (System.in);
        String address = cd.next();
        
        stu.setName(name);
        stu.setAge(age);
        stu.setAddress(address);
        StudentDao l1 =new StudentDao();
        l1.add(stu);
        System.out.println("数据插入成功!");
        
        System.out.println("请选择:1 继续插入数据, 2.返回上一层");
        Scanner in= new Scanner (System.in);
        int  x2=in.nextInt();
        switch (x2) {
        case 1:
            add();
            break;
        case 2:
            login();
            break;
            default:
                System.out.println("没有你要的选项,请重新输入!");
                
                
        
        }
        
    }
    public static void delete() throws Exception{
        Connection conn= DBUtil.getConn();
        System.out.println("请输入你要删除数据的ID");
        Scanner in=new Scanner (System.in);
        Integer xid=in.nextInt();
        StudentDao l2=new StudentDao();
        l2.delete(xid);
System.out.println("数据删除成功!");
        
        System.out.println("请选择:1 继续继续数据, 2.返回上一层");
        Scanner in1= new Scanner (System.in);
        int  x2=in1.nextInt();
        switch (x2) {
        case 1:
            delete();
            break;
        case 2:
            login();
            break;
            default:
                System.out.println("没有你要的选项,请重新输入!");
        
        }
    }
    public static void update() throws Exception{
        
           Student stu1=new Student();
           System.out.println("请输入修改的数据 ID:");
           Scanner ci=new Scanner (System.in);
            int id=ci.nextInt();
        
        System.out.println("请输入修改的数据 name:");
        Scanner cn1=new Scanner (System.in);
        String name=cn1.next();
        System.out.println("请输入修改的数据 age:");
        Scanner ca1=new Scanner (System.in);
        int age=ca1.nextInt();
        System.out.println("请输入修改的数据 address :");
        Scanner cd1=new Scanner (System.in);
        String address = cd1.next();
        stu1.setId(id);
        stu1.setName(name);
        stu1.setAge(age);
        stu1.setAddress(address);
        StudentDao l3=new StudentDao();
l3.update(stu1);
        
        System.out.println("数据修改成功!");
        System.out.println("请选择:1 继续修改数据, 2.返回上一层");
        Scanner in1= new Scanner (System.in);
        int  x2=in1.nextInt();
        switch (x2) {
        case 1:
            update();
            break;
        case 2:
            login();
            break;
            default:
                System.out.println("没有你要的选项,请重新输入!");
        
        }
    }
    public static void find(){
        System.out.println("请选择:1.查询所有 2.查询某个 3.条件查询");
        Scanner in= new Scanner (System.in);
        
        int  xz3=in.nextInt();
        switch(xz3){
        case 1:
            Student stu=new Student();
            StudentDao st=new StudentDao();
            try {
                st.query(stu);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            cgf();
            break;
        case 2:
            System.out.println("请输入要查询的ID:");
            Scanner cid=new Scanner(System.in);
            Integer id1=cid.nextInt();
            
            try {
                StudentDao st1=new StudentDao();
                st1.queryWithId(id1);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            cgf();
            
            break;
        case 3:
            tiaojian();
            break;
        }

        
    }
    public static void exit(){
        System.out.println("谢谢使用,再见!");
        return;
        
    }
    public static void cgf(){
System.out.println("数据查询成功!");
        
        System.out.println("请选择:1 继续查询数据, 2.返回上一层");
        Scanner in3= new Scanner (System.in);
        int  x3=in3.nextInt();
        switch (x3) {
        case 1:
            find();
            break;
        case 2:
            login();
            break;
            default:
                System.out.println("没有你要的选项,请重新输入!");
        
        }
    }
    public static void cgf1(){
        System.out.println("数据查询成功!");
                
                System.out.println("请选择:1 继续查询数据, 2.返回上一层");
                Scanner in3= new Scanner (System.in);
                int  x3=in3.nextInt();
                switch (x3) {
                case 1:
                    tiaojian();
                    break;
                case 2:
                    login();
                    break;
                    default:
                        System.out.println("没有你要的选项,请重新输入!");
                
                }
            }
    
    public static void tiaojian(){
        System.out.println("请选择要查询的字段:1.id 查询 2.name 查询 3.age 查询 4.address 查询");
        Scanner tjcx=new Scanner(System.in);
        int tx3=tjcx.nextInt();
    switch(tx3){
    case 1:
        System.out.println("请输入要查询的ID:");
        Scanner cid=new Scanner(System.in);
        Integer id1=cid.nextInt();
        
        try {
            StudentDao st1=new StudentDao();
            st1.queryWithId(id1);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        cgf1();
        break;
    case 2:
        System.out.println("请输入你要查询的 name:");
        Scanner cn1=new Scanner(System.in);
        String sname1=cn1.next();
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("key", "name");
        map.put("value",sname1);
        List<Map<String,Object>> li= new ArrayList<Map<String,Object>>();
        li.add(map);
        try {
            StudentDao l4=new StudentDao();
            l4.queryWithParam1(li);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        cgf1();
        break;
    case 3:
        System.out.println("请输入你要查询的 age:");
        Scanner cn2=new Scanner(System.in);
        String sage=cn2.next();
        Map<String,Object> map1 = new HashMap<String,Object>();
        map1.put("key", "age");
        map1.put("value",sage);
        List<Map<String,Object>> li1= new ArrayList<Map<String,Object>>();
        li1.add(map1);
        try {
            StudentDao l4=new StudentDao();
            l4.queryWithParam2(li1);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        cgf1();
        break;
    case 4:
        System.out.println("请输入你要查询的 address:");
        Scanner cn3=new Scanner(System.in);
        String sadd=cn3.next();
        Map<String,Object> map2 = new HashMap<String,Object>();
        map2.put("key", "address");
        map2.put("value",sadd);
        List<Map<String,Object>> li2= new ArrayList<Map<String,Object>>();
        li2.add(map2);
        try {
            StudentDao l4=new StudentDao();
            l4.queryWithParam3(li2);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        cgf1();
        break;
        
    }
    
        
    }
}
View Code