JDBC(Java Data Base Connectivity)基本用法

一、什么是JDBC

JDBC(Java Database Connection)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准APl。 JDBC API使得开发人员可以使用纯 java 的方式来连接数据库,并执行操作。

sun公司由于不知道各个主流商用数据库的程序代码,因此无法自己写代码连接各个数据库。因此,sun公司决定自己提供一套api,凡是数据库想与Java进行连接的,数据库厂商自己必须实现JDBC这套接口。而数据库厂商的JDBC实现,我们就叫它此数据库的数据库驱动。

二、使用JDBC访问数据库流程

三、JDBC常用接口

1、Driver接口

Driver接口由数据库厂家提供,对于java开发者而言,只需要使用Driver接口就可以了。

在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装载方法。

驱动就是各个数据库厂商实现的sun公司提出的JDBC接口,即对Connection等接口的实现类的jar文件。

装载Mysql驱动

Class.forName("com.mysql.jdbc.Driver");

装载Oracle驱动

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

2、DriverManage接口

一DriverManager是JDBC的管理层,作用于用户和驱动程序之间。

一DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。

3、Connection接口

Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。

DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上。

连接MYSQL数据库:

Connection connection = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");

连接ORACLE数据库:

Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database","user","password");

4、Statement接口

用于执行静态SQL语句并返回它所生成结果的对象。

三种Statement类:

Statement:

由createStatement创建,用于发送简单的SQL语句。(不带参数的)

PreparedStatement:**

继承自Statement接口,由prepareStatement创建,用于发送含有一个或多个输入参数的sql语句。PreparedStatement对象,会进行预编译,比Statement对象的效率更高,并且可以防止SQL注入。我们一般都使用PreparedStatement。

CallableStatement:

继承自PreparedStatement,由方法prePareCall创建,用于调用存储过程

常用的Statement方法:

execute():运行语句,返回是否有结果集。

executeQuery():运行select语句,返回ResultSet结果集。

executeUpdate():运行insert/update/delete操作,返回更新的行数

5、ResultSet接口

Statement执行SQL语句时,返回ResultSet结果集。

ResultSet提供的检索不同类型字段的方法,常用的有:

getString():获得在数据库里varchar、char等数据类型的对象。

getFloat():获得在数据库里Float类型的对象。

getDate():获得在数据库里Date类型的数据。

getBoolean():获得在数据库里面Boolean类型的数据。

依序关闭使用的对象及连接:

ResultSet–>Statement–>Connection

