数据库链接JDBC

通过java_JDBC链接数据库
jdbc:
    java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)
    驱动:jdbc的实现类.由数据库厂商提供.
    我们就可以通过一套规范操作不同的数据库了(多态)
    jdbc作用:
        连接数据库
        发送sql语句
        处理结果
步骤:
     导入jar包:
  1. 注册驱动
  2. 获取链接
  3. 获取执行者
  4. 执行sql语句
  5. 对结果进行操作
jdbc-api详解:
    所有的包 都是 java.sql 或者 javax.sql
 
    DriverManager:管理了一组jdbc的操作 类
        常用方法:
            了解:注册驱动   
                static void registerDriver(Driver driver) :
                    通过查看 com.mysql.jdbc.Driver的源码 有如下代码
                        
 static {
      try {
             java.sql.DriverManager.registerDriver(new Driver());//这段代码我们已经写过
         } catch (SQLException E) {
               throw new RuntimeException("Can't register driver!");
          }
 }
 
                    驱动注册了两次.我们只需要将静态代码块执行一次,类被加载到内存中会执行静态代码块,并且只执行一次.
                    现在只需要将类加载到内存中即可:
                        方式1:
                            ★Class.forName("全限定名");//包名+类名   com.mysql.jdbc.Driver
                        方式2:
                            类名.class;
                        方式3:
                            对象.getClass();
 
            掌握:获取连接
                static Connection getConnection(String url, String user, String password)
                    参数1:告诉我们连接什么类型的数据库及连接那个数据库
                                协议:数据库类型:子协议 参数
                        mysql:    jdbc:mysql://localhost:3306/数据库名称
                        oracle:    jdbc:oracle:thin@localhost:1521@实例
 
                    参数2:账户名 root
                    参数3:密码
 
    (了解)Driver:java.sql 接口 驱动
    Connection:连接 接口
        常用方法:
            获取语句执行者:
                (了解)Statement createStatement() :获取普通的语句执行者  会出现sql注入问题
                ★PreparedStatement prepareStatement(String sql) :获取预编译语句执行者
                (了解)CallableStatement prepareCall(String sql):获取调用存储过程的语句执行者
 
            了解:
                setAutoCommit(false) :手动开启事务
                commit():提交事务
                rollback():事务回滚
 
    Statement:语句执行者 接口
    PreparedStatement:预编译语句执行者 接口
        常用方法:
            设置参数:
                setXxx(int 第几个问号,Object 实际参数);
                    常见的方法:
                         setInt
                         setString
                         setObject
 
            执行sql:
                 ResultSet executeQuery() :执行 r 语句 返回值:结果集
                 int executeUpdate() :执行cud 语句 返回值:影响的行数
 
    ResultSet:结果集 接口
        执行查询语句之后返回的结果
            常用方法:
                boolean next():判断是否有下一条记录,若有返回true且将光标移到下一行,若没有呢则返回false
                    光标一开始处于第一条记录的上面
 
                获取具体内容
                    getXxx(int|string)
                        若参数为int :第几列
                        若参数为string:列名(字段名)
                    例如:
                        获取cname的内容可以通过
                            getString(2)
                            getString("cname")
                    常用方法:
                        getInt
                        getString 也可以获取int值
                        getObject 可以获取任意
 
 1 //代码演示:
 2 //我们封装一个工具类来提高代码的扩展性
 3 public class JDBCUtils {
 4           private static final String url="jdbc:mysql://localhost:3306/test";
 5           private static final String username="root";
 6           private static final String password = "root";
 7           /**
 8            * 注册驱动
 9            */
10           static {
11               try {
12                    Class.forName("com.mysql.jdbc.Driver");
13               } catch (ClassNotFoundException e) {
14                    // TODO Auto-generated catch block
15                    e.printStackTrace();
16               }
17           }
18           /**
19            * 获取链接
20            * @return
21            */
22           public static Connection getConnention() {
23               Connection connection=null;
24               try {
25                    connection = DriverManager.getConnection(url,username,password);
26               } catch (SQLException e) {
27                    // TODO Auto-generated catch block
28                    e.printStackTrace();
29               }
30               return connection;
31           }
32           /**
33            * 通过可变参关闭连接
34            * @param objects
35            */
36           public static void colse(Object ...objects) {
37               try {
38                    if (objects!=null && objects.length>0) {
39                         for(int i = 0;i<objects.length;i++) {
40                              if(objects[i] instanceof Statement) {
41                                   ((Statement)objects[i]).close();
42                              }else if(objects[i] instanceof Connection) {
43                                   ((Connection)objects[i]).close();
44                              }
45                         }
46                    }
47               } catch (Exception e) {
48                    e.printStackTrace();
49               }
50           }
51 }
 1 // 对工具类的使用
 2 public class JDBCDemo {
 3      public static void main(String[] args) {
 4           //获取链接
 5           Connection connection = JDBCUtils.getConnention();
 6           //获取执行者
 7           ResultSet resultSet=null;
 8           PreparedStatement pStatement=null;
 9  
10           //定义将要执行的sql语句
11           String sql = "select * from products where cno=?";
12           //存放结果集对象
13           List<Product> list = new ArrayList<Product>();
14           try {
15               //获取语句执行者对象
16               pStatement = connection.prepareStatement(sql);
17               //设置参数
18               pStatement.setInt(1, 1);
19               //执行查询操作
20               resultSet = pStatement.executeQuery();
21               //遍历结果集
22               while (resultSet.next()) {
23                    Product product = new Product();
24                    product.setId(resultSet.getInt("pid"));
25                    product.setName(resultSet.getString("pname"));
26                    product.setPrice(resultSet.getInt("price"));
27                    product.setNum(resultSet.getInt("pnum"));
28                    product.setCno(resultSet.getInt("cno"));
29                    product.setTimestamp(resultSet.getTimestamp("pdate"));
30                    list.add(product);
31               }
32           } catch (SQLException e) {
33               // TODO Auto-generated catch block
34               e.printStackTrace();
35           }finally {
36               //关闭连接
37               JDBCUtils.colse(pStatement,connection);
38           }
39           for (Product product : list) {
40               System.out.println(product);
41           }
42      }
43 }

 

 
 
posted @ 2017-09-01 21:37  赵安之  阅读(168)  评论(0编辑  收藏  举报