• JDBC连接数据库及其执行操作


    作者:Alvin
    功能:数据库连接与实现增删改查
    时间:2019年3月4日08点33分
    参考文章:https://www.2cto.com/database/201805/743741.html

    一、总结

    数据库加载分为以下几个步骤

    第一步、加载驱动

    MySQL的加载方式
    Class.forName("com.mysql.jdbc.Driver");
    Oracle的加载方式
    Class.forName("oracle.jdbc.driver.OracleDriver");
    SQLServer
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

    第二步、创建连接

    1、分开写形式如下

    String url = "jdbc:mysql://127.0.0.1:3306/要连接的数据库表名";
    String username = "root";
    String password = "root";
    Connection con = DriverManager.getConnection(url,username,password);

    2、单独写成形式如下

    Connection con=DriverManage.getConnection(url,username,password);

    Connection con=DriverManage.getConnection("jdbc:mysql://127.0.0.1:3306/要连接的数据库表名",username,password);

    3、设置连接时编码方式useUnicode=true&characterEncoding=UTF-8,如

    String URL ="jdbc:mysql://127.0.0.1:3306/studentsuser=root&password=123&useUnicode=true&characterEncoding=UTF-8";
    con = DriverManager.getConnection(URL);

    4、确认是否连接成功

    //如果连接成功打印con不为空
    System.out.println(con);  

    第三步、创建语句执行对象

    Statement stmt=con.createStatement();  

    第四步、得到数据库执行操作结果

    一般情况下有如下几个执行类型

    1、增加数据

    int modifyLinesAdd = stmt.executeUpdate(sql1);//将返回被增加的行数

    2、删除数据

    int modifyLinesDelete=stmt.executUpdate("delete from 表名 where 条件");//将返回发生修改的条数  

    3、修改数据

    int modifyLinesSwitch=stmt.executeUpdate();//将返回发生修改的行数

    4、查询操作

    ResultSet rs=stmt.executQuery("select from 表名");//执行查询,返回的时Set集合

    所以再只有再进行数据库查询的时候使用executeQuery()方法,再增、删、改的时候执行的都是executeUpdate()方法
    还可以向数据库中添加文件下面以图片为例(因为时添加操作所以仍然使用的时executeUpdate()方法)
    添加图片数据源码

    File image = new File("C:/Users/lyp/Pictures/桌面背景/1.jpg"); //添加图片的路径
    ps = con.prepareStatement("INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`,`icon`)"
    + " VALUES (,,,,);"); 
    ps.setInt(1, numbefore+1); 
    ps.setString(2, "兰陵王"); 
    ps.setString(3,"男");
    ps.setInt(4,500); 
    fis = new FileInputStream(image); 
    ps.setBinaryStream(5, (InputStream) fis, (int) (image.length())); 
    //检查是否添加成功
    int s = ps.executeUpdate(); 
    if (s > 0) { 
    System.out.println("Uploaded successfully !"); 
    } else { 
    System.out.println("unsucessfull to upload image."); 
    } 

    查询操作案例

    ResultSet rs.stmt.executeQuery("select from student");
    //处理执行后的结果rs
    rs.next()用于判断下一项是否存在,如果存在,将返回true
    while(rs.next()){
    
    int id=rs.getInt("id");//得到id这一列的数据
    String name=rs.getString("names");//得到姓名
    String gender=rs.getString("gender");//得到性别
    int age=rs.getAge("age");//得到年龄 
    }

    第五步、执行完毕数据库的操作必须依次关闭打开的所有连接

    //关闭rs
    rs.close();
    //关闭stmt
    stmt.close();
    //关闭con
    con.close();

    二、完整案例源码

    //数据库类源码如下
    public class DataBase {
     
        public static void main(String[] args) {
            int numbefore = 0;
            Connection con = null;//链接接口
            Statement stmt = null;//发送SQL语句接口
            ResultSet rs = null;//返回结果集接口
            PreparedStatement ps = null;
            FileInputStream fis;  
            try {
                //加载驱动
                Class.forName("com.mysql.jdbc.Driver");
                //连接方法一
                /*String url = "jdbc:mysql://127.0.0.1:3306/students";//127.0.0.1可以改成localhost,表示本地主机。
                String username = "root";
                String password = "root";
                con = DriverManager.getConnection(url,username,password);*/
                 
                //连接方法二,useUnicode=true&characterEncoding=UTF-8是设置编码方式
                String URL ="jdbc:mysql://127.0.0.1:3306/studentsuser=root&password=123&useUnicode=true&characterEncoding=UTF-8";
                con = DriverManager.getConnection(URL);
                 
                //如果连接成功打印con不为空
                System.out.println(con);
                stmt = con.createStatement();
                //con.close();
                 
                //查询数据库中表的值,并且打印出来
                rs = stmt.executeQuery("select * from  students_1");
                while(rs.next()) { //next()方法控制行数,一行一行读出返回结果集,直到null
                    int id = rs.getInt("id");//获取id这一列的数据
                    String name = rs.getString(2);//获取第二列数据
                    String sex = rs.getString("sex");
                    int age = rs.getInt("age");
                    System.out.println("编号="+id+",姓名="+name+",性别="+sex+",年龄="+age);
                    //计算表中数据的行数
                    numbefore = numbefore + 1;
                }
                 
                //打印出操作数据前的行数
                System.out.println("操作前数据为"+numbefore+"行");
                 
                //添加图片数据
                 File image = new File("C:/Users/lyp/Pictures/桌面背景/1.jpg");  //添加图片的路径
                 ps = con.prepareStatement("INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`,`icon`)"
                        + " VALUES (,,,,);");  
                         ps.setInt(1, numbefore+1);  
                     ps.setString(2, "兰陵王"); 
                     ps.setString(3,"男");
                     ps.setInt(4,500);  
                         fis = new FileInputStream(image);  
                         ps.setBinaryStream(5, (InputStream) fis, (int) (image.length()));  
                         //检查是否添加成功
                         int s = ps.executeUpdate();  
                         if (s > 0) {  
                            System.out.println("Uploaded successfully !");  
                         } else {  
                            System.out.println("unsucessfull to upload image.");  
                         }  
                 
                //添加一行数据
                //使用SQL语句:INSERT INTO `students`.`students_1` (`id`, `name`, `sex`, `age`) VALUES ('1','小七', '女', '10'); 添加数据
                /*String sql1 = "INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`) VALUES ('1','小七', '女', '10');";
                int result1 = stmt.executeUpdate(sql1);
                System.out.println("有"+result1+"行记录被修改");*/
                 
                //动态添加一行数据
                /*ps = con.prepareStatement("INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`) VALUES (,'小七', '女', '10');");
                ps.setInt(1, numbefore+1);
                int result_x = ps.executeUpdate();
                System.out.println("有"+result_x+"行记录被修改");*/
             
                //修改一个数据
                //使用SQL语句:UPDATE `students`.`students_1` SET `name` = '康纳' WHERE `age` = 12 AND `sex` = '男':修改age=12和sex=男的数据的name为康纳
                String sql2 = "UPDATE `students`.`students_1` SET  `name` = '康纳' WHERE `id`= '4' AND `age` = '12' AND `sex` = '男'; ";
                int result2 = stmt.executeUpdate(sql2);
                System.out.println("有"+result2+"行记录被修改");
                 
                //删除一行数据
                //使用SQL语句:DELETE FROM `students`.`students_1` WHERE `id` = '5' ; 删除id=5的一行
                /*String sql3 = "DELETE FROM `students`.`students_1` WHERE `id` = '8' ; ";
                int result3 = stmt.executeUpdate(sql3);
                System.out.println("有"+result3+"行记录被修改");*/
                             
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }finally {//依次关闭数据库接口
                if(rs!=null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                    }
                }
                if(stmt!=null) {
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                    }
                }
                if(con!=null) {
                    try {
                        con.close();
                    } catch (SQLException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                    }
                }
            }
     
        }
     
    }

  • 相关阅读:
    Linux中ctrl+z 、ctrl+c、 ctrl+d区别
    linux文件与用户权限的设置
    查找jdk的安装目录
    linux上修改防火墙操作
    linux上打包与压缩操作
    安装hive操作参考视频
    linux上设置环境变量每次需要source /etc/profile问题处理
    【c语言趣味编程100例】出售金鱼
    【c语言趣味编程100例】三色球问题
    【c语言】递归实现strlen()函数
  • 原文地址:https://www.cnblogs.com/kitor/p/10469036.html
Copyright © 2020-2023  润新知