Java的JDBC

九十五、JDBC
1、连接数据库


		String driver="com.mysql.jdbc.Driver";
		String url="jdbc:mysql://localhost:3306/aowin";
		String user="root";
		String password="163041";	
		Connection con=null;
		try {
	1、加载驱动
			Class.forName(driver);      
			System.out.println("加载成功");
		} catch (ClassNotFoundException e) {
			System.out.println("加载驱动失败");
		}
		try {
·	2、获取与数据库的连接
			con=DriverManager.getConnection(url, user, password);
			System.out.println("连接成功");
		} catch (SQLException e) {
			System.out.println("连接失败");
		}
		return con;

3.将sql语句送到数据库并执行

4.将查询结果放到ResultSet里
修改和删除都可以用executeUpdate()方法;
当查询时,返回n条数据:executeQuery(sql)

(1)、Statement的createStatement()
(普通查询(查询所有):使用createStatement()方法,再使用executeQuery(sql)执行sql语句,并将得到的值放入ResultSet集合中,再使用ArrayList集合接收这些值。)

		con=DbUtils.getConnection();
		st=con.createStatement();
		String sql="select * from student";
		//当是查询时,返回n条数据就用executeQuery
		rs=st.executeQuery(sql);
		//st.execute(sql);返回布尔类型,代表语句是否执行成功
		List<Student>l =new ArrayList<Student>();
		while(rs.next()) {
		}

(2)、 prepareStatement(sql)方法:
PreparedStatement 有预编译的功能 ,可以防止sql注入
(删除:sql语句中有?的,使用prepareStatement(sql)方法,意思是先将sql语句传到数据库中,并将得到的值放入PreparedStatement集合中,并配合setInt()等方法设置?的值,当对数据修改时,再使用executeUpdate()方法判断sql语句是否执行成功(此方法返回行数),再用ArrayList集合接收查询得到的值)

		con=DbUtils.getConnection();
		String sql="delete from student where id=?";
		ps=con.prepareStatement(sql);
		ps.setInt(1, id);
		int rows=ps.executeUpdate();
		//当是对数据修改时,就用executeUpdate();返回的时行数

(3)、批处理: 先将语句传到数据库,再将具体的值写到列表中,再一起执行
(sql语句中没有?的,可以使用createStatement()方法,并将得到的值放入Statement集合中,并配合addBatch()方法将sql语句放入到列表中,最后使用executeBatch()方法执行sql语句。)

		对象.get封装方法(createStatement()方法)
		con=DbUtils.getConnection();
		st=con.createStatement();
		for(int i=0;i<5;i++) {
		String sql="insert into student values("+(s.getId()+i)+","+  "'"  +s.getSex()+ "'" +","+s.getScore()+")";
		//批处理:Statement有个语句列表,可以先将语句放入列表中,再一起执行
			st.addBatch(sql);
		}
		int a[]=st.executeBatch();

prepareStatement()方法:
(sql语句中有?的,使用这个方法,意思是先将sql语句传到数据库中,并将得到的值放入PreparedStatement集合中,并配合setInt()等方法设置第n个?的值,再使用addBatch()方法将sql语句放入到列表中,最后使用executeBatch()方法执行sql语句。)

		con=DbUtils.getConnection();
		String sql="insert into student values(?,?,?)";
		ps=con.prepareStatement(sql);
		//PrepareStatement批处理:先将语句传到数据库,在将具体的值写到 列表中,再一起执行
		for(int i=0;i<5;i++) {
			ps.setInt(1, i);
			ps.setString(2, "女");
			ps.setInt(3, 99);
			ps.addBatch();
		}
		int rows=ps.executeBatch().length;

(4)、非批处理的方法
(查询(?):sql语句中有?的,使用prepareStatement(sql)方法,意思是先将sql语句传到数据库中,并将得到的值放入PreparedStatement集合中,并配合setInt()等方法设置?的值,再executeQuery()方法判断sql语句是否执行成功,并将结果放入,再用ArrayList集合接收查询得到的值)

		con=DbUtils.getConnection();
		String sql="select * from pet where color=?";
		ps=con.prepareStatement(sql);
		ps.setString(1, strcolor);
		rs=ps.executeQuery();//返回布尔类型,代表语句是否执行成功
		List<Pet> l =new ArrayList<Pet>();
			while(rs.next())
			{
				Pet p=new Pet();
				p.setId(rs.getInt("id"));
				p.setColor(rs.getString("color"));
				p.setMoney(rs.getInt("money"));
				l.add(p);
			}

(5)、事务
在连接数据库的代码之后,使用con.setAutoCommit(false)方法,并将其初始值设置成fasle,则整个sql语句会预先执行,此时,数据库的数据还没与真正的改变,当我们再提交事务时,数据才会真正的改变,如果出现问题不想提交时,需要回滚事务。
遇到执行的方法就调用con.commit()方法提交事务,然后在catch代码块中再次用try代码块执行con.rollback()方法,回滚事务。


5.将结果集中的数据根据列名取出并赋值给相应的对象属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值