jdbc:全称java Database Connectivity java数据库连接。 j2ee一部分
起初,基于某数据库产品的开发,必须了解某数据库的api。通过c/c++直接访问某数据库的接口来编程。但无法实现跨数据库平台开发。
后来,通过统一数据库接口实现跨平台开发,例如odbc,ado.net。而jdbc是java访问数据库平台的统一接口.
jdbc在不同数据库平台的移植不是完全的。
jdbc对于java程序一端,是统一的一个接口。对于数据库产品连接端,不是统一的。(由厂商提供)
sql六大语句:
Select
Select * from T where … …
Insert
Insert into T values(… …)
Create
Create table T(… …)
Delete
Delete from T where… …
Update
Update T set t1=… and t2=…
Drop
Drop table T
JDBC 连接SQL SERVER
1添加数据库产品相关类库。(数据库驱动包)。配置驱动包的环境变量(ClassPath)
myeclipse:项目鼠标右键project->Properties->Java Build
Path->Libraries->Add External JARs->找到sqljdbc4加载
为什么将数据库驱动包放入项目而不是整个系统中?
放入系统中,项目与项目会产生影响,不同版本的jar包会产生冲突
2向DriverManager注册
driverManager:管理数据库的基本服务,若要连接某数据库,需要向DriverManager注册。(实例化时自动注册)
3连接数据库对象
import java.sql.*;/**
* JDBC 连接SQL SERVER
* 2014-5-5
* @author Administrator
*/public class Demo1 {
public static void main(String[] args) throws Exception {
//1添加数据库产品相关类库。
//2向DriverManager注册。(实例化时自动注册)
//Class是java.Lang包中的类,调用方法forName,根据字符串创建一个实例
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//new com.microsoft.sqlserver.jdbc.SQLServerDriver();//3连接数据库对象
////jdbc:sqlserver://ip地址:端口;DatabaseName=数据库名称",账号,密码
String url="jdbc:sqlserver://183.33.129.192:1433;DatabaseName=JavaStu";
Connection conn=DriverManager.getConnection(url, "sa", "qsnprac157");
System.out.println("连接数据库成功");
}}
执行查询sql语句
1通过连接创建语句对象
2通过语句对象执行查询sql语句,返回结果集
3循环取得结果集内容
4关闭资源(后打开的先关)
import java.sql.*;
/**
* 连接数据库并执行查询语句(不合理版)
* 2014-5-5
* @author Administrator
*
*/
public class Demo2 {public static void main(String[] args, String Sno, String Ssex) throws Exception{
//添加驱动包
//注册
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//连接
String url="jdbc:sqlserver://113.76.233.233:1433;DatabaseName=StuManage";
String user="sa";
String password="qsnprac157";
Connection conn=DriverManager.getConnection(url, user, password);//创建语句对象(作用:将 SQL 语句发送到数据库)
Statement stmt =conn.createStatement();
//执行给定的 SQL 语句,并将结果集返回给 ResultSet 对象
ResultSet rs=stmt.executeQuery("Select * from Student");
//循环遍历取得结果集
while(rs.next()){
System.out.println(rs.getInt("Sage"));
System.out.println(rs.getString("Ssex"));
}//关闭资源
rs.close();
stmt.close();
conn.close();}
}
DriverManager类:管理驱动程序的基本服务(删除、查找、注册驱动程序,建立数据库连接,获取、更新日志,设置)
Connection接口:与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果
Statement接口:执行静态 SQL 语句并返回它所生成结果的对象。
ResultSet接口:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
上一个代码的问题:如果在遍历的时候出现异常,那么资源无法关闭,逐渐积累,大量内存被占用。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 连接数据库并执行查询语句(完美版)
* 2014-5-5
* @author Administrator
*
*/
public class Demo3 {public static void main(String[] args, String Sno, String Ssex) {
Connection conn=null;
Statement stmt = null;
ResultSet rs=null;
//添加驱动包
//注册
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//连接
String url="jdbc:sqlserver://113.76.233.233:1433;DatabaseName=StuManage";
String user="sa";
String password="qsnprac157";
conn=DriverManager.getConnection(url, user, password);//创建语句对象(作用:将 SQL 语句发送到数据库)
stmt =conn.createStatement();
//执行给定的 SQL 语句,并将结果集返回给 ResultSet 对象
rs=stmt.executeQuery("Select * from Student");
//循环遍历取得结果集
while(rs.next()){
System.out.println(rs.getInt("Sage"));
System.out.println(rs.getString("Ssex"));
}
}catch(ClassNotFoundException e){
e.printStackTrace();}catch(SQLException e){
e.printStackTrace();
}finally{
try{
//关闭资源
if(rs!=null){ //判断是否初始化成功(未初始化的话会报异常)
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close(); //回收操作系统资源
stmt=null; //垃圾回收机制回收内存资源
}
if(conn!=null){
conn.close();
conn=null;
}}catch(SQLException e){
e.printStackTrace();
}}
}
}
java有垃圾回收机制,为什么还要使用close()方法回收垃圾
垃圾回收机制只能回收内存资源。其他资源(io设备,进程,cpu等),需要显式的释放
参考资料:尚学堂马士兵视频教程。