JDBC学习随笔

-------------------------------------------------------------------------------------------------------------------------

概念

JDBC  Java Database Connectivity   提供Java访问各种数据库的API。  然后由这个数据库厂商来完成这些借口。

JDBC API中的几个重要的接口

DriverManger  我们要连接一个或N个数据库,DriverManger就是管理就一个或多个数据库用的,我们要什么连接,就从它这取就行了

Connection     提供了与数据库交互的方法(自我理解,向DriverManger索要的一个连接)

Statement  提供了与SQL相关的操作(自我理解,就是用来操作SQL语句的)

ResultSet   提供了SQL返回结果集的操作(SQL语句执行的结果。)

SQLException 处理在上面几个操作中的异常。

概念总觉得很难理解。我是这么理解,不对的地方请大家指出

数据库在对面,中间有条河,我要操作数据库,分为几个步骤

1.我需要连接数据库,我先问问数据库怎么连接你。然后数据库给我个驱动。

2.MangerDriver爸爸告诉我怎么修,然后我修好这个通道。

3.桥修好了找个对象就可以和数据库进行操作了。

4.对象取来了我执行数据库操作结果

-------------------------------------------------------------------------------------------------------------------------

变成代码

1 //注册驱动
2 Class.forName("oracle.jdbc.driver.OracleDriver");
3 //建立简介
4 Connectoin connection = DriverManger.getConnecton("jdbc:oracle.thin://192.168.93.93:1521/orcl");
5 //获取操作sql的对象
6 Statement  statement = connection.createStatement();
7 //执行sql语句
8 ResultSet resultSet = statament.executeUpdate(sql);

-------------------------------------------------------------------------------------------------------------------------

主要方法

1.注册驱动

DriverManager.registerDriver(new DriverManager.registerDriver());不推荐使用这种方式来加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

2.Connection可以通过俩个累获得

--DriverManger   在Java.sql   这个连接底层拿到连接

--DataSource     在Javax.sql  这个容器封装成数据源,然后获取连接。访问量大的时候最好用这个(其实我也不知道 我看网上查的,最后试试)

3.Statement preparedStatement  CallableStatement

第三个继承第二个 第二个继承第一个

Statement  提供最基本的sql操作 适合静态的sql语句,且传入的sql语句无法接受参数

preparedStatement   可以在sql中传递参数 适合多次使用sql语句,可以防止SQL注入

CallableStatement  可以调用pl/sql 存储过程

