JDBC的学习

什么是JDBC

JDBC就是Java 连接数据库
因为数据库的厂商很多,每个厂家的数据库都需要与JAVA进行连接,但是JAVA作为大厂不可能去迁就与每个数据库厂商,所以JAVA遍提供了一套和数据库建立连接的规范(接口),让各个厂家实现这个接口,我们把厂商写的实现类称之为“数据库驱动”

JDBC快速入门

  1. 导入数据库的驱动jar包

导入jar包
2. 加载驱动jar包(依赖)

依赖

进行增删改 的操作(DML):

用 statement.executeUpdate(sql);

	public class MyJDBC {
	  public static void main(String[] args) throws Exception {
	3. 获取连接对象
    Class.forName("com.mysql.jdbc.Driver");

	//输入数据库的的相关信息:URL 用户名  密码
    String url= "jdbc:mysql://localhost:3306/program_together_qa";
    String username="root";
    String password="root";

    Connection conn = DriverManager.getConnection(url, username, password);
    4.获取操作对象
    Statement statement = conn.createStatement();
	5.执行SQL语句
    String sql="insert into tb_pl values('7','77')";
	//进行增删改 的操作(DML)
    statement.executeUpdate(sql);
	6.释放资源
    conn.close();
    statement.close();


}

}

进行查询的操作(DQL):

用 statement.execute()

	public class Mydome2 {
public static void main(String[] args) throws Exception {
	
	建立一个list集合来储存对象
	
    ArrayList<User> list = new ArrayList<>();
    
	3. 获取连接对象
	
    Class.forName("com.mysql.jdbc.Driver");
	//输入数据库的的相关信息:URL 用户名  密码
    String url = "jdbc:mysql://localhost:3306/user";
    String username = "root";
    String password = "root";

    Connection conn = DriverManager.getConnection(url, username, password);
	4.获取操作对象
    Statement statement = conn.createStatement();

	5.执行SQL语句
    String sql = "select * from user";

	//进行 查询 的操作(DQL)
    ResultSet resultSet = statement.executeQuery(sql);


    while (resultSet.next()) {

        int user_id = resultSet.getInt(1);
        String user_name = resultSet.getString(2);
        int user_age = resultSet.getInt(3);


        User user = new User(user_id, user_name, user_age);
        list.add(user);


    }
    System.out.println(list);
   
   6.释放资源
   
    conn.close();
    statement.close();
    resultSet.close();


}
}

public class User {
private int user_id;
private String user_name;

private int user_age;

public User() {
}

public User(int user_id, String user_name, int user_age) {
    this.user_id = user_id;
    this.user_name = user_name;
    this.user_age = user_age;
}

public int getUser_id() {
    return user_id;
}

public void setUser_id(int user_id) {
    this.user_id = user_id;
}

public String getUser_name() {
    return user_name;
}

public void setUser_name(String user_name) {
    this.user_name = user_name;
}

public int getUser_age() {
    return user_age;
}

public void setUser_age(int user_age) {
    this.user_age = user_age;
}

@Override
public String toString() {
    return "User{" +
            "user_id=" + user_id +
            ", user_name='" + user_name + '\'' +
            ", user_age=" + user_age +
            '}';
}
}

一个查询数据库进行登陆的小Demo:

public class LoginDemo {

public static void main(String[] args) throws Exception {
		
		//进行用户名密码的输入
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入用户名");
    String username = sc.nextLine().trim();
    System.out.println("请输入密码");
    String password = sc.nextLine().trim();

	//获取连接对象
    Class.forName("com.mysql.jdbc.Driver");
	
	//输入数据库的的相关信息:URL 用户名  密码 + 获取操作对象
	
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user", "root", "root");
		
		//编写sql
		不将具体查询内容放入sql语句中,用?占位
    String sql = "select * from login where username=? and password=?";
		
	//获取预编译操作对象preparedStatement
	
    PreparedStatement preparedStatement = conn.prepareStatement(sql);

	//给SQL中的?赋值
    preparedStatement.setString(1,username);
    preparedStatement.setString(2,password);

	//执行SQL语句
    ResultSet resultSet = preparedStatement.executeQuery();

    boolean b = resultSet.next();

    if (b){

        System.out.println("登陆成功");
    }else {

        System.out.println("登陆失败");

    }


}
}

PreparedStatement:

在这个登陆Demo中,我们使用了一个 PreparedStatement 的东西,它是一个预编译操作对象

PreparedStatement的产生原因:

在一开始对SQL进行操作的时候,是没有PreparedStatement,但是随着技术的发展,老的技术面对精通SQL语言的技术人员没有一点秘密而言,所以诞生了预编译操作对象PreparedStatement,在写SQL的时候用?占位, 然后根据数据类型使用preparedStatement.setString 来给SQL赋值,防止SQL注入

PreparedStatement的使用步骤:

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

  	 //SQL语句中的值 全部用 ? 问号占位
    String sql="SELECT * FROM users WHERE username=? AND PASSWORD=?";
    //获取一个预编译操作对象  PreparedStatement
    PreparedStatement preparedStatement = conn.prepareStatement(sql); //把SQL语句给给这个预编译操作对象
    //下来给问号赋值 参1.问号的顺序,从1开始数 参数2 问号的值
    preparedStatement.setString(1,uname);
    preparedStatement.setString(2,pwd);

    ResultSet resultSet = preparedStatement.executeQuery(); //这里就不要再传入SQL语句

抽取工具类

1.0版本工具类:

public class MyJDBC {
public static void main(String[] args) throws Exception {
    Class.forName("com.mysql.jdbc.Driver");


    String url= "jdbc:mysql://localhost:3306/program_together_qa";
    String username="root";
    String password="root";

    Connection conn = DriverManager.getConnection(url, username, password);

    Statement statement = conn.createStatement();

    String sql="insert into tb_pl values('7','77')";

    statement.executeUpdate(sql);

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


}

}

2.0版本工具类:

在1.0版本的工具类中,只是单纯的将JDBC常用的操作抽取出来,但是里头的配置还是写死的,导致每次更换用户或者数据库的时候需要对代买进行修改,复用性不高,因此使用properties配置文件和Properties流进行升级操作。

	public class JDBCUtils {

//ctrl+alt+F 快速抽取成员变量
private static String url;
private static String username;
private static String password;

private JDBCUtils() {
}

static {
    try {
        Properties properties = new Properties();
        properties.load(new FileReader("src/jdbcProperties.properties"));
        //注册启动
        Class<?> aClass = Class.forName(properties.getProperty("className"));
        url =properties.getProperty("url");
        username =properties.getProperty("username");
        password =properties.getProperty("password");

    } catch (Exception e) {
        e.printStackTrace();
    }
}

//获取连接对象的方法
public static Connection getConnection() throws Exception {

    Connection connection = DriverManager.getConnection(url, username, password);

    return connection;
}

//释放资源的方法
public static void colse(Connection conn, Statement statement, ResultSet resultSet) throws SQLException {
    if (conn != null) {
        conn.close();
    }
    if (statement != null) {
        statement.close();
    }
    if (resultSet != null) {
        resultSet.close();

    }
}

public static void colse(Connection conn, Statement statement) throws SQLException {
    if (conn != null) {
        conn.close();
    }
    if (statement != null) {
        statement.close();
    }

}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值