首页 > 其他分享 >JDBC记录

JDBC记录

时间:2023-07-20 21:14:00浏览次数:48  
标签:JDBC java String 记录 对象 Connection sql conn

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);
    }
}

标签:JDBC,java,String,记录,对象,Connection,sql,conn
From: https://www.cnblogs.com/persistencejunjie/p/17569657.html

相关文章

  • CTFer成长记录——Misc专题·隐写+栅栏密码
    一、题目链接https://ctf.show/challenges#%E8%B0%9C%E4%B9%8B%E6%A0%85%E6%A0%8F-3849二、解法步骤  下载附件,发现是两张的图片,并且文件提示找不同,  那么我们先把它们丢掉010里面去看看,搜下flag,没结果;然后利用010自带的文件比较  发现标红的地方正好符合ctfshow{}的f......
  • 使用 Python 对相似索引元素上的记录进行分组
    源码下载在Python中,可以使用pandas和numpy等库对类似索引元素上的记录进行分组,这些库提供了多个函数来执行分组。基于相似索引元素的记录分组用于数据分析和操作。在本文中,我们将了解并实现各种方法对相似索引元素上的记录进行分组。方法一:使用熊猫分组()Pandas是一个强......
  • 7.20 做题记录
    由于剪切板被误删了,所以搬运比较合适的题解。[ARC150F]ConstantSumSubsequenceSolution总结:判定条件严格时,考虑扩充条件利用单调性和分治结构减小状态数CF1523GTryBookingSolution总结:区间不交可以考虑分治CF1464FMyBeautifulMadnessSolution总结:集合到......
  • 踩坑记录,axios post方法请求参数出现在地址栏的问题
    某天使用axios做post请求接口突然不好使了,总是调不通,并且参数都是出现在访问地址后,如图: 找了半天,原来是调用api的时候,参数使用错误:由于post 请求接收params参数和data参数,这里是cv上面get请求的方法,只修改method为post,下面的params忘记改成data了!,导致axios拿到params后直接......
  • 多个会话同时执行命令history记录不全的解决方案
    基本认识linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到\~/.bash\_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的。问题场景那么问题来了,假若之前history命令记录为c0,用户先打开了shell终端a,执行了一部分命令c1,又打开了一......
  • hfss学习记录3
    1 基于ADS的TDR仿真https://community.keysight.com/thread/19212,更多内容可以参考安捷伦官网。有几篇不错的文章,有空可以再看看。。另外,ads还可以根据s参数直接得出tdr,这样hfss的s参数就能导出到ads里看了。基于ADS的TDR与TDT仿真_ADS_信号完整性_射频微波_天线布局_寄生......
  • 【软考中级】记录一下我的软件设计师备考
    备考初衷距离上次备考PMP已经过去接近3年了,期间因为工作的关系(其实就是没这个心思)没时间去准备专业技术的相关学习,导致下决定的时候才意识到已经快3年没有正儿八经的学习了,真是生于忧患死于安乐啊,总是想着工作上欠缺的知识可以通过度娘查一查,也不影响项目进度,时间久了也就没那个......
  • 230720 做题记录 // 费用流练习
    A.订货http://222.180.160.110:1024/contest/3820/problem/1这个带继承关系的模型很熟悉,想到了猪那一题。所以我们试着仿照这个方式来建图。题目提到了单位费用,这简直就是直接把边的费用拍你脸上嘲讽。我们拉一个大源点,朝每个月连一条容量为无穷大、费用为购买单位费用的边......
  • 反射记录
    Java反射是一种机制,可以在运行时检查、调用和实例化类,无需在编译时确定类的名字。使用反射可以动态地获取类的信息,并在运行时操作类的属性、方法和构造函数。反射常用的方法名及作用介绍如下:1.`getClass()`:获取对象的Class对象,即获取对象所属的类的信息。2.`getMethods()`:获取公......
  • 2023 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛)记录
    RC-u1亚运奖牌榜思路略代码点击查看代码#include<bits/stdc++.h>#definerep(i,x,y)for(inti=x;i<=y;++i)usingnamespacestd;#defineintlonglonginta[30][30];signedmain(){ intn; cin>>n; while(n--){ intx,c; cin>>x>>c; a[x]......