• java JDBC数据库(mysql)编程


    什么是JDBC
      • JDBC(Java Data Base Connectivity,Java数据库连接)
      • 是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问
      • 它由一组用Java语言编写的类和接口组成

    JDBC访问数据库步骤
      • 1:加载一个Driver驱动

        要通过JDBC与数据库连接,先要加载JDBC驱动Driver,这个要想导入一个mysql-connector-java.jar包;各版本mysql-connector-java.jar包下载地址:http://central.maven.org/maven2/mysql/mysql-connector-java/

      不同的JDK版本可能对应不同的jar包,如果不行可以换一个jar包试一下;具体不同的编辑器导入jar包的方式可能不一样,所以导入包的方式不懂的话可以到网上搜一下;

      java加载mysql数据库Driver驱动的形式:

       5.XXX之前版本: Class.forName("com.mysql.JDBC.Driver");

       6.XXX版本之后的就是    Class.forName("com.mysql.cj.JDBC.Driver")

      • 2:创建数据库连接(Connection)

        与数据库建立连接的方法是调用DriverManager.getConnection(String url, String user, String password )方法

        • Connection conn=null;

        • String url="jdbc:mysql://localhost:3306/login";  // 格式是 "jdbc:mysql://IP地址:端口号/数据库名称"
        • String user=“root";  //用户名
        • String password=“7820170";  //密码
        • conn = DriverManager.getConnection(url, user, password);  //建立连接


      • 3 :创建SQL命令发送器Statement对象

      有三种 Statement对象:

        • Statement:用于执行不带参数的简单SQL语句;(这个对象要直接传一个字符串来操作数据库,虽然可以拼接字符串,但不方便,还有sql注入的危险;)

          String sql="select * from user where id=1";//创建sql语句
          Statement stmt=conn.createStatement();//创建Statement对象
          stmt.execute(sql);//发送sql语句,对于发送还有其他的方法,有不同的功能,后面再讲

        • PreparedStatement(从 Statement 继承):用于执行带或不带参数的预编译SQL语句;(这个对象可以,通过传参数的方式来完成sql语句的编写,比较方便和安全,但这个SQL语句要预编译,对于操作大量SQL语句不合适,如果需要操作大量SQL语句还是使用Statement比较好) 

                String sql="insert into students (name,age,school) values (?,?,?)";//?表示占位符
                PreparedStatement ps = conn.prepareStatement(sql);//因为 PerparedStatement 中的 SQL 语句数据库需要进行预编译和缓存,
    因此要在创建 PerparedStatement 对象时给出 SQL 语句
                ps.setString(1, "hhh");//传参数,从1开始,而不是从0开始
                ps.setString(2, "18");
                ps.setString(3, "广财");
                System.out.println("成功插入一条信息");
                ps.execute();//提交

        • CallableStatement(从PreparedStatement 继承):用于执行数据库存储过程的调用。

          这个暂时不清楚,就不写了
      • 4:通过Statement发送SQL命令并得到结果

            ResultSet     executeQuery(String sql); 执行SQL查询,并返回ResultSet 对象。
          int               executeUpdate(String sql); 可执行增,删,改,返回执行受到影响的行数。
          boolean         execute(String sql); 可执行任何SQL语句,返回一个布尔值,表示是否返回ResultSet 。

      • 5:处理结果(select语句)

        返回的RsultSet如何遍历:

    ResultSet rs=ps.executeQuery();//返回的是一个迭代对象
                while(rs.next()) {//判断是否还有可以迭代的对象
                    System.out.println(rs.getInt(1)+"---"+rs.getString(2)+"---"+rs.getInt(3));//getInt(1)返回第一列的int行的数据,如果数据类型不对会报错当然也可以直接传第一列的名称,比如:getInt("id");
                }

      • 6:关闭数据库资源
        • 作为一种好的编程风格,应在不需要Statement对象和Connection对象时显式地关闭它们。关闭Statement对象和Connection对象的语法形式为:

        • public void close() throws SQLException
        • 用户不必关闭ResultSet。当它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该ResultSet将被自动关闭。
        • 注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为Statement和ResultSet是需要连接是才可以使用的,所以在使用结束之后有可能其他的Statement还需要连接,所以不能先关闭Connection。

            try {
                    rs.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    ps.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
  • 相关阅读:
    Windows 10 Universal App 开发记录
    Windows Phone 8.1 开发会用到的方法
    Android Activity设置全屏
    Android视频录制命令screenrecord
    Android ScrollView中嵌套ListView只显示一行的解决办法
    Android 4.4.4: java.lang.SecurityException: Package com.android.settings does not belong to 1001
    自定义Android spinner样式并添加监听事件
    GSON快速实现内部类
    android的Banner轮播图框架
    Okhttp与Okhttputils的用法及区别
  • 原文地址:https://www.cnblogs.com/zdl2234/p/11275867.html
Copyright © 2020-2023  润新知