JDBC

来源:互联网 发布:jsp数组 编辑:程序博客网 时间:2024/06/16 17:57
1. 连接数据库
    url = "...";
    user = "...";
    password = "...";
    Driver driver = new 连接驱动();
    Connection connection = driver.connect(url, Properties);

2. 使用DriverManager类来连接数据库
    url = "...";
    user = "...";
    password = "...";
    Class.forName(驱动名);    //也可以使用DriverManager.registerDriver(new 驱动名);  
    //    之所以使用Class.forName()是因为加载驱动时,驱动类中的静态代码块中包含
    //  DriverManager.registerDriver(new Driver);
    Connection connection = DriverManager.getConnection(url,user,password);
    
3. 执行sql语句
    1).获取数据库连接Connection connection = getConnection();
    2).声明Statement对象 Statement statement = connection.createStatement();
    3).Statement对象调用executeUpdate(sql)方法执行插入; statement.executeUpdate(sql);
    4).传入的sql可以是insert,delect,update.
    5).Connection和Statement是计算机资源,需要关闭;
    
4. 执行select语句,返回ResultSet对象
    ResultSet resultSet = statement.executeQuery(sql);

5. ResuleSet对象通过next()方法查看ResultSet对象是否含有返回的数据(下一条查询放回的记录),使用相应类型来按放数据。
    While(resultSet.next()){
        int id = resultSet.getInt(1);
        String name = resultSet.getString("name");
        int grade = resultSet.getInt(3);
    }
    
6. 使用PreparedStatement可以简化SQL语句的拼写,通过Connection对象的prepareStatement()方法返回一个PreparedStatement对象。
    通过将要执行的SQL语句的值写成?号,再通过setXxx()来将?改成相应的值。
    String sql = "insert into grades values(?,?,?)";
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setInt(1, 111);
    preparedStatement.setString(2, "AAA");
    preparedStatement.setString(3,"BBB");
    preparedStatement.executeUpdate();

7. 设置Date类型时
    preparedStatement.setString(int x,Date date);
    需要先new java.sql.Date(new java.util.Date().getTime());
    
8. 写统一更新的SQL执行方法时,使用可变数组比较方便。
    public void update(String sql, Object ... args){
        Connection connection = getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        for(int i = 0; i < args.length; i++){
            preparedStatement.setObject(i+1, args[i]);
        }
        prepareStatement.executeUpdate();
    }
    
9. PreparedStatement可以防止SQL注入;

10. ResultSetMetaDate类
    描述ResultSet的元数据对象,即可以从中得到结果集中有多少列,列名是什么...
    获得ResultMetaDate对象 调用ResultSet的getMetaDate()方法;
    
    ResultSetMetaDate()的方法getColumnCount()返回ResultSet对象中的列数;
                       的方法getColumnName(int i)返回ResultSet对象中的第i列的列名;
                       的方法getColumnLabel(int i)返回ResultSet对象中的第i列的别名;
                       
11. 使用反射写统一执行查询的方法。
    使用ResultSetMetaDate对象调用getColumnCount()方法结合getColumnName()、getColumnLabel();
    将一行数据记录放入Map<Name, Object>;

12. 在查询时使用了别名,则在ResultSet对象调用方法返回这个使用别名的列时,使用的参数名必须是别名;
    String sql = "select s_name name from student where s_age = 11"
    Object obj = resultSet.getObject(name);
    
13. 在Java EE中成员属性叫做字段, getXxx()、sexXxx(Object object)中的Xxx叫做属性。

14. apache的BeanUtils的工具

15. DatabaseMetaDate类是数据库的元数据,包含许多获取数据库信息的方法。
    获取DatabaseMetaDate对象的方法,DatabaseMetaDate databaseMetaDate = connection.getMetaData();
    
16. MySQL 设置主键自动增长, alter table table_name modify 列名 类型 auto_increment primary key;

17. MySQL 修改列名 alter table table_name change 原列名 新列名 新类型[是否非空];

18. 插入blob,使用setBlob(int i, InputStream input),通过输入流,将文件读入,然后传给setBlob()方法;
    类型        最大
    TinyBlob    255KB
    Blob        65K
    MediumBlob    16M
    LongBlob    4G
    
19. 从数据库读取Blob类型使用getBlob("BlobLableName"),返回Blob对象,然后使用getBinaryStream()方法来获取输入流,然后处理输入流,将文件写到本地硬盘。
    
20. 事务处理,防止意外中断导致数据错乱。
    1)修改Connection对象的自动提交属性,conn.setAutoCommitt(false);
    2)使用try...catch来出现意外进行处理,Connection对象调用rollBack()方法。
    3)若未出现异常,Connection对象调用commit()方法提交。

21. SQL语句批处理,在PreparedStatement对象调用完SetXxx()方法后,使用PreparedStatement对象调用addBatch()方法将SQl语句加入队列中。

22. 数据连接池 dbcp 需要导入apache的dbcp.jar包,并且同时需要添加依赖包pools.jar。

23. dbcp设置必须属性有SetUserName(), SetPassword(), SetUrl(), SetDriverName().

24. dbcp设置选择属性setInitialSize(),setMaxActive(),setMinIdle(),setMaxWait()...

25. 创建BasicDataSource
    1) New BasicDataSource(),然后调用setXxx方法设置属性。
    2)通过创建BasicDataSourceFactor()对象,然后调用CreateDataSource(Properties properties)返回一个BasicDataSource对象。
    
26. c3p0连接池,new ComboPooledDataSource(), 然后调用setDriverClass(),setUser(),setPassword(),setJdbcUrl()这些必需的方法,然后ComboPooledDataSource()对象调用getConnection()方法返回一个Connection对象。

27. c3p0通过XML文本配置参数,直接new ComboPooledDataSource(String ConfigName)

28. DBUtils工具方法
    1). 创建QueryRunner对象,使用query()方法,传入Connection对象、Handler()对象,SQL对象;
    
    2). BeanHandler()的使用,BeanHandler()对象作为参数传入,并在BeanHandler()中传入相应的 对象.class;
        把结果集的第一条结果返回。
    
    3). BeanListHandler()的使用,BenanListHandler()对象作为参数传入QueryRunner()中,并在BeanHandler()中传入相应的 对象.class, 最后返回一个List对象。
    
    
    4). MapHandler()的使用,MapHandler()对象作为参数传入QueryRunner()中,返回第一条记录,形如{age=22, name=aa, location=China};
        键 :值
        键:SQL查询的列名,不是列的别名
        值:查询对应的值
        
    5). MapListHandler()的使用,类似BeanListHandler()的使用。
    
29. jdbc调用存储函数和存储过程
    1)Connection对象调用prepareCall(String sql)方法返回CallableStatement对象,并传入sql语句{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
                                                                                          {call <procedure-name>[(<arg1>,<arg2>, ...)]}
    2)CallableStatement对象调用registerOutparameter()方法对占位符注册OUT参数。
    3)CallableStatement对象调用setXxx()方法对占位符进行赋值
    4)CallableStatement对象调用execute()方法执行sql语句
    5)CallableStatement对象调用getXxx()方法返回存储函数的返回值
原创粉丝点击