• JDBC


    一、JDBC概念

    java数据库的连接,(Java Database Connectivity 简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口。

    连接MySQL中的数据库:jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8&useSSL=false";

    二、加载数据库驱动

    //1,加载驱动
    Class.forName("com.mysql.cj.jdbc.Driver");

    如果加载的是SQL server:Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

    三、建立连接

    1)数据库URLURL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库。

    URL的写法为:"jdbc:mysql://localhost:3306/数据库名称?参数名=参数值..."

    常用数据库URL地址的写法:

    • Oracle:jdbc:oracle:thin:@localhost:2521:数据库名称
    • SqlServer:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名称
    • MySQL:jdbc:mysql://localhost:3306/数据库名称

    2)Connection

    jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中的一个最重要的一个对象,客户端与数据库所有交互都是通过Connection对象完成的.

    创建方法:Connection conn = DriverManager.getConnection( URL,User,PassWord );

    常用方法:

    createStatement();创建向数据库发送sql的statement对象

    prepareStatement(sql);创建向数据库发送预编译sql的PrepareStatement对象

    ● prepareCall(sql);创建执行存储过程的callableStatement对象

    ● setAutoCommit(boolean autoCommit);设置事务是否自动提交

     commit();在链接上提交事务

    ● rollback();在此链接上回滚事务

    String url = "jdbc.mysql://localhost:3306/数据库名称";
    String username = "用户名";
    String password = "用户密码";
    Connection conn = null;
    //2,获取与数据库的链接
    conn = DriverManager.getConnection(url,username,password);

    四、执行SQL语句

    1)Statement:jdbc程序中的Statement对象用于向数据库发送SQL语句。

    创建方法:Statement st = conn.createdStatement()

    常用方法:

    ● executeQuery(String sql);用于向数据库发送查询语句

    ● executeUpdate(String sql);用于向数据库发送insert、update或delete语句

    ● execute(String sql);用于向数据库发送任意语句

    ● addBatch(String sql);把多条SQL语句发送到一个批处理中

    ● executeBatch();向数据库发送一批SQL语句执行。

    Statement st = null;
    //3,获取用于向数据库发送SQL语句的Statement
    st = conn.createdStatement();
    //4,向数据库发送SQL
    String sql = "select id,name,password,email,birthday from users
    st.executeQuery();

    2)PreparedStatement:该类是Statement的子类对象

    创建方法:PreparedStatement st = conn.preparedStatement()

    preparedStatement st = null;
    String sql = "select * from user where name=? and password = ?";
    //3,获取用于向数据库发送SQL语句的preparedStatement
    st = conn.preparedStatement(sql);//传入SQL语句,进行预编译
    st.setString(1,username);
    st.setString(2,password);
    //4,向数据库发SQL
    st.executeQuery();//这里不用传入SQL语句了

    3)Statement与PreparedStatement的区别

    相对于Statement对象而言PreparedStatement可以避免SQL注入的问题

    如:String sql = "select * from admin where loginname=' "+loginName+" ' and loginpwd=' "+loginPwd+" ' ";

    在应用中:

    - 》请输入账号:

    333

    - 》请输入密码:

    wer'or'1'='1

    实际上发送:select * from admin where loginname=' 333 ' and loginpwd=' wer'or'1'='1 ' ,登录成功!

    Statement会使数据库频繁编译SQL,可能会造成数据库缓冲区溢出。PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。

    并且PreparedStatement对于SQL中的参数,允许只用占位符的形式进行替换,简化了SQL语句的编写。

    五、获取结果

    jdbc程序中的ResultSet用于代表Sql语句的执行效果。ResultSet封装执行结果时,采用的类似于表格的方式,ResultSet对象维护了一个指向表格数据行的游标、初始的时候,游标在第一行之前调用ResultSet.next()方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

    1)获取行ResultSet提供了对结果集进行滚动的方法

    ● next();移动到下一行

    ● Previous();移动到前一行

    ● absolute(int row);移动到指定行

    ● beforeFirst();移动到ResultSet的最前面

    ● afterLast();移动到ResultSet的最后面

    2)获取值ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法

    ● 获取任意类型的数据:

    getObject(int index);
    getObject(String columnName);

    ● 获取指定类型的数据:

    getString(int index);
    getString(String columnName);
    ResultSet rs = null;
    //4,向数据库发SQL,并获取代表结果集的ResultSet
    String sql = "select id,name,password,email,birthday from users";
    rs = st.executeQuery(sql);
    
    //5,取出结果集的数据
    rs.afterLast();
    rs.previous();
    System.out.println("id=" + rs.getObject("id"));
    System.out.println("name=" + rs.getObject("name"));
    System.out.println("password=" + rs.getObject("password"));
    System.out.println("email=" + rs.getObject("email"));
    System.out.println("birthday=" + rs.getObject("birthday"));
    //或者循环取出所有id
    while(rs.next()){
        String id = rs.getString(1);//1代表数据库中表的列数,id在第一列也可以("id")!!!
        System.out.println("id = "+id);
    }
  • 相关阅读:
    SelectorQuery wx.createSelectorQuery()
    JavaScript获取服务器端时间的方法
    linux ftp 文件修改时间 ModifiedDate 与本地相差 8小时
    申请域名SSL证书-域名验证配置指南
    Python之pygame,从入门到精通(一)
    Anaconda介绍、安装及使用教程
    Git安装及控制台美化
    Redis Desktop Manager的下载及安装
    redis 访问 database
    Redis消息队列
  • 原文地址:https://www.cnblogs.com/Dm920/p/11698639.html
Copyright © 2020-2023  润新知