JDBC的链接及封装

导入 mysql 的jar包

jar包:可以直接拿来用,又不想我们看到源代码

sql语句 一定注意:当update,delete时 一定注意where 条件,一定要写!!!

public static void add() {
            // try catch 捕获异常,try有异常会跳到catch
            Connection con = null;
            try {
                  // 1.选择要连接哪一种数据库---JDBC加载数据库驱动
                  Class.forName("com.mysql.jdbc.Driver");
                  // 2.创建链接(主机名,端口号,用户名,密码)---url包含主机名+端口号+数据库
                  con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yyy", "root", "123456");
                  // 3.选择操作的数据库--此动作在上一步的url中集成
                  // 4.创建命令窗口 写 sql语句
                  PreparedStatement pstmt = con.prepareStatement("insert into zhuce (name,password,sex,id) value(?,?,?,?)");
                  pstmt.setString(1, "8888");
                  pstmt.setString(2, "8888");
                  pstmt.setString(3, "F");
                  pstmt.setString(4, "8888");
                  // 5.运行sql语句 ,查看结果---增删改调用executeUpdate 返回受影响的行数;查询调用 executeQuery
                  // 返回查询结果集
                  int result = pstmt.executeUpdate();
                  System.out.println(result);

            } catch (ClassNotFoundException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            } catch (SQLException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            } finally {
                  try {
                        if (con != null) {
                              con.close();
                        }
                  } catch (SQLException e) {
                        e.printStackTrace();
                  }
            }
      }
public static void main (String[] args){
                  add();
      }

以上是add方法,update和delete方法只是改变了sql语句

update://根据主键查询
PreparedStatement pstmt = con.prepareStatement("update zhuce set sex=?,id=? where name=? and password=?");
pstmt.setString(1, "M");
pstmt.setString(2, "2222");
pstmt.setString(3, "2222");
pstmt.setString(4, "1111");

delete://删除主键
PreparedStatement pstmt = con.prepareStatement("delete from zhuce where name=?and password=?");
pstmt.setString(1, "8888");
pstmt.setString(2, "8888");

JDBC的封装

将1,2步  close  sql语句的输出 进行封装

public class JdbcUtil {
    public static Connection getConnection(){
      Connection con =null;
      try {
            //1.加载驱动
                  Class.forName("com.mysql.jdbc.Driver");
                  //2.创建连接
                  con=DriverManager.getConnection("jdbc:mysql://localhost:3306/yyy", "root", "123456");
            } catch (ClassNotFoundException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            } catch (SQLException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }
      return con;
    }

    public static void close(Connection con){
      try {
            if(con!=null){
                      con.close();
            }
            } catch (SQLException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }
    }

    public static int executeUpdate(String sql,Object[] params){
      Connection con = getConnection();
      int result =0;
      try {
                  PreparedStatement pstmt = con.prepareStatement(sql);
                  if(params!=null){
                      for(int i=0;i<params.length;i++){
                        pstmt.setObject(i+1, params[i]);
                      }
                  }
                  result = pstmt.executeUpdate();
            } catch (SQLException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }finally {
                  close(con);
            }
      return result;
    }
}

JAVABEAN

又叫 bean 等

跟数据库里面的表发生映射

package com.neuedu.bean;

import com.sun.org.apache.xml.internal.security.Init;

public class Student {
    private Integer sid;
    private String sname;
    private Integer age;
    private Integer sex;
    //这四句代码就是javabean
      public Integer getSid() {
            return sid;
      }
      public void setSid(Integer sid) {
            this.sid = sid;
      }
      public String getSname() {
            return sname;
      }
      public void setSname(String sname) {
            this.sname = sname;
      }
      public Integer getAge() {
            return age;
      }
      public void setAge(Integer age) {
            this.age = age;
      }
      public Integer getSex() {
            return sex;
      }
      public void setSex(Integer sex) {
            this.sex = sex;
      }
      public Student(Integer sid, String sname, Integer age, Integer sex) {
            super();
            this.sid = sid;
            this.sname = sname;
            this.age = age;
            this.sex = sex;
      }
      public Student() {
            super();
            // TODO Auto-generated constructor stub
      }
      @Override
      public String toString() {
            return "Student [sid=" + sid + ", sname=" + sname + ", age=" + age + ", sex=" + sex + "]";
      }

}

简化

使用动态数组

//一个方法中只能有一个动态参数

//动态参数必须位于参数列表的最后一个

将之前object[] 改成 动态数组 object...

public static int executeUpdate(String sql,Object... params)

增删改 方法简化

public static int update(Student student){
       return JdbcUtil.executeUpdate("update student set sname=?,age=?,sex=? where sid=?",student.getSname(),student.getAge(),student.getSex(),student.getSid());
      }

public static int  add(Student student) {
       return JdbcUtil.executeUpdate("insert into student (sid,sname,age,sex) values(?,?,?,?)", student.getSid(),student.getSname(),student.getAge(),student.getSex());
      }

public static int  delete(int id){
       return JdbcUtil.executeUpdate("delete from student where sid=?", id);
      }

查询不适合用数组,因为不知道有多少数据;用集合,集合有两种  ArrayList,LinkedList

