【Mark学Java】JDBC编程

JDBC概念

JDBCJava DataBase Connectivity的缩写,即Java程序访问数据库的标准接口。JDBC是由Sun公司开发的操作所有关系型数据库的规则(接口)。数据库厂商实现这套接口,提供数据库驱动jar包
JDBC接口
访问某个具体数据库时,只需引入特定的JDBC驱动,就可通过JDBC接口访问。这样保证了,一套Java代码,可以访问不同数据库。

快速入门

1.下载并导入jar包
下载地址:下载jar包
复制下载好的驱动jar包到项目libs目录下,邮件libs选择Add As Library
或者直接添加Maven依赖

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connnector-java</artifactId>
   <version>5.1.47</version>
   <scope>runtime</scope>
</dependency>

2.注册驱动

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

3.获取数据库连接对象 Connection

Connection conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","password");

4.定义sql

String sql="update account set balance=500 where id=1";

5.获取执行sql语句的对象Statement

Statement stmt=conn.createStatement(sql);

6.执行sql,接受返回结果

int count=stmt.executeUpdate(sql);

7.处理结果

System.out.println(count);

8.释放资源

stmt.close();
conn.close():

DriverManager

驱动管理对象-功能1:注册驱动
DriverManager存在静态方法registerDriver(Driver driver)用来注册。通常情况下,通过class.forName(“com.mysql.jdbc.Driver”)注册驱动,注册时首先将com.mysql.jdbc.Driver加载如内存,com.mysql.jdbc.Driver类中存在如下的静态代码块用来注册驱动。
在这里插入图片描述
注意:在mysql5版本之后,无需注册驱动。mysql可以自动注册驱动
功能2-获取数据库连接

static Connection getConnection(String url,Stirng user,String password)
#url  指定连接的路径
       jdbc:mysql://ip地址:端口号/数据库名称
       如果连接的是本机mysql服务器(端口号3306)上述路径可以简写为
       jdbc:///数据库名称
#user 用户名
#password 密码

Connection

数据库连接对象–功能1:获取执行sql的对象

Statement createStatement()
PreparedStatement prepareStatement(String sql)

功能2:管理事务

//开启事务(参数为false时开启事务)
setAutoCommit(boolean atuoCommit)
//提交事务
commit()
//回滚事务
rollback()

Statement

执行sql的对象:用于执行静态SQL语句并返回其生成的结果的对象。
功能1:执行sql

//可以执行任意的sql
boolean execute(String sql)
//执行DML(insert,update,delete)语句,DDL(create,alter,drop)语句
int executeUpdate(String sql)
#返回值:影响的行数
//执行DQL(select)语句
ResultSet executeQuery(String sql)

ResultSet

结果集对象

next() //游标向下移动一行,判断当前行是否是最后一行(是否有数据),如果是,则返回false,如果不是则返回true。相当于迭代器的hasnext()next()结合体
getXXX()(参数)//int getInt(),String getString()
参数(1int,代表列的编号,从1开始(2)String 代表列名称

注意:使用步骤(1)游标向下移动一行(2)判断是否有数据(3)获取数据

preparedStatement

*执行sql的对象 *表示预编译的SQL语句的对象(动态SQL)
sql注入问题在拼接sql时,有一些sql的特殊关键字参与字符串拼接,会造成安全性问题。
select * from user where username=‘a’ and password =‘a’ or ‘a’=‘a’
解决方法:使用preparedstatement对象
参数使用?作为占位符。

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = scanner.nextLine();
        System.out.println("请输入密码");
        String password = scanner.nextLine();
        boolean flag = new Demo06().login(username, password);
        if (flag==true){
            System.out.println("登录成功" );
        }else{
            System.out.println("登录失败");
        }
    }
    /*
    * 登录方法
    * */
    public boolean login(String username,String password){
        if (username==null||password==null){
            return false;
        }
        Connection conn=null;
        PreparedStatement preparedStatement=null;
        ResultSet rs=null;
        try {
            conn = JDBCUtils.getConnection();
            //定义sql,参数使用?作为占位符
            String sql="select * from user where username=? and password=?";
            //获取执行sql的对象(传入sql对象)
            preparedStatement = conn.prepareStatement(sql);
            //给?赋值
            preparedStatement.setString(1,username);
            preparedStatement.setString(2,password);
            //执行查询,不需要传递sql
            rs = preparedStatement.executeQuery();

            return rs.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(rs,preparedStatement,conn);
        }
        return false;
    }

增加记录

public static void main(String[] args){
    Connection connection=null;
    Statement statement=null;
    try{
    //1.注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2.定义sql
    String sql="insert into table1 values(null,'赵敏',15,70,null,null)"
    //3.获取connection对象
    connection=DriverManager.getConnection("jdbc:mysql:///student","root","root")
   //4.获取sql执行对象
    statement=connection.creatStatement();
    //5.执行sql
    int count=statement.executeUpadte(sql);
    //6.处理结果
    if(count>0){
      System.out.println("添加成功")}else{
      System.out.println("添加失败")}
    }catch(ClassNotFoundException e){
      e.printStackTrace();
    }catch(SQLException e){
      e.printStackTrace();
    }finally{
     //7.释放资源
     if(statement!=null){
     try{
       statement.close();
       }catch(SQLException e){
        e.printStackTrace();
       }
     }
     if(connection!=null){
     try{
       connection.close();
       }catch(SQLException e){
        e.printStackTrace();
       }
     }
    }
}

修改记录

    public static void main(String[] args) throws Exception {
        //1.导入驱动jar包
        //2.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //3.获取数据库连接对象
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "921100");
        //4.定义sql语句
        String sql="update student set score=90 where id=1";
        //5.获取执行sql的对象 Statement
        Statement statement = connection.createStatement();
        //6.执行sql
        int count = statement.executeUpdate(sql);
        //7.处理结果
        System.out.println(count);
        //8.释放资源
        statement.close();
        connection.close();
    }

查询记录

    public static void main(String[] args){
        Connection connection=null;
        Statement  statement=null;
        ResultSet resultSet=null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2,定义sql
            String sql="select * from student";
            //3.获取connection对象l
            connection = DriverManager.getConnection("jdbc:mysql:///student","root","921100");
            //4.获取sql执行对象
            statement = connection.createStatement();
            //5.执行sql
            resultSet = statement.executeQuery(sql);
            //6.光标向下移动一行
            while( resultSet.next()) {
                //7.获取数据
                int age = resultSet.getInt("age");
                String name = resultSet.getString("name");
                System.out.println(name + "--------" + age);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            //7,释放资源
            if (resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (statement!=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }

    }

JDBC控制事务

事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这个步骤要么同时成功,要么同时失败
在执行sql之前开启事务

setAutoCommit(boolean autoCommit) //调用该方法设置参数为false,即开启事务

当所有sql都执行完提交事务

commit()

在catch代码块中回滚事务

catch()
发布了10 篇原创文章 · 获赞 7 · 访问量 225

猜你喜欢

转载自blog.csdn.net/MARK19960120/article/details/105525764