JDBC编程-----数据库的链接

本文详细介绍了使用JDBC连接数据库并执行增删改查操作的步骤,包括加载驱动、建立连接、执行SQL语句及结果处理等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC编程-----数据库的链接

1、创建一个以JDBC连接数据库的程序,包括如下7个步骤。

(1)加载JDBC驱动程序
Class.forName(“com.mysql.jdbc.Driver”);
或者:Driver driv=new com.mysql.jdbc.Driver();
           DriverManager.registerDriver(driv);

(2)提供JDBC连接的URL
Stringurl="jdbc:mysql://localhost:3306/test";
Stringusername="root";
Stringpassword="1234";

或urll="jdbc:mysql://localhost:3306/test?user=root&password=1234”

(3)创建数据库的连接
Connection con;
con=DriverManager.getConnection(url,username,password);

或con=DriverManager.getConnection(urll);

(4)创建一个Statement
Statement stat=con.createStatement();

(5)执行SQL语句
stat.executeUpdate(sql);//sql是insert、update和delete语句
stat.executeQuery(sql);//sql是select语句
stat.execute(sql);  //多个结果集、多个更新计数或组合语句

(6)处理结果---执行结果可能会出现两种情况

执行更新返回的是本次操作影响到的记录数

执行查询返回的结果是一个ResultSet对象,该对象以0或多条记录的形式包含了查询结果,可以通过隐含的游标(指针)来定位数据,初始化时,游标位于第一条记录前,可以通过next()方法移动到下一条记录。

ResultSet rs=stat.executeQuery(“select …”);

rs.next();//移动游标到第一条记录,如果没有到最后一条记录的后面,方法返回true,否则返回false。

例子:

    while(rs.next()){

      //读取游标所指的记录行数据

      System.out.println(“学号:”+rs.getInt(1));

      System.out.println(“学号:”+rs.getInt(“id”));

}

ResultSet对象rs中有getXXX()方法,可从当前记录行中获取指定列的信息,可通过指定列索引号或列明两种方式指定要读取的列。

(7)关闭JDBC对象
在操作完成以后要把所使用的JDBC对象全部关闭,以释放JDBC资源,关闭的顺序和声明顺序相反。

finally{
   if(rs!=null){
       try {
       rs.close();
       } catch (SQLException e) {
       e.printStackTrace();
       }
   }…
}

 

2.JDBC的链接,完成对数据库的访问,对数据的增、删、改、查

 注:用面向对象的方法

 

第一步:建立表结构 

第二步:创建一个包为 cn.hbsi.bean 的包,然后在此包下创建类,类中定义的是在数据库中建立的列,在此类中把这些列定义为私有的属性,并用getter  setter 方法来初始化,以便于在访问数据库时可以使用私有的属性。

第三步:建立一个工具类,用来封装数据库中必备的连接,其中包括用户名、密码、连接的路径,而且用户名、密码、连接的路径都放在一个配置文件中。(配置文件就是存放键值对的,所以存放的数据是一一对应的)

注:重要的是在第二步,它所包含的是所有要对数据库操作的方法,操作方法一般情况下为boolean类型的,所以要注意及时修改boolean类型的值

 

重点说一下在连接数据库的时候注意的事项--------查询数据库:

第一步:因为要执行和数据库的操作会很多,所以可以把Connection  preparedStatement    ResultSet   这三个类提取出来用私有变量去定义,使用时可以直接调用类的对象,例如:

private Connection conn;

    private PreparedStatement pstmt;//预处理类

  private ResultSet rs; 

第二步:获取连接对象

   conn = JdbcUtil.getConnection();

第三步: 定义SQL语句---------查询的语句

String sql = “insert into studInfo(name,sex,remune,image)values(?,?,?,?)”;

第四步:创建预处理对象

    pstmt = conn.prepareStatement(sql);

第五步:为占位符赋值

    int index = 1;//定义index,是在显示的是?的赋值

    pstmt.setString(index++,entity.getName());//用到的index++可以避免定义固定的,可以自增

    pstmt.setString(index++,entity.getSex());

    pstmt.setString(index++,entity.getResume());

    pstmt.setObject(index++,entity.getImage());

第六步:执行更新

    int i = pstmt.executeUpdate();

第七步:判断

    if(i > 0){

       flag = true;

    }

第八步:释放资源

   JdbcUtil.release(rs, pstmt, conn);

 

实例:

publicboolean insert(StudentInfo entity){

       boolean flag = false;

       try {

          //第二步:获取连接对象

          conn = JdbcUtil.getConnection();

          //第三步:定义SQL语句

          String sql = "insert into studInfo(name,sex,resume,image)values(?,?,?,?)";

          //第四步:创建预处理对象

          pstmt = conn.prepareStatement(sql);

          //第五步:为占位符赋值

          intindex = 1;

          pstmt.setString(index++, entity.getName());

          pstmt.setString(index++, entity.getSex());

          pstmt.setString(index++, entity.getResume());

          pstmt.setObject(index++, entity.getImage());

          //第六步:执行更新

          inti = pstmt.executeUpdate();

          //第七步:判断

          if(i> 0){

             flag = true;

          }

          //第八步:

          JdbcUtil.release(rs,pstmt, conn);

       } catch(SQLException e) {

          // TODOAuto-generated catch block

          e.printStackTrace();

       }

       //必须注意修改返回值

       return flag;

      

    }

