Mysql数据库与sql语言(四)---jdbc

一.JDBC简介

jdbc(java DateBase connection):java数据库连接.是建立数据库与java代码的连接桥梁.

二.配置jdbc的步骤

使用框架的话,直接在xml文件里配置就可以了.在这里写下在java代码连接数据库的步骤

(1)首先加入jar包并build path

mysql-connector-java-5.0.8-bin.jar 这个包可以自行网上下载,

(2)加载驱动
 try{   
    //加载MySql的驱动类   
    Class.forName("com.mysql.jdbc.Driver") ;   
    }catch(ClassNotFoundException e){   
    System.out.println("找不到驱动程序类 ,加载驱动失败!");   
    e.printStackTrace() ;   
    }   

(3)建立连接
url:jdbc:mysql://localhost:3306/house
端口号3306是安装的时候选择的
house就是你在数据库建立的数据库名称
user:root
password:root
用户名跟密码是自己当初安装数据库自行设计的
Connection con=DriverManager.getConnection(url,user,password);

(4)获取执行sql语言的对象
sql="  ";
PreparedStatement  p=con.preparedStatement(sql);

(5)执行sql语句
增删改 
p.executeUpdate()
列如:sql语句sql="INSERT into employees values (?, ?, ?)");    
  PreparedStatement  p=con.preparedStatement(sql);
  for (int n = 0; n < 100; n++) {       
 ps.setString(name[n]);       
 ps.setLong(id[n]);       
 ps.setInt(salary[n]);       
 ps.executeUpdate(); 
  }
顺便讲解下PreparedStatement 与 Statement的区别
  (1)JDBC驱动的最佳化是基于使用的是什么功能. 选择PreparedStatement还是Statement取决于你要怎么使用它们. 对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用PreparedStatement是最好的.  PreparedStatement的第一次执行消耗是很高的. 它的性能体现在后面的重复执行. 例如, 假设我使用Employee ID, 使用prepared的方式来执行一个针对Employee表的查询. JDBC驱动会发送一个网络请求到数据解析和优化这个查询. 而执行时会产生另一个网络请求. 在JDBC驱动中,减少网络通讯是最终的目的. 如果我的程序在运行期间只需要一次请求, 那么就使用Statement. 对于Statement, 同一个查询只会产生一次网络到数据库的通讯. 
Update大量的数据时, 先Prepare一个INSERT语句再多次的执行, 会导致很多次的网络连接. 要减少JDBC的调用次数改善性能, 你可以使用PreparedStatement的AddBatch()方法一次性发送多个查询给数据库. 例如, 让我们来比较一下同样引用上面的例子. 
例 1: 多次执行
  PreparedStatement ps = conn.prepareStatement(    "INSERT into employees values (?, ?, ?)");     
 for (n = 0; n < 100; n++) {      
 ps.setString(name[n]);    
 ps.setLong(id[n]);     
 ps.setInt(salary[n]);    
 ps.executeUpdate();   }   
例 2: 使用Batch   PreparedStatement ps = conn.prepareStatement(      "INSERT into employees values (?, ?, ?)");      for (n = 0; n < 100; n++) {       
 ps.setString(name[n]);    
 ps.setLong(id[n]);    
 ps.setInt(salary[n]);     
ps.addBatch();   }   
ps.executeBatch();     
在例 1中, PreparedStatement被用来多次执行INSERT语句. 在这里, 执行了100次INSERT操作, 共有101次网络往返. 其中,1次往返是预储statement, 另外100次往返执行每个迭代. 在例2中, 当在100次INSERT操作中使用addBatch()方法时, 只有两次网络往返. 1次往返是预储statement, 另一次是执行batch命令. 虽然Batch命令会用到更多的数据库的CPU周期, 但是通过减少网络往返,性能得到提高. 记住, JDBC的性能最大的增进是减少JDBC驱动与数据库之间的网络通讯.
(2)最主要的就是安全问题,防止sql的注入
在后面加入 or 1=1;因为数据库进行判断的时候select * from user where user=' 'and password=' ' or 1=1;
这个时候数据库还是能通过的,但是你用preparestament可以避免这个.' 
查询
 ResultSet rs=p.executeQuery(sql);
输出结果集的内容:
while(rs.next()){
xx 变量名=rs.getxx(列名或者列序号);
举例:
String name = rs.getString("name") ;       
 String pass = rs.getString(1) ; // 此方法比较高效  
(列是从左到右编号的,并且从列1开始)
}
(6)执行完需要关闭jdbc对象
    1、关闭记录集         2、关闭声明         3、关闭连接对象             
 
try {
		  if (rs != null) {
				rs.close();//关闭查询结果集rs对象
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (p != null) {
				p.close();//关闭数据库对象
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (con != null) {
				con.close();
			}//关闭连接对象
		} catch (SQLException e) {
			e.printStackTrace();
		}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值