第十章:JDBC
一.JDBC:Java程序连接数据库
二.驱动类型:
ODBC:桥连(微软提供)
JDBC: 直连(SUN推出标准,由数据库厂商自行编写驱动程序。)
三.访问数据库的步骤:
通知同学来上课
拨号 ---- 加载驱动
接通 ---- 建立连接
说话(快来上课) ---- 执行SQL语句
得到答复(马上来) ---- 得到结果
挂电话 ---- 关闭连接
四.数据库操作接口与类:java.sql包中
Class(类):加载驱动
DriverManager(类):驱动管理器。作用:得到连接
Connection(I接口):连接。作用:得到执行SQL语句对象
Statement(I):SQL执行对象。作用:执行SQL语句,查询时得到结果集,更新时得到影响的行数。
ResultSet(I):结果集。作用:存储查询时返回数据。
五.使用ODBC代码编写步骤:
1.配置ODBC数据源
2.导包
3. Java代码加载驱动
4.从驱动管理中得到连接
5.从连接中得到SQL语句执行对象
6.执行SQL后的结果存储
7.关闭连接
关于JDBC的一些基础的总结!
一:JDBC的一些关键的对象
1:Connection
Connection对象是我们与数据库进行连接的对象。//(重点掌握)
2:Statement
Statement对象用于执行不带参数的简单SQL语句。//(重点掌握)
例:Connection conn = null;
Statement stmt = null;
Class.forName("省略"); //加载驱动
conn = DriverManager.getConnection("省略");
DriverManager类 管理一组 JDBC 驱动程序的基本服务。 //创建连接
getConnection()方法是试图建立到给定数据库 URL 的连接
stmt = conn.createStatement(); createStatement()方法创建一个 Statement 对象来将 SQL 语句发送到数据库//创建语句对象
stmt.executeUpdate("delete from wch where 姓名='胡雷'"); //executeUpdate用于 增加 删除 修改 数据库。
stmt.executeQuery("select * from users"); //executeQuery 用与 查询 数据库
3: PreparedStatement
PreparedStatement对象用于执行带或不带IN参数的预编译SQL语句。当SQL语句将运行许多次时,可以使用它。
使用 Connection.PreparedStatement()来建立PreparedStatement的对象 //(重点掌握)
例:Connection conn = null
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("省略"); //加载驱动
conn = DriverManager.getConnection("省略"); //创建连接
stmt = conn.createStatement(); //创建语句对象
pstmt = conn.prepareStatement("select * from users where uid = ?"); //执行SQL语句
pstmt.setInt(1, uid);
rs = pstmt.executeQuery(); //得到结果
if (rs.next()) {
System.out.print(rs.getInt("uid"));
System.out.print(rs.getString("username"));
System.out.print(rs.getString("pwd"));
System.out.print(rs.getString("uaddress"));
System.out.print(rs.getString("uclass"));
System.out.println();
}
4:Resultset
Resultset 装载查询结果。用语SQL行中数据的访问,它是通过一套get方法提供了对这些行中数据的访问。
二:连接数据库的6个步骤:
1:加载驱动。(具体代码:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");)。
2:创建连接(URL:DriverManager.getConnection(
"jdbc:sqlserver://localhost:1433;databasename=数据库名", "sa","123456");)。
3:创建语句对象(Statement.createStatement();)
4: 执行SQL语句 (Statement.executeUpdate("delete from wch where 姓名='胡雷'");
(Statement.executeQuery("select * from users");)
5: 获得结果
6: 关闭连接 (写在finally里 要注意先开的后关,后开的先关这个顺序)
- package org.lgc;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class Test {
- public static void updateDemo(){ //方法更新SQL语句
- try {
- // 1.加载驱动。
- Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
- // 2.得到连接。
- Connection conn = DriverManager.getConnection("jdbc:odbc:myDB");
- // 3.得到SQL语句执行对象。
- Statement stmt = conn.createStatement();
- // 4.执行SQL语句并得到返回结果。
- int len = stmt
- .executeUpdate("update stuInfo set stuAddress='襄阳11' where stuNo = 'svse007'");
- System.out.println("影响的行数为:"+len);
- //5.关闭
- stmt.close();
- conn.close();
- } catch (ClassNotFoundException e) { //捕获异常处理
- e.printStackTrace();
- } catch (SQLException e) { //多重异常处理
- e.printStackTrace();
- }
- }
- public static void insertDemo(){ //插入方法
- try {
- Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动
- Connection conn = DriverManager.getConnection("jdbc:odbc:myDB");//获取连接
- Statement stmt = conn.createStatement();//得到SQL语句并进行执行
- String sql = "insert into stuInfo values('svse111',1,'郭襄','女',18,'襄阳')";// 4.执行SQL语句并得到返回结果。
- int len = stmt.executeUpdate(sql);
- System.out.println("影响的行数为:"+len);
- //关闭连接
- stmt.close();
- conn.close();
- } catch (ClassNotFoundException e) {//捕获异常进行异常处理
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- public static void selectDemo(){ //查询SQL语句
- try {
- Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// 1.加载驱动。
- Connection conn = DriverManager.getConnection("jdbc:odbc:myDB");// 2.得到连接。
- Statement stmt = conn.createStatement();// 3.得到SQL语句执行对象。
- String sql = "select * from stuInfo";
- ResultSet rs = stmt.executeQuery(sql);
- //使用while取出rs中的结果
- System.out.println("学号/t班级/t姓名/t性别/t年龄/t座位/t地址/n");
- while(rs.next()){//循环
- // String stuNo = rs.getString(1);//1表示第一列
- // int classID = rs.getInt(2);
- // String stuName = rs.getString(3);
- // String stuSex = rs.getString(4);
- // int stuAge = rs.getInt(5);
- // int stuSeat = rs.getInt(6);
- // String stuAddress = rs.getString(7);
- String stuNo = rs.getString("stuNo");//使用数据中表的字段名
- int classID = rs.getInt("classID");
- String stuName = rs.getString("stuName");
- String stuSex = rs.getString("stuSex");
- int stuAge = rs.getInt("stuAge");
- int stuSeat = rs.getInt("stuSeat");
- String stuAddress = rs.getString("stuAddress");
- System.out.println(stuNo+"/t"+classID+"/t"+stuName+"/t"+stuSex+"/t"+stuAge+"/t"+stuSeat+"/t"+stuAddress);
- }
- //关闭连接
- rs.close();
- stmt.close();
- conn.close();
- } catch (ClassNotFoundException e) { //异常处理
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- //updateDemo();
- //insertDemo();
- //执行方法
- selectDemo();
- }
- }