2021-09-02

Java中mysql—JDBC的使用详解

一、环境介绍

在mysql中创建一个库shen,并创建user表和插入表的数据。
新建一个Java工程jdbc,并导入数据驱动。
下载:mysql-connector-java-8.0.23.jar

二、详细步骤

1、加载数据库驱动

//1.加载驱动(开发推荐的方式)
Class.forName("com.mysql.jdbc.Driver");

2、建立连接
1、数据库URL
URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

jdbc:mysql:[]//localhost:3306/shen ?参数名:参数值

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

Oracle:jdbc:oracle:thin:@localhost:1521:shen
MySql:jdbc:mysql://localhost:3306/shen

2、Connection
Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,创建方法为:
**

Connection conn = DriverManager.getConnection(url,user,pass);

**

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

3、执行SQL语句

1、Statement
Jdbc程序中的Statement对象用于向数据库发送SQL语句,创建方法为:

             **Statement st = conn.createStatement();**

statement方法

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

2、PreperedStatement
PreperedStatement是Statement的孩子,它的实例对象可以通过调用:

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

比较:相对于Statement对象而言
PreperedStatement可以避免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进行预编译,从而提高数据库的执行效率。
并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

4、获取结果

  • 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

   Connection connection = DriverManager.getConnection
   (url, user, password);
 try {
    
    
            String sql = "select * from work ";
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
    
    
                int id = resultSet.getInt("wid");
                String name = resultSet.getString(2);
                String sex = resultSet.getString(3);
                Date date = resultSet.getDate(4);
                Double salary = resultSet.getDouble(5);
                String address = resultSet.getString(6);
                //注意这里的方法重载可以通过字段也可以通过index
                System.out.println(id + "-" + name + "-" + sex + "-" + date + "-"
                        + salary + "-" + address);
            }
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }

完整代码:


    public static void main(String[] args) throws Exception {
    
    
        Connection con;
        //jdbc驱动
        String driver = "com.mysql.cj.jdbc.Driver";
        //这里我的数据库是cxxt
        String url = "jdbc:mysql://localhost:3306/j11?&useSSL=false&serverTimezone=UTC";
        String user = "root";
        String password = "19990507";

        try {
    
    
            //注册JDBC驱动程序
            Class.forName(driver);
            //建立连接
            con = DriverManager.getConnection(url, user, password);
            if (!con.isClosed()) {
    
    
                System.out.println("数据库连接成功");
            }
            con.close();
        } catch (ClassNotFoundException e) {
    
    
            System.out.println("数据库驱动没有安装");

        } catch (SQLException e) {
    
    
            e.printStackTrace();
            System.out.println("数据库连接失败");
        }

        Connection connection = DriverManager.getConnection(url, user, password);
        // // *添加语句
        // String sql = "insert into work values(6,'张三','男',now(),16500,'武汉')";
        // Statement statement = connection.createStatement();
        // statement.executeUpdate(sql);

            /*更新语句
            String sql = "update student set name = '李四';
            Statement statement = connection.createStatement();
            statement.executeUpdate(sql);*/
            /*删除语句
            String sql = "delete from student";
            Statement statement = connection.createStatement();
            statement.executeUpdate(sql);
            */

        try {
    
    
            String sql = "select * from work ";
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
    
    
                int id = resultSet.getInt("wid");
                String name = resultSet.getString(2);
                String sex = resultSet.getString(3);
                Date date = resultSet.getDate(4);
                Double salary = resultSet.getDouble(5);
                String address = resultSet.getString(6);
                //注意这里的方法重载可以通过字段也可以通过index
                System.out.println(id + "-" + name + "-" + sex + "-" + date + "-"
                        + salary + "-" + address);
            }
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
    }

效果图

转载

https://blog.csdn.net/qq_22172133/article/details/81266048/?ops_request_misc=&request_id=&biz_id=102&utm_term=jdbc%20%E7%9A%84%E6%93%8D%E4%BD%9C&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-81266048.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187

猜你喜欢

转载自blog.csdn.net/m0_45256755/article/details/120064597