0
点赞
收藏
分享

微信扫一扫

Javaweb-02-jdbc入门实例

北邮郭大宝 2022-03-30 阅读 56
java

JDBC基本概念:

     Java  database  connectivity  java 数据库连接,Java语言操作数据库

jdbc的本质:其实是官方定义的一套操作所有关系型数据库的规则,各个厂商去实现这套规则,提供数据库驱动jar包,规则即接口,我们可以使用这套接口编程,真正执行的代码是jar包中的实现类,

jdbc快速入门

步骤:

  1. 导入驱动jar包
  2. 注册驱动
  3. 获取数据库连接对象
  4. 定义SQL
  5. 获取执行SQL语句的对象,statement
  6. 执行SQL,接受返回结果
  7. 处理结果
  8. 释放资源

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

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


       
//1.导入驱动Java包,右键libs  as...
        //2
,注册驱动
       
Class.forName("com.mysql.jdbc.Driver");
       
//3,获取数据库连接对象
       
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/db2","root","root");
       
//4,定义sql语句
       
String sql="update  account  set salary=500  where  id=1";
       
//5获取执行SQL的对象,statement
       
Statement stme=conn.createStatement();
       
//6.执行sql
       
int count=stme.executeUpdate(sql);
       
//7,处理结果
       
System.out.println(count);
       
//8,释放资源
       
stme.close();
       
conn.close();

SQL注入问题:在拼接SQL的时候,有一些SQL的特殊关键字参与字符串的拼接,会造成安全性的问题。

例如:输入用户随便,输入密码:   a’or  ‘a’=’a

sql;select   *   from     user   where   username=’ssssfd’  and  password=’a’  or  ‘a’=’a’

解决SQL注入的问题:使用preparedStatement对象来解决

预编译的SQL:参数使用?作为占位符

例如:select  *  from  user  where   username=?   and   password  =?;

 PreparedStatement preparedStatement = connection.prepareStatement(sql);
 preparedStatement.setString(1, username);
 preparedStatement.setString(2, password);

-----------------------

jdbc工具类抽取:

JDBCUtils  目的:简化书写

分析:

  1. 注册驱动也抽取
  2. 抽取一个方法获取连接对象

需求:不想传递参数(因为比较麻烦),还要保证工具的通用性

解决:配置文件

jdbc.properties

url=

user=

password=

  1. 抽取一个方法释放资源

  1. db.properties
  2. url=jdbc:mysql://localhost:3306/db2
    user=root
    password=root
    driver=com.mysql.jdbc.Driver

  1. import java.io.FileReader;
    import java.io.IOException;
    import java.net.URL;
    import java.sql.*;
    import java.util.Properties;

    public class JDBCutils {
       
    private static String url;
       
    private static String user;
       
    private static String password;
       
    private static String driver;
       
    //文件的读取,只需要读取一次即可拿到这些值,使用静态代码块
       
    static{


           
    try {
               
    //读取资源文件,获取值
               
    //1.创建properties集合类,加载进内存
               
    Properties  pro=new Properties();
               
    //获取src路径下的文件的方式--ClassLoader
               
    ClassLoader   classLoader=JDBCutils.class.getClassLoader();
               
    URL  res=classLoader.getResource("jdbc.properties");
               
    String  path=res.getPath();
               
    System.out.println(path);

               
    //2.加载文件
               
    //pro.load(new FileReader("src/jdbc.properties"));
               
    pro.load(new FileReader(path));
               
    //3.获取数据,赋值
               
    url=pro.getProperty("url");
               
    user=pro.getProperty("user");
               
    password=pro.getProperty("password");
               
    driver=pro.getProperty("driver");
               
    //4,注册驱动
               
    Class.forName(driver);
            }
    catch (IOException e) {
                e.printStackTrace();
            }
    catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

        }
       
    //jdbc工具类
       
    //获取连接方法

       
    public static Connection getConnection() throws SQLException {
           
    return DriverManager.getConnection(url,user,password);
        }

    //释放资源方法
       
    public static void close(Statement  stmt,Connection  conn){
           
    if(stmt!=null){

                   
    try {
                        stmt.close();
                    }
    catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
           
    if(conn!=null){

               
    try {
                    conn.close();
                }
    catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

       
    public static void close(ResultSet rs, Statement  stmt, Connection  conn){
           
    if(stmt!=null){

               
    if(rs!=null){

                   
    try {
                        rs.close();
                    }
    catch (SQLException e) {
                        e.printStackTrace();
                    }
                }

               
    try {
                    stmt.close();
                }
    catch (SQLException e) {
                    e.printStackTrace();
                }
            }
           
    if(conn!=null){

               
    try {
                    conn.close();
                }
    catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

----------------------

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

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


       
//1.导入驱动Java包,右键libs  as...
        //2
,注册驱动
       
//Class.forName("com.mysql.jdbc.Driver");
        //3,
获取数据库连接对象
      
// Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/db2","root","root");
       
Connection conn=JDBCutils.getConnection();
       
//4,定义sql语句
       
String sql="update  account  set salary=5000  where  id=1";
       
//5获取执行SQL的对象,statement
       
Statement stme=conn.createStatement();
       
//6.执行sql
       
int count=stme.executeUpdate(sql);
       
//7,处理结果
       
System.out.println(count);
       
//8,释放资源
       
stme.close();
       
conn.close();

-------------------------------------

public class jdbcdemo4 {

    public static void main(String[] args) {

       List<emp>  list=new  jdbcdemo4().findall();

        System.out.println(list);

        System.out.println(list.size());

    }

    public List<emp>  findall(){

        Statement stmt = null;

        Connection conn = null;

        ResultSet rs = null;

        List<emp>  list=null;

        try {

           // Class.forName("com.mysql.jdbc.Driver");

           // conn = DriverManager.getConnection("jdbc:mysql:///db2", "root", "root");

            conn=jdbcutils01.getConnection();

            String sql = "select *  from emp";

           stmt = conn.createStatement();

            rs = stmt.executeQuery(sql);

            emp emp=null;

          list=new ArrayList<emp>();

            while(rs.next()){

                int id = rs.getInt("id");

                String name = rs.getString("name");

                String gender = rs.getString("gender");

                int salary = rs.getInt("salary");

                Date date = rs.getDate("join_date");

                int dapt = rs.getInt("dapt_id");

emp =new  emp();

emp.setId(id);

emp.setName(name);

emp.setGender(gender);

emp.setSalary(salary);

emp.setJoin_date(date);

emp.setDapt_id(dapt);

list.add(emp);

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

        finally {

jdbcutils01.closs(rs,stmt,conn);

        }

        return  list;

    }

}

----------------------



 

举报

相关推荐

0 条评论