Day37

星期五晚上出去玩了,没写到.周六放假一天

Day37

基础知识

DriverManger驱动管理类

registerDriver(Driver对象) : 注册驱动,不推荐使用

getConnection(url,user,pwd) :获取连接

 

Connection连接对象接口

createStatement() : 生成命令对象

preparedStatement(sql) : 生成预编译命令对象

 

Statement命令对象接口

executeUpdate(sql):执行增删改语句,返回受到影响的行数

executeQuery(sql):执行查询语句,返回结果集

execute(sql): 执行任意语句,返回boolean

 

PreparedStatement预编译命令对象接口

executeUpdate(sql):执行增删改语句,返回受到影响的行数

executeQuery(sql):执行查询语句,返回结果集

execute(sql): 执行任意语句,返回boolean

setXX(占位符索引,占位符的值):设置对应索引的占位符的值,类型为xx类型.

setObject(占位符索引,占位符的值):设置对应索引的占位符的值,类型为Object类型.

 

ResultSet结果集对象接口

next() : 下移一行, 返回当前行是否有值

previous() : 上移一行, 返回当前行是否有值

getXX(列索引| 列名 | 别名 ):返回对应列的值,接受类型为XX

getObject(列索引| 列名 | 别名 ):返回对应列的值,接受类型为Object

 

用java连接数据库的步骤

1.加载驱动

2.获取连接

3.执行sql语句

4.获取执行sql命令的对象

5.执行sql语句,返回一个结果集

6.关闭资源

PreparedStatement 和 Statement的区别

关系: PreparedStatement 和 Statement 都属于执行sql语句的命令接口,都提供了一系列执行sql语句的犯法

PreparedStatement继承了 Statement

区别:

  • 1.不再使用+拼接sql语句,减少语法错误,语义性强

  • 2.将模板sql(固定的部分)和参数部分进行分离,提高了维护性

  • 3.有效解决了sql注入问题.

  • 4.大大减少了编译次数,效率较高.

    例如: 10条sql语句,仅仅知识参数不同

    使用Statement , 则需要编译10 次. 执行10次

    使用PreparedStatement ,则只需要编译1 次, 执行10次(预编译了.所以只需要编译一次,就可以不用再编译了.)

从这个角度说明PreparedStatement,它效率高.

使用Statement

package com.sorrymaker.test04;

import com.mysql.jdbc.Driver;
import java.io.FileInputStream;
import java.sql.*;
import java.util.Properties;

public class Test04 {
   public static void main(String[] args) throws Exception {

       Properties info = new Properties();
       info.load(new FileInputStream("src\\jdbc.properties"));
       String user = info.getProperty("user");
       String password = info.getProperty("password");
       String url = info.getProperty("url");
       String driver = info.getProperty("driver");

       //1.加载驱动
       Class.forName(driver);

       //2.获取连接
       Connection connection = DriverManager.getConnection(url, user, password);

       //3.执行增删改查

       String sql = "select id,name,sex,borndate from beauty";

       //获取执行sql的命令对象
       Statement statement = connection.createStatement();

       //执行sql语句,返回一个结果集.
       ResultSet resultSet = statement.executeQuery(sql);

       while (resultSet.next()) {
           int id = resultSet.getInt("id");
           String name = resultSet.getString("name");
           String sex = resultSet.getString("sex");
           Date borndate = resultSet.getDate("borndate");

           System.out.println(id + "\t" + name + "\t" + sex + "\t" + borndate);
      }
  }
}

使用prepareStatement

package com.sorrymaker.test05;

import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.*;
import java.util.Properties;
import java.util.Scanner;
import java.util.Set;

/**
* @author 喜
* 使用PreparedStatement的好处
* 1.不再使用+拼接sql语句,减少语法错误,语义性强
* 2.将模板sql(固定的部分)和参数部分进行分离,提高了维护性
* 3.有效解决了sql注入问题.
* 4.大大减少了编译次数,效率较高.
*
*/
public class TestPrepareStatement {

   //使用PreparedStatement实现登录
//   @Test
//   public void testStatement() throws Exception {
   public static void main(String[] args) throws Exception{
       Scanner input =new Scanner(System.in);
       System.out.print("输入 username:");
       String username = input.next();
       System.out.print("输入 password:");
       String pwd = input.next();

       //-----以下为连接数据库的步骤
       Properties info =new Properties();
       info.load(new FileInputStream("src\\jdbc.properties"));
       String user = info.getProperty("user");
       String password = info.getProperty("password");
       String driver = info.getProperty("driver");
       String url = info.getProperty("url");

       //1.注册驱动
       Class.forName(driver);

       //2.获取连接
       Connection connection = DriverManager.getConnection(url, user, password);

       //3.执行查询
       //3-1.编写sql语句
       String sql ="select count(*) from admin where username=? and password = ?";
       //3-2.获取preparedStatement对象
       PreparedStatement statement = connection.prepareStatement(sql);
       //3-3.设置占位符
       statement.setString(1,username);
       statement.setString(2,pwd);

       //3-4.执行sql命令
       ResultSet resultSet = statement.executeQuery();

       if (resultSet.next()) {
           int count = resultSet.getInt(1);
           System.out.println(count>0?"登录成功":"登录失败");
      }

       resultSet.close();
       statement.close();
       connection.close();
  }
}

 

posted @ 2021-04-25 21:59  独眼龙  阅读(217)  评论(0)    收藏  举报