欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2018蓝旭后端培训之JDBC

程序员文章站 2022-05-03 09:02:11
...

前言:在学习jdbc之前推荐大家再次学学常用的SQL语句,熟悉java API文档的查看

一.什么是JDBC

jdbc即Java Database Conection,java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。JDBC是用于在Java语言编程中与数据库连接的API

2018蓝旭后端培训之JDBC

二.运用jdbc能干什么?

  • 连接到数据库

  • 创建SQL或MySQL语句

  • 在数据库中执行SQL或MySQL查询

  • 查看和修改结果记录

三.解析jdbc提供的API(重点)

1.开发过程中常用的类和接口

Connection接口:与特定数据库的链接,通常使用的方法有:

(1)close():立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放

(2)createStatement() : 创建一个 Statement 对象来将 SQL 语句发送到数据库。

(3)prepareStatement(String sql):创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。

PreparedStatement接口表示预编译的 SQL 语句的对象。SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。通常使用的方法有:

(1)execute():在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。返回值是Boolean类型。

(2)executeQuery():在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。

(3)executeUpdate(): 在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERTUPDATE 或 DELETE 语句,该方法返回值是影响的行数。

(4)setBoolean(int parameterIndex, boolean x):将指定参数设置为给定 Java boolean 值。

(5)setString(int parameterIndex, String x):将指定参数设置为给定String值

(6)setInt(int parameterIndex, String x):将制定参数设置为给定int值

(7)setDate(int parameterIndex,Date x):使用运行应用程序的虚拟机的默认时区将指定参数设置为给定 java.sql.Date 值。

ResultSet接口:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。常用的方法有:

(1)absolute(int row):将光标移动到此 ResultSet 对象的给定行编号。

(2)afterLast(): 将光标移动到此 ResultSet 对象的末尾,正好位于最后一行之后

(3)beforeFirst(): 将光标移动到此 ResultSet 对象的开头,正好位于第一行之前。

(4)close():立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。

(5)deleteRow():  从此 ResultSet 对象和底层数据库中删除当前行。

(6)first():  将光标移动到此 ResultSet 对象的第一行。

(7)next():将光标从当前位置向前移一行。在这里需要注意的是光标的初始位置是在第一行的前面,而不指向第一行

  注:由于该接口中的常用方法较多,也比较重要具体可参见java API文档

DriverManager类:管理一组 JDBC 驱动程序的基本服务。常用方法有:

getConnection(String url, String user, String password) 
          试图建立到给定数据库 URL 的连接。

Statement接口:用于执行静态 SQL 语句并返回它所生成结果的对象。它是PreparedStatement接口的父接口。

四.实例程序

package com.bluemsun.dao;

import com.bluemsun.entity.User;

import java.sql.*;

/**
 * Created by mafx on 2018/6/2.
 */
public class userDao {
    private final static String DRIVER = "com.mysql.jdbc.Driver";
    private final static String URL = "jdbc:mysql://localhost:3306/test1.0";
    private final static String USERNAME = "root";
    private final static String PASSWORD = "root";
    public int insertUser(User user){
        String sql="INSERT INTO users (username,pwd,email)VALUES (?,?,?)";
        int isSucceed=0;
        Connection conn=null;
        PreparedStatement ps=null;
       try {
           conn=getConnection();
           ps=conn.prepareStatement(sql);//将SQL语句发送到数据库
           ps.setString(1,user.getUsername());
           ps.setString(2,user.getPwd());
           ps.setString(3,user.getEmail());
           isSucceed=ps.executeUpdate();//执行SQL语句,返回影响的行数
       }catch (Exception ex){
           ex.printStackTrace();
       }finally{
           try {
               conn.close();
               ps.close();
           }catch (Exception ex){
               ex.printStackTrace();
           }
       }
       return isSucceed;
   }
   public User selectUser(User user){
        String sql="SELECT username,pwd,email FROM users WHERE username='"+user.getUsername()+"' and pwd='"+user.getPwd()+"'";
        Connection conn;
        Statement st=null;
        ResultSet rs=null;
        conn=getConnection();
        User tempUser;
        try {
            st = conn.createStatement();
            rs=st.executeQuery(sql);//执行sql语句,返回查询的结果集
            rs.first();//将指真指向表的第一行
            tempUser=new User();
            tempUser.setUsername(rs.getString(1));
            tempUser.setPwd(rs.getString(2));
            tempUser.setEmail(rs.getString(3));
        }catch (Exception ex){
            //ex.printStackTrace();
            tempUser=null;
        }finally {
            try {
                rs.close();
                st.close();
                conn.close();//关闭数据库连接
            }catch (Exception ex){
                ex.printStackTrace();
            }
        }
        return tempUser;
   }
   public Connection getConnection(){
       Connection conn=null;
       try {
           Class.forName(DRIVER);//加载驱动
           conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//获取与数据库的连接
       }catch (Exception ex){
           ex.printStackTrace();
       }
       return conn;
   }
   /**今天的代码***/
   public void test(){
        String sql="select user_id,username,pwd,email from users";
        Connection conn=null;
        conn=getConnection();//获取数据库连接
        try {
            PreparedStatement st = conn.prepareStatement(sql);//向数据库传送SQL语句
            ResultSet rs=st.executeQuery();//执行SQL语句
            while(rs.next()){//遍历rs中的数据
                System.out.print("ID号:"+rs.getInt(1)+//因为id是int类型所以用getInt()
                                 "用户名:" +rs.getString(2)+
                                "密码:"+rs.getString(3)+
                                "email:"+rs.getString(4));
                 System.out.println();
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
    public static  void main(String[] args){
        new userDao().test();
    }
}

注意点:

(1)在使用jdbc时一定要记得由里到外关闭资源

(2)使用jdbc时会抛出许多异常记得捕获

(3)jdbc是最基础的数据库连接组件,在以后我们还会讲数据库连接池、dbutils等性能更好,使用更方便的组件。但目前希望大家主要掌握好基础的jdbc.

java API文档:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

五.训练作业

建立一个数据库实现简单的登录注册,可以用上次的训练代码上进行修改。

 

相关标签: jdbc