//主方法测试

    public static void main(String[] args)throwsFileNotFoundException {

       // TODOAuto-generated method stub

       StudentHandle sh = newStudentHandle();

       StudentInfo entity = newStudentInfo();

       //准配实体bean对象,即是向列表中插入数据,通过面向对象的思想去调用私有成员的getter setter方法

      

       entity.setName("gehref");

       entity.setSex("女");

      entity.setResume("高级工程师");

       //向数据库中添加图片

       entity.setImage(StudentInfo.class.getClassLoader().getResourceAsStream("./image/ai.jpg"));

    sh.insert(entity);

}

注意:在写的时候可能会出现很多问题,比如在复制时么有该数据库名,么有导入数据库,配置文件的位置不对,或是配置文件中的数据不对都很有可能出现

 

在实现其他的操作的时候,和查询的操作大同小异

删除的操作:

   public boolean delete(Student entity) {

    第一步:声明返回结果变量

       boolean flag = false;

 

      try {

          第二步:获取连接对象

             conn = JdbcUtil.getConnection();

          第三步:定义sql语句

             String sql = "delete from student where id=?";

          第四步:根据sql语句创建预处理对象

            pstmt = conn.prepareStatement(sql);

          第五步:为站位符赋值

           int index = 1;

           pstmt.setObject(index++, entity.getId());

          第六步:执行更新

          inti = pstmt.executeUpdate();

          第七步:判断

             if (i > 0) {

                flag = true;

             }

          第八步:释放资源

             JdbcUtil.release(rs, pstmt, conn);

 

      } catch (SQLException e) {

          //TODO Auto-generated catch block

         e.printStackTrace();

      }

 

      /*    *****修改返回变量值 */

      return flag;

   }

 

更新的操作,和插入一样

   public boolean update(Student entity) {

      /* 第一步:声明返回结果变量 */

      boolean flag = false;

 

      try {

          /* 第二步:获取连接对象 */

          conn= JdbcUtil.getConnection();

          /* 第三步:定义sql语句 */

          Stringsql = "update student set name=?,sex=?,resume=?,image=? where id=?";

          /* 第四步:根据sql语句创建预处理对象 */

         pstmt = conn.prepareStatement(sql);

          /* 第五步:为站位符赋值 */

          intindex = 1;

         pstmt.setObject(index++, entity.getName());

         pstmt.setObject(index++, entity.getSex());

         pstmt.setObject(index++, entity.getResume());

          //pstmt.setBinaryStream(parameterIndex, x)

         pstmt.setObject(index++, entity.getImage());

         pstmt.setObject(index++, entity.getId());

          /* 第六步:执行更新 */

          inti = pstmt.executeUpdate();

          /* 第七步:判断 */

          if(i > 0) {

            flag = true;

          }

          /* 第八步:释放资源 */

         JdbcUtil.release(rs, pstmt, conn);

 

      } catch (SQLException e) {

          //TODO Auto-generated catch block

         e.printStackTrace();

      }

 

      /*    *****修改返回变量值 */

      return flag;

   }

显示所有的信息

   public List<Student> findAll() {

      /* 第一步:声明返回结果变量 */

       用到泛型

       List<Student>entities = new ArrayList<Student>();

 

      try {

          /* 第二步:获取连接对象 */

          conn= JdbcUtil.getConnection();

          /* 第三步:定义sql语句 */

         String sql = "select id,name,sex,resume,image from student";

          /* 第四步:根据sql语句创建预处理对象 */

         pstmt = conn.prepareStatement(sql);

          /* 第五步:为站位符赋值 */

 

          /* 第六步:执行查询 */

          rs =pstmt.executeQuery();

          /* 第七步:判断 */

          while(rs.next()) {

            // 每指向一条记录就对应一个崭新的对象 在循环中声明实体bean对象

            数据多,把数据放到一个类里封装

            Student entity = new Student();

            // 为每条记录对应的对象赋值

            entity.setId(rs.getInt("id"));

            entity.setName(rs.getString("name"));

            entity.setSex(rs.getString("sex"));

            entity.setResume(rs.getString("resume"));

            entity.setImage(rs.getBinaryStream("image"));

            // 把每条记录对应的对象添加到集合中进行保存

            entities.add(entity);

          }

          /* 第八步:释放资源 */

         JdbcUtil.release(rs, pstmt, conn);

 

      } catch (SQLException e) {

          //TODO Auto-generated catch block

         e.printStackTrace();

      }

 

      /*    *****修改返回变量值 */

      return entities;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值