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()方法返回存储函数的返回值
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()方法返回存储函数的返回值
阅读全文
0 0
- jdbc
- JDBC
- jdbc
- JDBC
- jdbc
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- jdbc
- JDBC
- JDBC
- jdbc
- 设置Distribution clean up 每次删除Command的数量
- HDOJ 2032 杨辉三角
- 合并两个有序链表
- C语言单向链表的实现
- 学习Ajax框架之dojo:dojo widget
- JDBC
- 单链表的插入排序
- Ubuntu 下nginx和FastDfs的配置
- SSISDB1:使用SSISDB管理SSIS Projects
- CUDA之程序调试
- crt1.o,crti.o,crtbegin.o,crtend.o ,crtn.o 与libc.so 的关系
- Mark一下
- JAVA基础-对象
- 任务调度