JDBC的操作流程整理

                        仅供自己复习哦~欢迎大家指点.

18/4/15

通过Java,jdbc操数据库.一般都是有固定的步骤构成:

  1.做好数据库  .jar的导入.

   2.创建对象.

3.定义driver,url,user,passwrod;

4.然后就是操作这些对象操作数据库中的数据

5.然后就是对这些对象进行异常捕获.

  通过try{ }catch{   }处理异常

6.最后一点! 别忘了关闭  Connection,PreparedStatement,ResultSet对象.

创建的时候是:Connection连接→PreparedStatement预处理→ResultSet结果集;

关闭的时候是倒着关闭的:ResultSet结果集→PreparedStatement预处理→Connection连接;

这也复合一定的逻辑.

                                             总结:

 

jdbc操作步骤总结如下:

1、 加载数据库驱动

2、 创建并获取数据库链接

3、 创建jdbc statement对象

4、 设置sql语句

5、 设置sql语句中的参数(使用preparedStatement)

6、 通过statement执行sql并获取结果

7、 对sql执行结果进行解析处理

8、 释放资源(resultSet、preparedstatement、connection)

 

jdbc问题总结如下:

1、 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

2、 Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

3、 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

4、 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

由此引伸到了Mybatis框架

 

 

 

 

 

最后附录一个自己写的登陆时用到的Dao层代码(类似工厂模式);

package com.cn.loginDao;
import java.sql.*;
public class UserDao {
	/**
	 * 用户的登录和注册
	 * @since 1.0  
	 * @version 1.1  
	 * @author Twenty-seven
	 * @data 18/3/25/11:24
	 *  */
	
	//查询用户密码
	public String FindUser(String username){
		String passd = null;
		String sql = "select * from User_info where username=?";
		Connection con =getConnection();//获取连接
		PreparedStatement pstmt =null;
		ResultSet rs = null;
		try {
			pstmt = con.prepareStatement(sql);//预处理
			pstmt.setString(1, username);//给?赋值
			rs = pstmt.executeQuery();//执行SQL语句
			if(rs.next()){//遍历查找到与username匹配的password
				passd=rs.getString("password");//将查询到的password赋值给passd
			}else{
				passd=null;//未查询到为空
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(rs!=null)rs.close();
				if(pstmt!=null)pstmt.close();
				if(con!=null)con.close();
			} catch (SQLException e) {		
				e.printStackTrace();
			}
		}
		return passd;//返回passd
	}
	//--------------------我是分隔符----略略略-------------------------------
	//注册新用户
	public void addUser(String username,String passd){
		Connection con = getConnection();
		PreparedStatement pstmt =null;
		String sql = "INSERT INTO User_info(username,password) VALUES(?,?)";
		try {
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, username);
			pstmt.setString(2, passd);
			pstmt.executeUpdate();
		}catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(pstmt!=null)pstmt.close();
				if(con!=null)con.close();
			}catch (SQLException e) {	
				e.printStackTrace();
			}
		}
	}
	//--------------------我是分隔符----略略略---------------------------
	//连接数据库    
	public static Connection getConnection(){
		String driver ="com.mysql.jdbc.Driver";//数据库驱动
		String url ="jdbc:mysql://localhost:3306/test";
		String user ="root";
		String password ="123456";
		Connection connection =null;
		try {
			Class.forName(driver);//加载数据库驱动
			connection =DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;//返回连接
	}
   //public static void main(String[] args) {
	//UserDao ud=new UserDao();
	//ud.addUser("q","q");
//}
}

 

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值