package com.lgd.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo01 {
    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;
        try {
            //1、加载驱动类
            Class.forName("com.mysql.jdbc.Driver");
            //2、建立与数据库的连接
            //连接对象内部其实包含了Socket对象,是一个远程的连接。比较耗时间,这是Connection对象管理的一个要点!
            //真正开发中,为了提高效率,都会使用连接池来管理连接对象。
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","liguodong");
            System.out.println(connection);

            //3、测试指定SQL语句以及SQL注入问题
            //实际应用中比较少
            //1.处理参数不方便
            //2.容易发生SQL注入的危险
            statement = connection.createStatement();

            /*String sqlone = "insert into user(username,pwd,regTime) values (‘苏三‘,54423,NOW())";
            statement.execute(sqlone);*/

            /*String nameString = "宋八";
            String sqltwo = "insert into user(username,pwd,regTime) values(‘"+nameString+"‘,54ds23,NOW())";
            statement.execute(sqltwo);*/

            //测试SQL注入
            String idString = "5 or 1=1";
            String sql1 = "delete from user where id="+idString;
            statement.execute(sql1);//这样会删除所有元素

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            if(statement!=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}
package com.lgd.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo03 {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement statement = null;
        try {
            //1、加载驱动类
            Class.forName("com.mysql.jdbc.Driver");
            //2、建立与数据库的连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","liguodong");

            //3、测试PreparedStatement的基本用法
            String sql1 = "insert into user(username,pwd,regTime) values (?,?,?)";
            statement = connection.prepareStatement(sql1);
            /*statement.setString(1, "周杰伦");//参数索引是从1开始计算,而不是0
            statement.setString(2, "fdsf323");
            statement.execute();*/

            /*
            //也可以使用setObject方法处理参数
            statement.setObject(1, "詹姆斯");
            statement.setObject(2, "fdf323");
            statement.execute();*/

            statement.setString(1, "德玛西亚");
            statement.setString(2, "fdsfds3");
            statement.setDate(3, new java.sql.Date(System.currentTimeMillis()));
            statement.execute();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            if(statement!=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}
package com.lgd.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Demo04 {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement  statement = null;
        ResultSet rs1 = null;
        try {
            //1、加载驱动类
            Class.forName("com.mysql.jdbc.Driver");
            //2、建立与数据库的连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","liguodong");

            //3、测试PreparedStatement的基本用法   ?占位符

            String sql1 = "select * from user where id>?";
            statement = connection.prepareStatement(sql1);
            statement.setObject(1, 2);//把大于2的记录都取出来

            rs1 = statement.executeQuery();

            while(rs1.next()){
                System.out.println(rs1.getInt(1)+"---"+rs1.getString(2)+"---"+rs1.getString(3));
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            //执行顺序resultset-->statement-->connection这样的关闭顺序!一定要将三个try-catch块分开写!
            if(rs1!=null){
                try {
                    rs1.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if(statement!=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}
时间: 2024-10-07 00:48:31

JDBC(Java Data Base Connectivity)基本用法的相关文章

JDBC(Java Data Base Connectivity)高级用法

一.批处理 Batch 对于大量的批处理,建议使用statement,因为PreparedStatement的预编译空间有限,当数据量特别大时,会发生异常. 示例 package com.lgd.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /**

JDBC(Java Data Base Connectivity)

1.JDBC快速入门 一.JDBC(Java Data Base Connectivity) 1.数据库驱动: 数据库厂商为了方便开发人员从程序中操作数据库而提供的一套jar包,通过导入这个jar包就可以调用其中的方法操作数据库,这样的jar包就叫做数据库驱动 2.JDBC: sun定义的一套标准,本质上是一大堆的操作数据库的接口,所有数据库厂商为java设计的数据库驱动都实现过这套接口,这样一来,统一了不同数据库驱动的方法,开发人员只需要学习JDBC就会使用任意数据库驱动了. 六个步骤实现JD

Java基础知识强化25:JDBC(Java Data Base Connectivity,java数据库连接)

JDBC  1.    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名. 2.     有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事.换言之,有了JDBC API,就不必为访问Sybase数据库专门写一

(十七)jdbc(Java Data Base Connectivity,java数据库连接)基础使用

一.JDBC相关概念介绍 1.1 JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加载具体的驱动,就可以操作数据库. 如下图所示: 二.编写JDBC程序 2.1 搭建实验环境 A. 启动mysql数据库,即开启mysql/bin/mysqld.exe. B. 创建数据库,并创建所需的表.如下图(在创建数据库和表的时候请对其编码设置为utf-8编码否则后

JDBC(Java Data Base Connectivity——java数据库连接)

一.定义 数据库驱动:数据库厂商为了方便开发人员从程序中操作数据库而提供的一套jar包,通过导入这个jar包就可以调用其中的方法操作数据库,这样的jar包就叫做数据库驱动 JDBC:sun定义的一套标准,本质上是一大堆的操作数据库的接口,所有数据库厂商为java设计的数据库驱动都实现过这套接口,这样一来同一了不同数据库驱动的方法,开发人员只需要学习JDBC就会使用任意数据库驱动了. 二.使用JDBC连接数据库 方法一: package com.shelly.jdbc; import java.s

mysql 插入中文报错: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value...

总结写在前面, 总结: 当Java通过jdbc链接mysql插入中文时,要保证程序可以正常执行,而且插入的中文不会乱码, mysql服务器端,对数据表(不是数据库)的编码设置,要保证是支持中文的,例如gbk, gb2312, utf-8 jdbc的连接配置,要开启useUnicode=true,并且要设置一个支持中文的编码,不需要跟mysql表的编码保持一致,只需要支持中文就行.例如characterEncoding=utf8 本身的Java文件的编码需要支持中文 ===============

Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'content' a

1.错误描述 org.hibernate.exception.DataException: could not execute statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:69) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert

【转】JAVA网络编程之Socket用法

JAVA网络编程之Socket用法 分类: JAVA2012-08-24 15:56 710人阅读 评论(0) 收藏 举报 在客户/服务器通信模式中,客户端需要主动建立与服务器连接的Socket,服务器端收到客户端的连接请求,也会创建与客户端连接的Socket.Socket可以看做是通信连接两端的收发器,客户端和服务店都通过Socket来收发数据. 1.构造Socket public Socket() 通过系统默认类型的 SocketImpl 创建未连接套接字 public Socket(Str

Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'L

1.错误描述 [ERROR:]2015-06-08 09:49:42,523 [异常拦截] org.hibernate.exception.DataException: error executing work at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:69) at org.hibernate.exception.internal.Stand