JDBC(Java Datebases Connectivity)

        JDBC是java中用来规范客户端访问数据库的应用程序接口,里面提供了查询(excuteQuery)和更新数据库(excuteUpdate)的方法.

一.用JDBC来往数据库中添加删除和修改数据的步骤

1.装载驱动

    Class.forName("com.mysql.jdbc.Driver");

2.加载驱动,获取连接(DriverManager可以用来加载驱动并返回一个Collection类型的连接)
            conn=DriverManager.getConnection
            ("jdbc:mysql://127.0.0.1:3306/java2106?useUnicode=true&characterEncoding=UTF-8",
                            "root","123456");

3.创建连接对象(执行sql语句的工具)

state=conn.createStatement();

4.执行sql语句,excuteUpdate():执行数据库的增删改操作的方法,该方法会返回一个int类型的值,这个值就相当于操作完之后,返回来的发生变化的数据条数,如果返回的int值大于0,则表示数据操作成功了

String sql = "insert into dept values()";

int num=state.executeUpdate(sql);

5.处理结果集,为了使结果更加直观

if(num>0){
                System.out.println("插入成功");
            }else{
                System.out.println("插入失败");
            }

6.关闭连接和执行工具

conn.close();
state.close();

public class JDBCDdemo1 {

	public static void main(String[] args) {
		Connection conn=null;//连接对象
		Statement state=null;
		//1.加载驱动
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取连接
			conn=DriverManager.getConnection
			("jdbc:mysql://127.0.0.1:3306/java2106?useUnicode=true&characterEncoding=UTF-8",
							"root","123456");
			//3.创建连接对象
			state=conn.createStatement();
			String sql = "insert into dept values()";//写60,'剪辑部','株洲'sql语句
			//执行sql语句
			/**
			 * excuteUpdate():执行数据库的增删改操作的方法
			 * 该方法会返回一个int类型的值,这个值就相当于操作完之后,
			 * 返回来的发生变化的数据条数
			 * 如果返回的int值大于0,则表示数据操作成功了
			 */
			int num=state.executeUpdate(sql);
			//5.处理结果集()
			if(num>0){
				System.out.println("插入成功");
			}else{
				System.out.println("插入失败");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
		
		try {
			conn.close();
			state.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	  }
		
	}

二.使用JDBC实现对数据库的查询

1.创建实体类(封装并重写toString方法)

public class Dept {
	 private int deptno;
	 private String dname;
	 private String local;
	 private String manager;
	 
//	 private Emp emp;
	 
	public int getDeptno() {
		return deptno;
	}
	public String getManager() {
		return manager;
	}
	public void setManager(String manager) {
		this.manager = manager;
	}
	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
	public String getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	public String getLocal() {
		return local;
	}
	public void setLocal(String local) {
		this.local = local;
	}
	@Override
	public String toString() {
		return "Dept [deptno=" + deptno + ", dname=" + dname + ", local=" + local + ", manager=" + manager + "]";
	}
}

2.为了简化主函数中的语句,创建一个JDBCHelper类来实现加载驱动和关闭的方法

public class JDBCHelper {
	private static String className="com.mysql.jdbc.Driver";
	private static String url="jdbc:mysql://127.0.0.1:3306/java2106?useUnicode=true&characterEncoding=UTF-8";
	private static String user="root";
	private static String pass="123456";
	/**
	 * 使用静态块加载驱动
	 */
	static{
		try {
			Class.forName(className);
		} catch (ClassNotFoundException e) {
			System.out.println("驱动加载失败!");
			e.printStackTrace();
		}
	}
	/**
	 * 专门用来提供Connection对象的方法
	 */
	public static Connection getConn(){
		Connection conn = null;
		try {
			conn=DriverManager.getConnection(url,user,pass);
		} catch (SQLException e) {
			System.out.println("获取连接失败!");
			e.printStackTrace();
		}
		return conn;
	}
	
	/**
	 * 专门用来关闭所有连接的方法
	 */
	public static void closeAll(Connection conn,PreparedStatement ps,ResultSet rs){
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(ps!=null){
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

3.具体实现过程与增删改差不多,用exuteQuery来执行sql语句,返回的是一个结果集,用一个结果集ResultSet rs来接收,为了能将查询的结果更好的遍历和用作其他地方,我们用一个List来装这个结果集rs.

public class JDBCdemo4 {

	public static void main(String[] args) {
		Connection conn=null;
		Statement state=null;
		ResultSet rs=null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java2106?useUnicode=true&characterEncoding=UTF-8","root","123456");
			state = conn.createStatement();
			String sql="select * from dept";
			/**
			 * excuteQuery():用来进行查询的方法,
			 * 该方法会返回一个ResultSet类型的结果集
			 */
			rs = state.executeQuery(sql);
			List<Dept> list=  new ArrayList<Dept>();
			while(rs.next()){//判断rs中是否有下一个元素
				Dept d = new Dept();
				//获取rs字段中名为deptno的值(是一个int值)
				d.setDeptno(rs.getInt("deptno"));
				d.setDname(rs.getString("dname"));
				d.setLocal(rs.getString("local"));
//				System.out.println(deptno+","+dname+","+local);
				list.add(d);
			}
			System.out.println(list);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			
			try {
				conn.close();
				state.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}

}

三.PreparedStatement 预加载的连接对象

用这个连接对象加载sql语句时,可以预加载sql语句

            String sql="insert into dept values(?,?,?)";

			ps = conn.prepareStatement(sql);
			ps.setInt(1, 80);//设置第一个占位符的值为60
			ps.setString(2, "回收部");
			ps.setString(3, "五一广场");

       这个sql语句中未知的数据都可以用?来代替,加载这个sql语句的时候并不知道要执行的是什么语句,只是预加载了这个语法格式,之后可以用ps.set()这个语句来给值,使得语句执行速度加快.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值