JDBC基础知识

来源:互联网 发布:手机软件广告拦截软件 编辑:程序博客网 时间:2024/05/17 22:55
jdbc 学习
(Java Database Conectivity)——Java数据库连接
1、工程的包
1.包的命名规则
        com,公司名(项目名,具体模块的名称)实现分类的名称;

1.po包:存放的是Javabean类,每个Javabean类对应数据库中一张表,类名和表名一致;


2、dao包:存放的是操作数据类,即对数据库中的数据进行增删改查操作的类,每个dao包对应数据库中一张表,类名为——表名+dao;


3、util包:公用的类和常量;


4、测试类:存放的是测试类


5、Javabean类:存放数据的类,只包括属性,构造器,setter和getter


2、数据库客服端操作数据库的步骤:

1.连接数据库(ip地址,端口号,用户名,密码,数据库名)


2.打开发送和执行sql语句的窗口


3.发送和执行sql语句


4.根据返回结果,判断是否正确操作了数据库


5.关闭打开的所有的东西

3、JDBC操作数据库的步骤:
  1、连接到数据库
    ①、加载数据库的驱动:会抛出一个ClassNoFoundException异常;
    mysql:Class.forName("com.mysql.jdbc.Driver");

    ②、利用驱动和三个参数(url、user、password)获取连接:会抛出一个SQLException异常;
             java.sql.Connection  conn=java.sal.DriverManager.getConnection(url、user、password);
           mysql.String url="jdbc:mysql://127.0.0.1/databaseName"
    oracle.String url=""

  2、通过连接获得操纵数据的对象:会抛出一个SQLException异常;
    java.sql.Statement st=conn.createStatement();


  3、使用java.sql.Statement对象执行SQL语句:会抛出一个SQLException异常
    执行更新SQL语句:int st=conn.createstatement();

    执行查询sql语句:Java.sql.ResultSet rs  =st.esecuteQuery(sql);


  4、根据返回的rows/rs,判断sql语句是否正确执行:
      rows!=0 sql语句正确执行;

     rs.next()=true 表示查出了子表


  5、关闭,先打开的后关闭
      关闭rs:rs.close():会抛出一个SQLException异常
      关闭st:st.close():会抛出一个SQLException异常
      关闭conn:conn.close():会抛出一个SQLException异常

  第一个jar包:数据库的驱动web工程的jar包都是放在WeRoot/WEB- INB/lib文件夹里

  4、几个接口:

      java.sql.Connection是一个接口;

     java.sql.Statemrnt是一个接口;

           java.sql.ResultSet是一个接口;

          java.sql.preparedstatement是一个接口;


     5、数据库连接配置文件:database.properties只加载一次,放在src文件夹下面properties文件以键(name)值(value)方式保存数据
  从properties文件中解析出value值
   InputStream is=DBConnectionUtil.class.getClassLoader().getResourceAsStream("database.properties");
   Properties p =new Properties();
   p.load(is);
   String value=p.getProperty("name");
    这个过程抛出IOException异常

  6、java.sql.Statement和java.sql.properedStatement比较
    ① 、代码比较
       1.SQL的写法:
           Satement:String sql = "selete id from user   where email =' "+email+" ' ";

              PreparedStatement:String sql = "selete id   from user where email = ?"

 

  2.st/ps的获取:

Statement:st = con.createStatement();

            PreparedStatement:ps = con.preparedStateme (sql);


       3.参数的设置:
            Statement:在SQL中给出
           PreparedStatement:ps.setType(1,value);
              ps.setType(2,value);

       4.执行SQL:

           Statement:int rows  =  st.executeUpdate(sql);  

re = st.executeQuery(sql);

            PreparedStatement:int rows =  ps.executeUpdate();             
                   re = ps.executeQuery();


    ②、sql入侵
        Statement:可能发生sql入侵
        PreparedStatement:不会发生sql入侵
       
          ③、效率比较
        1、编译时间
            Statement:st.executeUpdata(sql);编译并执行

            PerparedStatement:ps=conn.prepareStatement (sql);获得就被编译(预编译)


       2、一次性存取
            Statement:稍高于PreparedStatement
            PreparedStatement:稍低于Statement

  7、PreparedStatement的优势:

    1.防止SQL的注入,提高安全性


    2.对参数实现类型的自动转换,代码的可读性,可维护性提高


    3.对于批处理:PreparedStatement效率更高一些(oracle明显   ,MySQL区别不大)
  
  8、单例模式
    步骤:

     ①、私有化构造器:private Singlen(){}


     ②、定义一个私有的static变量:private static Singleton  


       singleton= new Singleton();
     ③、提供一个公共的static方法返回singleton:public       


  static Singleton getInstance(){
           return singleton;
         }
       dao包里的DAO类是单例模式
原创粉丝点击