学习笔记一:JDBC

---整理者:唐昭文(有错误的地方请指出来)

 

1.1.1   java中不同数据库连接字符串

.连接oracle数据库
    Class.forName("oracle.jdbc.driver.OracleDriver"); 
    String url="jdbc:oracle:thin:@服务器ip:1521:数据库名称";
    Connection conn=DriverManager.getConnection(url,"用户名","密码");

.连接mssql数据库sql server 2005

     Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
     String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名称";

     Connection conn=DriverManager.getConnection(url,"用户名","密码");

三:连接MySQL数据库 (com.mysql.jdbc.Driver)
     Class.forName("com.mysql.jdbc.Driver "); 
     String url ="jdbc:mysql://localhost:3306/数据库名称;
     Connection conn= DriverManager.getConnection(url用户名,密码);       

四.连接DB2数据库
     Class.forName("com.ibm.db2.jdbc.app.DB2Driver "); 
     String url="jdbc:db2://localhost:5000/数据库名称";

     Connection conn= DriverManager.getConnection(url用户名,密码); 

 

1.1.2 Java中采用jdbc连接数据库实例

//Oracle
import java.sql.*;
//重点
public class TestJDBC {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //加载驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //加载驱动第二种写法
            //new oracle.jdbc.driver.OracleDriver();
            //得到连接
            //"jdbc:oracle:thin:@127.0.0.1:1521:MYORA1" 是数据库的连接串,不同的数据库连接串不同
            conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:MYORA1", "scott", "tzw1992");
            stmt = conn.createStatement();
            rs = stmt.executeQuery("select * from dept"); 
            while (rs.next()) {
                System.out.println(rs.getString("deptno"));
                System.out.println(rs.getInt("deptno"));
            }
        } catch (ClassNotFoundException e) {
            System.out.println("驱动加载不成功!");
        } 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();
            }
        }
    }
}

 

 

1.1.3 将数据库的连接封装成一个类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
//这个类的作用为对数据库的操作进行封装,对一些常用的操作进行封装可使代码更简洁
public class DB {
    //连接数据库
    public static Connection getConn() {
        Connection conn = null;
        try {
            Class.forName( "com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String url = "jdbc:sqlserver://localhost:1434;databaseName=班费管理系统数据库";
            String userName = "sa";
            String passWord = "123456789";
            conn = DriverManager.getConnection(url, userName, passWord);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    //创建Statement对象
    public static Statement createStmt(Connection conn) {
        Statement stmt = null;
        try {
            stmt = conn.createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return stmt;
    }
    //创建ResultSet对象,用于执行静态的sql语句
    public static ResultSet executeQuery(Statement stmt, String sql) {
        ResultSet rs = null;
        try {
            rs = stmt.executeQuery(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }
    //关闭Connection
    public static void close(Connection conn) {
        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
    //关闭Statement
    public static void close(Statement stmt) {
        if(stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt = null;
        }
    }
    //关闭ResultSet
    public static void close(ResultSet rs) {
        if(rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
    }
}
 
 
1.1.4 mysql分页技术
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.tzw.cms.util.DB;
public class FindPaginatedTest {
     public static void main(String[] args) {
         //从第几条开始查询
         int offset;
         //每页显示多少条记录
         int pageSize = 15;
         //显示第几页
         int pageNo = 2;
         //数据库中的数据是从第0条开始计算
        offset = (pageNo - 1) * pageSize;
        
         //链接数据库
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        String sql = "select * from findpaginated limit ?,?";
        
         try {
            Class.forName( "com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/test";
            conn = DriverManager.getConnection(url, "root", "root");
            
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt( 1, offset);
            pstmt.setInt( 2, pageSize);
            rs = pstmt.executeQuery();
            
             while(rs.next()) {
                System.out.println(rs.getInt( "id") + "\\" + rs.getString( "name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {  
            try {
                if(rs != null) {
                   rs.close();
                   rs = null;
               }
                if(pstmt != null) {
                   pstmt.close();
                   pstmt = null;
               }
                if(conn != null) {
                   conn.close();
                   conn = null;
               }
           } catch (SQLException e) {
               e.printStackTrace();
           }        
        }
    }
}
 
 
1.1.5 表中某条记录的ID是由数据库自动生成的,如何在插入这条数据时就能获得这个ID是多少
demo:
        ...此处省略连接数据库的操作...
        String sql = "insert into student(name, age, sex) values(?,?,?)";
        //参数Statement.RETURN_GENERATED_KEYS的作用是取得刚插入的这条数据自动生成的ID
        pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
        pstmt.setString(name);
        pstmt.setInt(age);
        pstmt.setString(sex);
        pstmt.executeUpdate();
        //通过一个ResultSet拿到这个ID
         ResultSet newId = pstmt.getGeneratedKeys();
        ......
 
 
 
 
//获取oracle数据库通过序列自动生成的主键的方法
public  synchronized  int  addOrderForm(OrderFormVo orderForm) {
        int flag = -1;
        //获得链接
        Connection conn = null;
        //sql语句
        String sql1 = "";
        String sql2 = "";
        String sql3 = "";
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;
        PreparedStatement pstmt3 = null;
        ResultSet rs = null;
        
        try {
            conn = DbcpTools.getConnection();     //获得链接
            
            //设置事务
            conn.setAutoCommit(false);
            
            //添加订单信息
            sql1 = "INSERT INTO ORDER_FORM VALUES(SEQ_ORDER.NEXTVAL,?,?,0,SYSDATE)";
            //执行sql语句,Statement.RETURN_GENERATED_KEYS获得数据库自动生成的主键
            pstmt1 = conn.prepareStatement(sql1);    
            pstmt1.setInt(1, orderForm.getPersonNumber());    //赋值
            pstmt1.setInt(2, orderForm.getDeskId());
            pstmt1.executeUpdate();
            
            //获得主键  SELECT SEQ_ORDER.CURRVAL FROM DUAL;
            sql2 = "SELECT SEQ_ORDER.CURRVAL FROM DUAL";
            pstmt2 = conn.prepareStatement(sql2);
            rs = pstmt2.executeQuery();
            if(rs.next()) {
                orderForm.setOrderId(rs.getInt(1));
            }
            
            //添加订单中的菜单信息
            //遍历添加
            for(MenuVo menu : orderForm.getMenus()) {
                sql3 = "INSERT INTO ORDER_MENU VALUES(?,?,?,0)";
                pstmt3 = conn.prepareStatement(sql3);    //执行sql语句
                pstmt3.setInt(1, orderForm.getOrderId());    //赋值
                pstmt3.setInt(2, menu.getMenuId());
                pstmt3.setInt(3, menu.getMenuNum());
                pstmt3.executeUpdate();
            }
            
            conn.commit();//提交
            flag = 1;
        } catch (SQLException e) {
            try {
                conn.rollback();//回滚
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            //关闭资源
            DbcpTools.close(conn, pstmt1);
            try {
                if(pstmt2 != null) {
                    pstmt2.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        return flag;
    }
 
 
 
 
 
 
 
 
 
 
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成汐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值