导航

JDBC记录

Posted on 2023-07-20 20:51  koodu  阅读(1)  评论(0编辑  收藏  举报

JDBC连接配置使用

JDBC:java数据库连接

是一套操作所有关系型数据库的规则(接口)。各个数据库实现该接口,提供驱动jar包;使用JDBC编程,真正执行的代码是驱动jar包中的实现类。

JDBC编程步骤:

1.注册驱动
2.获取连接
3.获取数据库操作对象(专门执行sql语句的对象)
4.执行sql语句
5.处理查询结果集(select时处理)
6.释放资源

JDBC IDEA配置

1.在module同级src下new一个directory(libs),把mysql-connector-java-8.0.28.jar复制粘贴到里面,然后再右键add as library

2.在module右键open module settings;点Libraries;点+号;选择java;选择mysql-connector-java-8.0.28.jar。(目录里找);应用然后ok
简单例子

没有用try catch

public class test {
    public static void main(String[] args) throws Exception{
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接对象
        Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123456");
        //3.获取数据库操作对象
        Statement stmt=conn.createStatement();
        //定义sql语句
        String str="update emp set sal=10000 where ename='ward'";
        //4.执行sql语句
        stmt.executeUpdate(str);
        //释放资源
        stmt.close();
        conn.close();
    }
}
JDBC各个类对象
  1. DriverManager 驱动管理对象

    1.注册驱动   static    void registerDriver(Driver driver):静态代码块
                使用Class.forNmae("...Driver");时加载静态代码块
    2.获取连接   getConnection()
    
  2. Connection:数据库连接对象

    1.获取执行sql的对象Statement   createStatement()
                     PreparedStatement  PreparedStatement(String str);
    2.管理事务   
    开启事务:setAutoCommit(boolean autoCommit);//true自动提交
    
    提交事务:commit()
    回滚事务:rollback()
    
  3. Statement:执行sql的对象

    execute()任意语句
    int   executeUpdate(sql)//执行DML(insert,delete,update)语句 DDL语句
    返回影响的行数 
    
    ResultSet   executeQuery();//执行DQL查询语句   返回结果集对象
    
    ResultSet 取出查询结果
    boolean next();向下移一行  判断当前行是否是最后一行末尾
    get__(字段的数据类型)(参数)  获取行的列数据
    参数:int:列的编号,从1开始
         String  列的字段名
         
         
    ResultSet 遍历结果集 while(x.next()){}
    
    
import java.sql.*;
import java.util.*;
public class JDBCTest01 {
    public static void main(String[] args) {
        //初始化界面
        Map<String,String> useInfo=initUi();//返回用户输入信息;
        //验证输入的用户和密码
        boolean loginSuccess=login(useInfo);
        System.out.println(loginSuccess?"登录成功":"登录失败");

    }

    private static boolean login(Map<String, String> useInfo) {
        Connection conn=null;
        Statement stmt=null;
        ResultSet rs=null;
        boolean flag=false;
        try{
            //注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");//1、注册驱动;
            //获取连接
            conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123456");
            stmt=conn.createStatement();//获取数据库操作对象
            //执行sql;
            //会出现sql注入现象,不安全;
            String sql="select * from emp where ename='"+useInfo.get("useName")+"' and sal='"+useInfo.get("password")+"'";
            rs=stmt.executeQuery(sql);//执行sql;
            if(rs.next())
            {
                flag=true;
            }
        }catch (ClassNotFoundException c){
            c.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(rs!=null)
            {
                try{
                    rs.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
            if(stmt!=null)
            {
                try{
                    stmt.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
            if(conn!=null)
            {
                try{
                    conn.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
        return flag;
    }

    private static Map<String, String> initUi() {//初始化界面
        Scanner s=new Scanner(System.in);
        System.out.print("用户名:");
        String useName=s.nextLine();//读入一行;
        System.out.print("密码:");
        String password=s.nextLine();
        Map<String,String> m=new HashMap<>();//创建Map,放入useName和password;
        m.put("useName",useName);
        m.put("password",password);
        return m;//返回存有useName和password的集合Map;
    }
}
获取src路径下的文件的方式 ClassLoader类加载器

ClassLoader a=类.class.getClassLoader();

URL url=a.getResource("src下的文件路径");

String path=url.getPath();//path为路径

PreparedStatement登陆

预编译sql:参数使用?作为占位符,处理sql注入问题

给?号赋值

对于获取sql对象返回PreparedStatement对象 Connection.prepareStatement(String sql)

给?赋值 setXxx(第几个问号,值)

....where user=? and password=?;

PreparedStatement Connection.prepareStatement(String sql)

PreparedStatement.setString(1,usernasme);//给问号赋值

PreparedStatement.setString(2,password);

ResultSet rs=PreparedStatement.executeQuery();

JDBC管理事务

使用Connection对象管理事务

管理事务
开启事务:setAutoCommit(boolean autoCommit);//true自动提交

提交事务:commit()
回滚事务:rollback()

数据库连接池

先创建多个数据库连接对象放到容器,有连接就使用容器里的连接,使用后放回连接池

实现:获取连接 getConnection() 归还连接: Connection.close()

由产商实现

c3p0
把c3p0-0.9.5.5.jar    mchange-commons-java-0.2.19.jar 导入Mudole
在src下导入c3p0-config.xml

测试:

        //1.创建数据库连接池对象
        DataSource ds=new ComboPooledDataSource();
        //2.获取连接对象
        Connection conn=ds.getConnection();
        System.out.println(conn);
        
        ds.close();//归还连接对象
druid

https://repo1.maven.org/maven2/com/alibaba/druid/1.2.9/ 下载.jar包

导入jar包 src下druid.properties配置文件

  1. 获取数据库连接池对象 DruidDataSourceFactory

    DruidDataSourceFactory.createDataSource(properties); 
    
  2. 获取连接getConnection()

druid.properties配置文件

driverClassName=com.mysql.cj.jdbc.Driver
username=root
url=jdbc:mysql://127.0.0.1:3306/bjpowernode
password=123456
initialSize=5
maxActive=10
maxWait=3000

测试:

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

public class druidDemo {
    public static void main(String[] args) throws Exception{
        Properties pro=new Properties();
        InputStream is=druidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        //获取连接池对象
        DataSource ds= DruidDataSourceFactory.createDataSource(pro);
        //获取连接
        Connection conn=ds.getConnection();
        System.out.println(conn);
    }
}