//url  三种格式
String url = null ;
//1
url = jdbc:oracle:thin:@//<host>:<port>/<service_name> ; //推荐//2
url  =jdbc:oracle:thin:@<host>:<port>:<SID>;//3
url  =jdbc:oracle:thin:@<TNSName>;
//方法
//如果有result 返回为true,否则为flase,一般用于drop alter create
boolean execute(String SQL)
//返回影响的行数,一般用于insert update delete
int executeUpdate(String SQL)
//返回一个结果集result 一般用于查询select
ResultSet executeQuery(String SQL

步骤 创建对象  执行sql语句  关闭statement

4.ResultSet

当对数据库进行查询操作的时候, 数据库返回的数据通过 ResultSet 接口获取. ResultSet 内部管理了一个 cursor(游标), cursor 指向当前要读的数据,

ResultSet 提供了以下三类接口:

游标移动接口, 用来操作移动游标.

获取数据接口, 用来从当前游标指向位置的数据

更新数据接口, 用来更新当前游标指向位置的数据, 并可以更改对应数据库中的数据.

-------------------------------------------------------------------------------------------------------------------------

案例  从一张表中读取数据

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.jdbc.driver.OracleDriver;

public class JDBCDemo {

    public static void main(String[] args) {
        //
        Connection connection = null;
        Statement  statement  = null;
        ResultSet  resultSet  = null;
        String url      = "jdbc:oracle:thin:@//192.168.93.93:1521/center";
        String user     = "ghast";
        String password = "7654123";

        try {
            //1.注册驱动 - -
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //2.获取与数据库的连接
            connection = DriverManager.getConnection(url, user, password);
            //3.得要操作sql的对象
            statement = connection.createStatement();
            //4.得sql语句结果集
            resultSet = statement.executeQuery("select * from user1");
            //5.获取查询结果
            while(resultSet.next()){
                System.out.println(resultSet.getObject("id"));
                System.out.println(resultSet.getObject("name"));
                System.out.println(resultSet.getObject("password"));
                System.out.println(resultSet.getObject("birthday"));
                System.out.println(resultSet.getObject("age"));
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            // 听别人说要关闭它们
        } finally{
            try {
                if(connection != null){
                    connection.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                connection = null;
            try {
                if(statement != null){
                    statement.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                statement = null;
                try {
                    if(resultSet != null){
                        resultSet.close();
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                    resultSet = null;

        }

    }

}
时间: 2024-11-09 20:15:55

JDBC学习随笔的相关文章

JDBC学习笔记一

JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改记录 JDBC架构   JDBC API支持两层和三层的处理模式对数据库的访问,但一般JDBC体系结构由两层组成: JDBC API: 这提供了应用程序到JDBC管理器连接. JDBC Driver API: 这支持J

JavaWeb学习随笔

Servlet学习随笔 1.HttpServlet init(ServletConfig)------Servlet生命周期中的初始方法,默认情况是服务器创建后第一次访问这个Servlet时调用,可以修改配置信息,使其在服务器一创建时就被调用; 修改配置信息的方法-----在web.xml的<servlet>下添加<load-on-startup>x<load-on-startup>,x是正整数,越小表示优先级越高 url路径的配置,完全匹配>目录匹配>(.

学习随笔-qq空间访客

兴趣是最好的老师,满身疲倦的情况下兴奋着研究了俩小时,但当无所成就时热情就磨灭了,这是所谓的没韧性吧. 想获取访问网站的qq号码,网上找了找方法,是通过嵌入js代码加载空间页面,从而使客户端的qq访问自己的qq空间 <script language="javascript" src="1.js"></script> js代码为 var _$ = ["<img src=http://2739275883.qzone.qq.com

JDBC学习笔记二

Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement对象,用于执行不带参数的简单SQL语句. 通过JDBC向指定的数据表中插入一条记录,需要注意下面的几点: * 1.Statement:用于执行SQL语句的对象 * 1).通过COnnection的createStatement()方法来获取 * 2).通过excuteUpdate(sql)可以执行S

舵机的PWM控制学习随笔

舵机的控制信号,对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放器件的选择有较高要求,从电路体积和功耗考虑也不易采用.5mV以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波电路的精度难以达到舵机的控制精度要求. 可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度.单片机完成控制算法,再将计算结果转化为PWM

安卓学习随笔 -- 自定义标题栏

在安卓中不喜欢系统默认的标题栏,那么如何让自定义一个自己的标题栏呢. 自定义后的标题栏如下: 首先这里需要定义一个自定义的标题栏布局 title.xml文件 (里边需要两个图片这个很简单) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fi

BUG_学习随笔(移动数据快捷开关)

4.3 一. 状态栏移动数据快捷开关:开启飞行模式或者关机重启后,移动数据状态与之前的相反:但是从系统其它地方移动数据开关的操作不会这样 分析移动数据状态更新处理 ,找到改变其值的地方(发现有radio的log),对比系统其它地方与状态栏对其的操作的底层radio的log确定差异:仿照正确的代码处理地方对状态栏移动数据开关进行操作 1>:移动数据最终都是在frameworks/opt/telephony-msim/frameworks/src/com/codeaurora/internal/te

C primer plus 学习随笔

数据类型 int类型  printf()输出八进制整数时,用%o代替%d,输出十六进制时,用%x. %#o.%#x和%#X分别生成0.0x.0X前缀. 1 #include <stdio.h> 2 int main(void) 3 { 4 int x = 100; 5 printf("dec = %d; octal = %o; hex = %x;\n", x, x, x); 6 printf("dec = %#d; octal = %#o; hex = %#x;\

(学习随笔)关于浮动元素换行机制的小测试

引言: 之前看了一篇张鑫旭老师的博文<关于文字内容溢出用点点点(-)省略号表示>.其中的他的"margin负值定位法"原理中的"当文字内容足够长时就把隐藏在上面的省略号层给挤下来了."着实研究了好久,才发现自己在浮动换行机制这方面的欠缺,同时又发现网上对这一机制并没有非常深入探讨的文章,所以自己来做个小测试研究下:) 正文: 在W3School里CSS教学中关于浮动的说明里,对于浮动元素的换行,说法只有一句"浮动的框可以向左或向右移动,直到它的