364、Java中級19 -【JDBC - 查詢】 2020.06.28

1、 查詢語句

executeQuery 執行SQL查詢語句

注意: 在取第二列的數據的時候,用的是rs.get(2) ,而不是get(1). 這個是整個Java自帶的api裏唯二的地方,使用基1的,即2就代表第二個。

另一個地方是在PreparedStatement這裏
在這裏插入圖片描述

package jdbc;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class TestJDBC {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 
        try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
                "root", "admin"); Statement s = c.createStatement();) {
 
            String sql = "select * from hero";
 
            // 執行查詢語句,並把結果集返回給ResultSet
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                int id = rs.getInt("id");// 可以使用字段名
                String name = rs.getString(2);// 也可以使用字段的順序
                float hp = rs.getFloat("hp");
                int damage = rs.getInt(4);
                System.out.printf("%d\t%s\t%f\t%d%n", id, name, hp, damage);
            }
            // 不一定要在這裏關閉ReultSet,因爲Statement關閉的時候,會自動關閉ResultSet
            // rs.close();
 
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

2、SQL語句判斷賬號密碼是否正確

  1. 創建一個用戶表,有字段name,password
  2. 插入一條數據
insert into user values(null,'dashen','thisispassword');
  1. SQL語句判斷賬號密碼是否正確

判斷賬號密碼的正確方式是根據賬號和密碼到表中去找數據,如果有數據,就表明密碼正確了,如果沒數據,就表明密碼錯誤。

不恰當的方式 是把uers表的數據全部查到內存中,挨個進行比較。 如果users表裏有100萬條數據呢? 內存都不夠用的。

  • SQL
CREATE TABLE user (
  id int(11) AUTO_INCREMENT,
  name varchar(30) ,
  password varchar(30),
  PRIMARY KEY (id)
) ;
insert into user values(null,'dashen','thisispassword');
  • TestJDBC.java
package jdbc;
   
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
   
public class TestJDBC {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 
        try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
                "root", "admin");
                Statement s = c.createStatement();
                 
                ) {
            String name = "dashen";
            //正確的密碼是:thisispassword
            String password = "thisispassword1";
   
            String sql = "select * from user where name = '" + name +"' and password = '" + password+"'";
              
            // 執行查詢語句,並把結果集返回給ResultSet
            ResultSet rs = s.executeQuery(sql);
              
            if(rs.next())
                System.out.println("賬號密碼正確");
            else
                System.out.println("賬號密碼錯誤");
             
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   
    }
}

3、獲取總數

執行的sql語句爲

select count(*) from hero

然後通過ResultSet獲取出來

在這裏插入圖片描述

package jdbc;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class TestJDBC {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 
        try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
                "root", "admin"); Statement s = c.createStatement();) {
 
            String sql = "select count(*) from hero";
 
            ResultSet rs = s.executeQuery(sql);
            int total = 0;
            while (rs.next()) {
                total = rs.getInt(1);
            }
 
            System.out.println("表Hero中總共有:" + total+" 條數據");
 
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
}

4、練習:分頁查詢

設計一個方法,進行分頁查詢

public static void list(int start, int count)

start 表示開始頁數,count表示一頁顯示的總數
list(0,5) 表示第一頁,一共顯示5條數據
list(10,5) 表示第三頁,一共顯示5條數據

public class Main {
    static ThreadPoolExecutor tpe;
    public static void main(String[] args) {
        quiter(15,25);
    }
    public static void quiter(int d,int dd){
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try(Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
                "root", "admin");
            Statement statement=connection.createStatement();){
            System.out.println("獲取到statement對象"+statement);
            String qureywhere=d+","+dd;
            String sql="select * from hero limit "+qureywhere;
            ResultSet set= statement.executeQuery(sql);
            while (set.next()){
                int id=set.getInt("id");
                String name=set.getString("name");
                float hp=set.getFloat("hp");
                int da=set.getInt("damage");
                System.out.println(id+name+hp+da);
            }
            System.out.println("執行sql語句操作成功");
        }  catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

5、參考鏈接

[01] How2j - JDBC - 查詢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章