java_第一年_JDBC(6)
DataBaseMetaData对象:由Connection.getDataBaseMetaData()方法获得,可以用来获取数据库的元数据,提供的方法有:
- getURL():返回一个String类,代表数据库的URL,例:jdbc:mysql://localhost:3306/dataname;
- getUserName:返回连接数据库管理系统的用户名,例:root@localhost;
- getDatabaseProductName():返回数据库的产品名,例:MYSQL
- getDatabaseProductVersion():返回数据库的版本号,例:5.1.44-community;
- getDriverName():返回驱动程序名;例:MySQL-AB JDBC Driver;
- getDriverVersion():返回驱动程序的版本号;例:mysql-connector-java-5.0.8;
- isReadOnly():返回布尔值,表示是否只允许读;
ParametrMetaData对象:由PrepareStatement.getParameterMetaData()方法获得,可以用来获取PreparedStatement对象的元数据,常用的方法有:
- getParameterCount():获得指定参数的个数;
- getParameterType(int):获取指定参数的sql类型;
String sql = "select * from user where name = ? and password = ?";
PreparedStatement st = conn.PrepareStatement(sql);
ParameterMetaData pm = st.getParameterMetaData();
pm.getParameterCount();
pm.getParameterType();
ResultSetMetaData对象:由ResultSet.getMetaData()方法获得,用来获取ResultSet对象的元数据,常用的方法:
- getColumnCount():返回resultset对象的列数;
- getColumnName(int column):获得指定的列名;
- getColumnTypeName(int column):获得指定列的类型;
开发一个jdbcUtils工具类:
package lzj.learn;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties; public class JdbcUtils{
private static String driver = null;
private static String url = null;
private staric String username = null;
private static String password = null;
//读取db.properties文件,对参数都赋予值;
static{
try{
InputStream in = Jdbc.Utils.class.getClassLoader().getResourseAsStream("db.properties");
Porperties prop = new Properties();
prop.load(in);
driver = prop.getProperty("driver");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
Class.forName(driver);
}catch(Exception e) {
throw new ExceptionInInitializeError(e);
}
}
//连接数据库,获取连接对象
public static Connection getConnection() throws SQLException{
return DriverManafer.getConnection(url,username,password);
}
//释放资源
public static void release(Connection conn,Statement st,ResultSet rs) {
if(rs!=null){
try{
rs.close();
}catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if(st!=null){
try{
st.close();
}catch (Exception e){
e.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
}catch{
e.printStackTrace();
}
}
}
//更新数据库;sql参数:要执行的SQL语句;params[]:执行时使用的参数
public static void update (String sql , Object params[]) throws SQLException{
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try{
conn = getConnection();
st = conn.prepareStatement(sql);
for(int = ;i<params.length;i++){
st.setObject(i+,params[i]);
}
st.executeUpdate();
}finally{
release(conn,st,rs);
}
}
//查询数据库,与更新数据库不同的是,查询数据库多提供了一个处理结果集的处理器
public static Object query(String sql ,Object params[],ResultSetHandler rsh) throws SQLException{
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try{
conn = getConnection();
st = conn.prepareStatement(sql);
for(int i = ;i<params.length;i++){
st.setObject(i+,params[i]);
}
rs = st.executeQuery();
return rsh.handler(rs);//将查询的结果集交给ResultSetHandler类,再通过定义ResultSetHandler类,实现handler方法即可实现对结果集的操作;
}finally{
release(conn,st,rs);
}
}
}
对处理器接口ResultSetHandler定义可如下:
package lzj.learn;
import java.sql.ResultSet;
//结果集处理接口
public interface ResultSetHandler{
public Object handler (ResultSet rs);//通过实现handler方法实现对结果集的操作
}
有了上述的框架后,就可以针对单个实体对象进行CRUD了;
packagec lzj.learn; import java.sql.SQLException;
import java.util.List;
import me.gacl.domain.Account;
import me.gacl.util.BeanHandler;
import me.gacl.util.BeanListHandler;
import me.gacl.util.JdbcUtils; public class AccountDao { public void add(Account account) throws SQLException{
String sql = "insert into account(name,money) values(?,?)";
Object params[] = {account.getName(),account.getMoney()};
JdbcUtils.update(sql, params);
} public void delete(int id) throws SQLException{
String sql = "delete from account where id=?";
Object params[] = {id};
JdbcUtils.update(sql, params);
} public void update(Account account) throws SQLException{ String sql = "update account set name=?,money=? where id=?";
Object params[] = {account.getName(),account.getMoney(),account.getId()};
JdbcUtils.update(sql, params); } public Account find(int id) throws SQLException{
String sql = "select * from account where id=?";
Object params[] = {id};
return (Account) JdbcUtils.query(sql, params, new BeanHandler(Account.class));
} public List<Account> getAll() throws SQLException{
String sql = "select * from account";
Object params[] = {};
return (List<Account>) JdbcUtils.query(sql, params,new BeanListHandler(Account.class));
}
}
java_第一年_JDBC(6)的更多相关文章
- java_第一年_JDBC(7)
Commons-dbutils是一个开源的JDBC工具类库,对JDBC进行封装,简化编码的工作量,包含的API: org.apache.commons.dbutils.QueryRunner org. ...
- java_第一年_JDBC(2)
上篇说到,通过JDBC可实现java编程程序和mysql数据库进行连接并交互,而交互后所形成的结果集是通过ResultSet对象来操作的. 创建ResultSet对象: stmt = conn.cre ...
- java_第一年_JDBC(1)
JDBC(Java Data Base Connectivity),用于实现java语言编程与数据库连接的API. 数据库驱动:应用程序并不能直接使用数据库,而需要通过相应的数据库驱动程序后再操作数据 ...
- java_第一年_JDBC(5)
事务概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功: 开始事务:start transaction 提交事务:commit 回滚事务:rollback 事务的四大特 ...
- java_第一年_JDBC(4)
注:该篇只是为了小白的我熟悉下JDBC的代码,练习篇 在mysql中建test测试库,并创建一张employees表,加入一些数据如下图: 通过JDBC连接对表中数据进行添加: package lzj ...
- java_第一年_JDBC(3)
事务 我们在通过JDBC连接数据库并开始交互时,默认情况下是自动提交的,有时由于为了保持业务流程的完整性.提高性能或是使用分布式事务,需要启动支持事务,此时的方法是调用Connection对象的set ...
- java_第一年_JavaWeb(14)
EL :EL表达式主要用于获取数据.执行运算.获取对象.调用java方法: 获取数据 语法:"${标识符}" 会调用pageContext.findAttribute方法,从pag ...
- java_第一年_JavaWeb(13)
JSTL标签库——核心标签库 为了弥补html标签的不足,为了更加方便地在jsp页面中使用java逻辑代码,JSTL标签库因运而生,而其中的佼佼者,被恩宠最多的就是核心标签库了: 核心标签库从功能上可 ...
- java_第一年_JavaWeb(11)
自定义标签:主要是用来移除JSP页面中的java代码. 先从一个简单的案例了解其怎么移除代码: 一个正常的jsp页面: <%@ page language="java" pa ...
随机推荐
- js赋值后 改变现有数据会修改原来的数据
看代码: let obj1 = { name: '张三', age: , sex: '男' } let obj2 = obj1 console.log('obj2:', obj2) obj2.age ...
- .gitignore配置文件
.gitignore文件 在使用Git的过程中,我们希望有些文件比如日志.临时文件.编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交.git提供一个.gitigno ...
- rocketmq设计
# 设计(design) 1 消息存储 消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构.PageCache与Mmap内存映射以及RocketMQ ...
- Java调用Fortran生成so库报“libifport.so.5: 无法打开共享对象文件”错误解决方法
source /opt/intel/bin/compilervars.sh intel64
- linux运维、架构之路-nfs网络文件系统
一.nfs介绍 NFS是Network File System的缩写,是网络文件系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录,主要存储用户上传的图片附件等信息. ...
- JavaSE——柏羲
MySql Redis源码分析呢?
- JSP Cookies处理
JSP Cookies处理 Cookies是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JSP显然能够提供对HTTP cookies的支持. 通常有三个步骤来识别回头客 ...
- [BZOJ3236]:[Ahoi2013]作业(莫队+分块)
题目传送门 题目描述 此时已是凌晨两点,刚刚做了$Codeforces$的小$A$掏出了英语试卷.英语作业其实不算多,一个小时刚好可以做完.然后是一个小时可与做完的数学作业,接下来是分别都是一个小时可 ...
- Retrotranslator使用简介(JDK1.5->1.4)
Retrotranslator是一个可以把JDK1.5(6)下编译的类(或包)转译成JDK1.4下可以识别的类(包)的工具. 为现在还用JDK1.4呢?我想无非是现在的大部分Java Web应用是 ...
- xml基础之二(XML结构【2】)DTD文档模版
xml基础之二(XML结构[2])DTD文档模版 xml 模板 文档结构 我们知道XML主要用于数据的存储和传输,所以无论是自定义还是外部引用DTD模板文档,都是为了突出数据的存储规范.DTD(文档 ...