JDBC语法(常用接口和类)

本文详细介绍了使用Java JDBC进行数据库操作的方法,包括DriverManager、Connection、Statement、PreparedStatement和CallableStatement的使用,以及如何通过预编译SQL语句提高效率。
摘要由CSDN通过智能技术生成

DriverManager:用于管理JDBC驱动的服务类,这个类主要是获取对象

    getConnection(String url,String  user,String pass)//获取URL对应的数据库连接.

Connection代表数据库连接对象,每个Connection代表一个物理连接层的会话,要想访问数据库,必须要建立数据库连接

    createStatement()这个方法返回的是一个Statement对象。

    prepareStatement(String sql)这个方法返回预编译的Statement对象,就是将SQL语句提交到数据库进行预编译。

    prepareCall(String sql)该方法返回的是一个CallableStatement对象,该对象用于调用存储过程。

Statement用于执行SQL语句的工具接口。常用方法如下:

  executeQuery(String sql)该方法用于执行sql语句,并且返回ResultSet对象。

  executeUpdate(String sql)该方法用于sql的DML语句,并且返回受影响的行数

使用:第一种:Statement 对数据库添加数据:

package jdbc3;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Test1 {
    public static void main(String[] args) {
        Connection connection=null;
        Statement statement=null;
        try {//statement的使用
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/mmysql?useUnicode=true&characterEncoding=utf8";
            connection= DriverManager.getConnection(url,"root","root");
            String sql="insert into test values(2,'李四')";//添加数据
            statement=connection.createStatement();//建立数据库连接 Statement
            //执行更新语句,返回一个影响的行数,对行数再加判断。
            System.out.println(statement.executeUpdate(sql)>0?"添加成功":"添加失败");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                statement.close();
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }


    }
}

使用第二种:prepareStatement(sql)提前预编译,预编译的sql语句可以写为?

package jdbc3;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Test2 {
    public static void main(String[] args) {
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/mmysql?useUnicode=true&characterEncoding=utf8";
            connection= DriverManager.getConnection(url,"root","root");
            //如果此时不确定输入什么值,或者是修改什么值,只需要将放入的值设置为?
            String sql="insert into test VALUES (?,?)";
            //提起发送预编译的sql语句
            preparedStatement=connection.prepareStatement(sql);
            //第一个是?的位置,我们写1,就是第一个? 值为3
            preparedStatement.setInt(1,3);
            //2代表第二个?的位置,写2代表sql语句中第二个?值为四儿
            preparedStatement.setString(2,"四儿");
            int flag=preparedStatement.executeUpdate();
            System.out.println(flag);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                preparedStatement.close();
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }


    }
}

第三种方式使用CallableStatement 的prepareCall(sql)语句,这种情况一般sql语句为存储过程,安全性比较高

package jdbc3;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Test3 {
    public static void main(String[] args) {
        Connection connection=null;
        CallableStatement callableStatement=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/mmysql?useUnicode=true&characterEncoding=utf8";
            connection= DriverManager.getConnection(url,"root","root");
            String sql="call adduser(?,?)";//调用了存储过程来进行存储
            callableStatement=connection.prepareCall(sql);
            //1是第一个? 值为5
            callableStatement.setObject(1,5);
            //2代表第二个?  值为来了
            callableStatement.setString(2,"来了");
            int flag=callableStatement.executeUpdate();
            System.out.println(flag);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                callableStatement.close();
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }


    }
}

对于sql语句有?的,因为灵活,所以我们可以针对这种方式写一个万能的赋值语句来进行赋值。

package jdbc3;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Test4 {
    public static void main(String[] args) {
        String sql="call adduser(?,?)";
        System.out.println(sec(sql,6,"fucker"));
    }
    public static int sec(String sql,Object...obj){
        Connection connection=null;
        CallableStatement callableStatement=null;
        int flag=0;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/mmysql?useUnicode=true&characterEncoding=utf8";
            connection= DriverManager.getConnection(url,"root","root");
            callableStatement=connection.prepareCall(sql);
            //for循环 一次添加数组进callablestatement
            for(int i=0;i<obj.length;i++){
                callableStatement.setObject(i+1,obj[i]);
            }
            flag=callableStatement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                callableStatement.close();
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return flag;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值