JDBC数据库编程之数据库连接及操作数据
jdbc:全称java Database Connectivity java数据库连接。
起初,基于某数据库产品的开发,必须了解某数据库的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等),需要显式的释放
import java.sql.*; /** * 连接数据库并更新数据 * @author Administrator * */ public class Demo4 { public static void main(String[] args) { Connection conn=null; Statement stmt=null; //添加驱动 //注册 try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //连接 String url="jdbc:sqlserver://113.76.113.84:1433;DatabaseName=JavaStu"; String user="sa"; String password="qsnprac157"; conn=DriverManager.getConnection(url, user, password); //创建语句对象 stmt=conn.createStatement(); //向表中更新(添加、修改、删除)数据 String sql="insert into Student values(‘1202020001‘,‘cw‘,20)"; //String sql2="delete from Student where Sname=‘cw‘"; //String sql3="update Student set Sname=‘cw‘ where Sno=1202020002"; stmt.executeUpdate(sql); }catch(ClassNotFoundException e ){ e.printStackTrace(); }catch(SQLException e){ e.printStackTrace(); } //关闭资源 finally{ try{ if(stmt!=null){ stmt.close(); stmt=null; } if(conn!=null){ conn.close(); conn=null; } }catch(SQLException e){ e.printStackTrace(); } } } }
参考资料:尚学堂马士兵视频教程。