重新整理JDBC封装,一步一步来

1、首先整理一下JDBC的连接思路

未经过封装:首先引入mysql的jar包

一、加载驱动,获取链接

01。驱动名称

02、数据库链接地址:

String url=jabc:mysql://localhost:3306/数据库名?characterEncoding=utf-8&serverTimezone=gmt

03、数据库的名称,密码

string username= string password=

二、建立链接

Connection conn=DriverManager.getconnection(url ,username, password);

三、获取操作对象

Statement st=conn.createstatement();

四、写sql语句,操作对象执行对应的操作

 

string sql="select * from s"

st.execuateupdate()//增删改

st.execuateQuery()//查询方法

查询方法的返回结果需要用一个结果集来获取。

ResultSet rs=st.execuateQuery(sql);

结果集是根据数据库表列和行组成的二维表

获取查询结果

while(rs.next()){

int firstcoumn=rs.getInt(1)//获取第一列,参数为int,

int secondcoumn=rs.getString("age")//获取列名为“age”的数据

。。。

}

2、进行封装。

其实我们进行每一次操作的时候只需要获取一次链接就可以,所以我们就需要进行封装

一、首先将数据常量全部封装到一个配置文件里,这样以后我们需要更改的时候直接去配置文件里边改就可以啦

首先在src根目录新建一个properties文件。

properties配置文件可以理解为Map键值对一样的存在.

那么,经过如此,我们的JDBC工具类封装正式开始

一、加载驱动,获取链接

思考一下,每次我们进行增删改查的时候,都需要用到工具类,而获取这properties的值只需要一次就可以,所以static代码块非常适合他们

private static String driver=null;

private static String url=null;

private static String username=null;

private static String password=null;

static {

Properties pop=new Properties();//Properties 继承于 Hashtable。表示一个持久 的属性集.属性列表中每个键及其对应值都是一个字符串。

try {

//getResourceAsStream读取的文件路径只局限与工程的源文件夹中,包括在工程src根目录下,以及类包里面任何位置,

//但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的。

pop.load(DBUtil.class.getResourceAsStream("db.properties"));//类加载器执行的时候去读取配置文件 注意这里不使用类加载器的话也可以自己新建一个InputStream流去读取,然后作为load方法的参数。

driver=pop.getProperty("driverClassName");

url=pop.getProperty("url");

username=pop.getProperty("username");

password=pop.getProperty("password");

Class.forName(driver);

} catch (Exception e) {

e.printStackTrace();

}

}

二、建立链接

public static Connection getConnection() {

Connection conn=null;

try {

conn=DriverManager.getConnection(url, username, password);

}

catch (Exception e) {

e.printStackTrace();

}

return conn;

}

,记得用完close.及时释放资源哦

public static void close(Statement st,Connection con,ResultSet rs) {

try {

if(rs!=null) {

rs.close();

}

if(st!=null) {

st.close();

}

if(con!=null) {

con.close();

}

} catch (Exception e) {

e.printStackTrace();

}

这样我们就拥有了一个工具类。DBUtils

那么增删改查的封装如何进行呢?

首先我们思考一下接下来第三步第四步是啥

三、建立操作对象,四、执行sql操作。

那么这里需要注意

Statement对象的增删改查参数如果你还刚学到这里,那么简单封装成String sql即可,但是实际我们的修改查询语句也有一些不确定的参数,比如where group by 等等,所以引入动态数组的概念。

那么我们来进行封装

首先是作为增删改查的封装update()

public int update(String sql,Object...objects) {

Connection conn, =null;

PreparedStatement pre=null;

int count=0;

try {

conn=DBUtil.getconnection();

pre=conn.prepareStatement(sql);

for(int i=0;i

pre.setObject(i+1, objects[i]);

}//statement 的子类prestatement是进行预处理,然后用动态数组Object去填充

count=pre.executeUpdate();

} catch (Exception e) {

e.printStackTrace();

}finally {

DBUtil.close(pre, conn, null);

}

return count;

}

查询

public List> query( String sql,Object...obj){

PreparedStatement pre=null;

Connection conn=null;

ResultSet rs=null;

List> list=new ArrayList>();

try {

conn=DBUtils.getconnection();

pre=conn.prepareStatement(sql);

for (int i = 0; i < obj.length; i++) {

pre.setObject(i+1, obj[i]);

}

rs=pre.executeQuery();

ResultSetMetaData rsmd=rs.getMetaData();//获取列信息

int count=rsmd.getColumnCount();//获取列数

String[] columnName=new String[count];

for(int i=0;i

columnName[i]=rsmd.getColumnName(i+1);

}

while(rs.next()) {

Map map=new HashMap();

for(int i=0;i

map.put(columnName[i],rs.getObject(i+1));

}

list.add(map);

}

} catch (SQLException e) {

e.printStackTrace();

}finally {

DBUtil.close(pre,null,rs);

}

return list;

封装到这里就结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值