基于ArrayList(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。

用到 游标 的操作:rs.next() ,判断有没有下一行数据,有的话 游标推到下一行,并返回true ;反之 返回false 。 首先从最上面开始

第一次调用rs.next() 就会调用首行的下一行,也就是第一行数据

public static List<Student> getStudents(){
        Connection con = null;
        List<Student> list = new ArrayList<>();
        try {
             Class.forName("com.mysql.jdbc.Driver");
             con=DriverManager.getConnection("jdbc:mysql://localhost:3306/yyy", "root", "123456");
             PreparedStatement pstmt = con.prepareStatement("select * from student");
             ResultSet rs = pstmt.executeQuery();
             while(rs.next()){
                   Student student=new Student();
                   student.setSid(rs.getInt("sid"));
                   student.setSname(rs.getString("sname"));
                   student.setSname(rs.getString("age"));
                   student.setSname(rs.getString("sex"));
                   list.add(student);
             }
        } catch (ClassNotFoundException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
               e.printStackTrace();
        }finally{
              try {
                    if(con!=null){
                          con.close();
                    }
              } catch (Exception e2) {
                    // TODO: handle exception
               }
        }
        return list;
   }
}

public static void main (String[] args){
    List<Student> students=getStudents();
    System.out.println(students);
}
时间: 2024-11-14 06:21:23

JDBC的链接及封装的相关文章

理解class.forName() ---使用jdbc方式链接数据库时会经常看到这句代码

目录(?)[-] 官方文档 类装载 两种装载方法的区别 不同的类装载器 是否实例化类 在jdbc链接数据库中的应用 资源 原文地址:http://yanwushu.sinaapp.com/class_forname/ 使用jdbc方式链接数据库时会经常看到这句代码:Class.forName(String className).本文将浅显地解读这句代码的含义.看这篇文章之前应该对java的反射机制有所了解,至少是对Class类有一定的了解. 官方文档 初始化参数指定的类,并且返回此类对应的Cla

java JDBC 数据库链接

1.准备环境搭建: myeclipse,sql2005,jdbc. 2.都下载完之后开始进行安装 ,前两个是属于数据库软件,正常安装即可(注意数据库登陆不要使用windows验证) <1> 将JDBC解压缩到任意位置,比如解压到C盘program files下面,并在安装目录里找到sqljdbc.jar文件,得到其路径开始配置环境变量 在环境变量classpath 后面追加 C:\Program Files\Microsoft SQL Server2005 JDBC Driver\sqljdb

浅谈JavaEE中的JDBC模板类的封装实现以及合理的建立项目包结构(一)

从今天开始我们一起来聊下有关,javaEE开发中的一些知识,JavaEE的开发用于企业级的开发,但是现在企业中一般也不会使用JDBC开发,大部分都是使用自己公司开发的一套的框架,但是这些框架的架构一般也是会模仿着有名JavaEE开源三大开发框架SSH(Struts2+Spring+Hibernate)或者现在也很流行的SSM开发框架(Spring+SpringMVC+MyBatis) 来进行深度定制以便于适合自己企业的实际开发需求.有的人曾说既然去公司又是重新学习一套框架,还有必要学习开源的三大

jdbc连接Mysql方法封装

package com.shopping.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DB { static { try { Class.forNam

一天小结 php链接mysql 封装数据库

1:定义常量 define("HOST","127.0.0.1"); define("USER","rooot"); // 数据库用户 define("PWD","root"); // 密码 $conn="  "; function get_coon(){ global $conn; $conn = mysql_connect(HOST,USER,PWD) or di

JDBC 对数据库连接的封装

1.BaseDao :抽象基类,其中定义了用于打开连接,得到Statement,执行SQL,关闭资源的基础数据库操作方法. 2.I***Dao :操作指定数据表的接口:定义了操作数据表的抽象方法. 3***DaoImpl:具体工具类.实现I***Dao接口,继承BaseDao抽象类.用BaseDao中的方法实现I***Dao接口中定义的抽象接口. 基类用来提供访问数据库的基础方法,接口中定义了操作一个数据表所用到的方法.而具体类继承了基类就可以访问数据库,实现了接口就可以使用接口来操作数据库.

jtds 通过 jdbc 来链接 SQL Server

之前 , 不使用 maven 管理 jar 包的时候 , 链接 SQL Server 数据库的时候用的都是 sqljdbc4.jar 驱动包 , 刚用 maven 做测试的时候 , 到中央仓库找不到 sqljdbc4.jar 的坐标 , 到网上搜了一下 , 说是可以用 jtds 通过 jdbc 来链接 SQL Server , 实验了一下 , 果真行 ! pom.xml : ... ... ... ... ...    <!-- sql server driver -->    <dep

JDBC连接数据库方法的封装,以及查询数据方法的封装(精华)

主要内容: 一般的连接数据库测试 把连接数据库的方法封装成一个类和测试 一个简单的插入表实例 查询数据实例 封装查询的数据库的信息 封装信息后的查询数据库 一.一般的数据库连接测试 1 public class TestConnection1 { 2 public static void main(String[] args) throws Exception { 3 Class.forName("com.mysql.jdbc.Driver"); 4 String url="

Java JDBC数据库链接

好久没有编写有关数据库应用程序啦,这里回顾一下java JDBC. 1.使用Java JDBC操作数据库一般需要6步: (1)建立JDBC桥接器,加载数据库驱动: (2)连接数据库,获得Connection对象(使用数据库连接地址,用户名,密码): (3)获得数据库Statement对象: (4)执行数据库操作: (5)读取结果: (6)关闭数据库连接: 2.使用Java JDBC操作数据库(mysql)代码: 连接mysql数据库,需要导入mysql数据库jar包,本代码使用mysql-con