JDBC介绍及应用

JDBC:
JDBC,其实就是Java定义的一套和数据库建立连接的规范(接口),那么各家数据库厂商,想要Java去操作各家的数据库,必须实现这套接口,我们把数据库厂商写的这套实现类,称之为数据库驱动。

快速入门:
1.导入数据库的驱动jar包,记得依赖一下
2.加载驱动,通过反射方式

class.forName(com.mysql.jdbc.Driver);

3.获取连接对象

- 方式1:Connection conn=DriverManager.getConnection("jdbc(主协议):mysql(子协议): //localhost(主机名):3306(端口号 )/库名","root","密码");
- 方式2:Connection conn=DriverManager.getConnection("jdbc:mysql:///库名","root","密码");

4.获取操作对象
Statement statement=conn.createStatement();
5.执行SQL语句

String sql="........";

int i=statement.executeUpdate(sql);
//用来执行DML语句 用来对表中数据进行增删改 返回值是影响的行数

ResultSet resultSet=statement.excuteQuery(sql);
resultSet.next(); 
//用来执行DQl语句

 boolean b = statement.execute(sql);
 //用来执行所有的SQL语句 返回:

6.释放资源

conn.close();
statement.close();
resultSet.close();

实例:JDBC 给数据库添加数据

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

public class JDBCtest {
   public static void main(String[] args) throws ClassNotFoundException, SQLException {
       //加载驱动
       Class.forName("com.mysql.jdbc.Driver");

       //获取连接对象
       Connection conn = DriverManager.getConnection("jdbc:mysql:///logindb", "root", "123456");

       //获取操作对象
       Statement statement = conn.createStatement();

       //执行SQl语句
       int i = statement.executeUpdate("insert into test_user values ('王五','123456')");
       if(i>0){
           System.out.println("操作成功");
       }else{
           System.out.println("操作失败");
       }

       //释放资源
       conn.close();
       statement.close();
   }

补充:
结果集对象,是我们执行了查询语句之后返回的一个查询结果对象
ResultSet 对象具有指向其当前数据行的光标。 最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while循环中使用它来迭代结果集。

 while (resultSet.next()){
             //方式1:
            //参数就是数据库中的字段序号 从1开始
            //String username = resultSet.getString(1);
            //int age = resultSet.getInt(2);
            //方式2:
            //通过字段名来获取字段的值
            String username = resultSet.getString("username");
            int age = resultSet.getInt("age");
            //System.out.println(username+"==="+age);
            //我们从数据库中取出了数据,就是为了要使用这些数据,那我们就要对这些数据进行封装
            Student student = new Student(username, age);
            list.add(student);
        }

预编译操作对象
这个操作对象,可以在安全方面防止SQL注入
使用步骤:

  • 1.conn.prepareStatement(sql);
  • 2.sql语句中的字段的值用?问号占位
  • 3.给sql语句中的问号赋值

实例:

import java.sql.*;

public class JDBCTest2 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");

        Connection conn = DriverManager.getConnection("jdbc:mysql:///logindb", "root", "123456");
        //获取一个预编译操作对象  PreparedStatement,SQL语句中的值 全部用 ? 问号占位
        PreparedStatement preparedStatement = conn.prepareStatement("select *from test_user where username=? and password=?");
        //下来给问号赋值 参1.问号的顺序,从1开始数 参数2 问号的值
        preparedStatement.setString(1,"李四");
        preparedStatement.setInt(2,123456);
        //这里就不要再传入SQL语句
        ResultSet resultSet = preparedStatement.executeQuery();
        if (resultSet.next()){
            System.out.println("查询成功");
        }else{
            System.out.println("查询不存在");
        }
    }
}

批处理
插入大量数据时,建议使用批处理来做

public class MyJDBCDemo {
    public static void main(String[] args) throws Exception {
        //模拟数据
        ArrayList<Users> list = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            Users users = new Users("李某某" + i, "12345" + i);
            list.add(users);
        }
        //将上面的数据添加到数据库中的user表

        Connection conn = JDBCUtils.getConnection();
        String sql="insert into users values(?,?)";
        PreparedStatement statement = conn.prepareStatement(sql);
        for (Users u : list) {
            //给问号赋值
            statement.setString(1,u.getUsername());
            statement.setString(2,u.getPassword());
            //statement.executeUpdate();//一条一条往里面插入,效率不高
            statement.addBatch();//添加批处理,先将数据缓存起来
        }

        statement.executeBatch();//执行批处理
        statement.clearBatch();//清空缓存

        //释放资源
        JDBCUtils.close(conn,statement);
    }
}
发布了56 篇原创文章 · 获赞 6 · 访问量 7775

猜你喜欢

转载自blog.csdn.net/ly823260355/article/details/88804131