zoukankan      html  css  js  c++  java
  • jdbc程序编写 d7

    一.jdbc的编写

      1.首先导入jar包

    • 导入数据库厂商提供的驱动jar包,我们这里使用MySQL,所以导入MySQL驱动 mysql-connector-java-5.1.7-bin.jar,这两个包需要放在web-inf里lib下面。
    • 如果使用的是oracle数据的话就导入ojdbc6.jar。

      2.注册驱动

      驱动程序的静态代码中,会自动将驱动程序通过DriverManager进行注册,所以我们要做的只是将驱动类加载进JDK中,静态代码块将会自动执行。

      3.获取数据库连接

       获取连接的意思就是调用DriverManagergetConnection()方法即可,里面用到了url,password,username三个参数,其中url是数据库的端口号以及库名,password是创建数据库的密码,username默认的orcl或者mysql的root,他的命名是  jdbc:mysql://主机地址:端口号/库名 对应的  jdbc:mysql://localhost:3306/test

     jdbc:oracle:thin:@主机地址:端口号:数据库名 对应的 jdbc:oracle:thin:@localhost:1521:atguigu 其中最后的是自己定义的,前面的到端口号都基本上是默认的。

      4.获取Statement对象

       获取Statement对象用来执行SQL语句,通过Connection对象的相关方法即可。值得注意的是它存在漏洞,这是黑客攻击的重点,所以一般不使用,取而代之的是prepareStatement,后面操作的就是这样的

       5.执行Sql语句

      在获取数据库连接和Statement对象后,正式建立了联系,再进行java代码对数据库的增删改插,进一步从前台调数据同java和后台的数据库进行数据的交换。同时也可以把数据库数据拿出来作为比较。

       6.resultSet接口

      在进行jdbc查询操作的时候会返回一个result对象,只有查询的时候返回一个resultset类型的,他用了st.executeQuery(sql2);它next()的返回值是一个boolean的类型,如果数据库存在这样的值就返回true,否则继续走直到所有数据查询玩。对应的增删改就只要判断数据库里的数据有什么改动,用到了executeUpdate(sql1);也就是说返回一个数值型的,如果操作了就大于0,可用来判断是否增删改了,如果想要判断插入的数据还是要调用executeQuery()。

       7.释放资源

      在所有操作都执行完了就要关闭连接了。关闭的顺序与连接的顺序正好反过来,先关ResultSetStatement、最后关Connection。这样才不会出错

    
    
    package com.neuedu.web;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    
    
    
    public class TestConnection {
    
        public static void main(String[] args) throws Exception {
            // 由于要try、catch许多异常,防止代码过于繁琐,就直接抛出异常
            String username="root";
            String password="yantao1";
            String url="jdbc:mysql://localhost:3306/books";
            String driverClass="com.mysql.jdbc.Driver";
         //首先用来获取数据库地址,用户名和密码。另外定义了一个加载驱动的字符串。 Class.forName(driverClass);
          //加载驱动也可以直接Class.forName("com.mysql.jdbc.Driver"); Connection conn
    =DriverManager.getConnection(url,username,password);
        //获取数据库的连接通过驱动程序的getConnection方法。 Statement st
    =conn.createStatement(); //上面的一行存在sql漏洞问题,具体的是如果选择查询就会出现where后面的判断语句,如果有or 1=1,必定成立的语句就会出错,黑客攻击的漏洞。 String sql="insert into teacher(id,aname) values(null,'咕噜噜')"; String sql1="update teacher set aname='咕噜' where aname in('咕噜')"; String sql2="select id,aname from teacher"; PreparedStatement st1=conn.prepareStatement(sql);
      
    //conn.executeStatement这个方法就是来解决漏洞问题的。它与上面的不同在于它是上面的子类,需要在里面通过sql的string类型才可以调用,不能调用空的。 //父类的接口指向子类就是多态,同一个变量可以指向多个对象,一种事物多种形态。 int execute=st1.executeUpdate(sql1);
        //这个是用来判断增删改的,当数据库数据发生了变化,对应的数据库更新了,所以返回了一个影响了行的行数的int类型,可以判断他大于0说明进行了数据库的操作。 ResultSet rs
    =st1.executeQuery(sql2);
        //这个是在数据库里寻找,如果有的话就返回一个对象,否则返回的是空。
    if(execute>0){ System.out.println(execute);    System.out.println("成功"); }
        //如果发生了数据变化就输出。
    while (rs.next()) { System.out.println(rs.getInt(1)+rs.getString("aname"));
        //对于这个用了一个迭代,就是每一行都判断是否相等,如果不想等鼠标向下一行,知道所有的行都执行完了,才可以结束。 }
    if(rs!=null){ rs.close(); } if(st!=null){ st.close(); } if(conn!=null){ conn.close(); } //最后关闭所有的连接,释放资源。 } }
    另外这个将连接操作和关闭一起操作了,十分的繁琐,而没有封装,所有代码都公开,在实际的业务里是不存在的,这里可以定义一个连接类,在定一个业务层,业务层调用连接层的东西,
    最后将写一个最总的类用来调用所有的类。
    
    
  • 相关阅读:
    el-table——可编辑拖拽转换csv格式的表格
    【C#进阶系列】25 线程基础
    【C#进阶系列】24 运行时序列化
    【C#进阶系列】23 程序集加载和反射
    【C#进阶系列】22 CLR寄宿和AppDomain
    【C#进阶系列】21 托管堆和垃圾回收
    【C#进阶系列】20 异常和状态管理
    【C#进阶系列】19 可空值类型
    【C#进阶系列】18 特性Attribute
    【C#进阶系列】17 委托
  • 原文地址:https://www.cnblogs.com/guomingyt/p/7846427.html
Copyright © 2011-2022 走看看