Java JDBC基础

Java JDBC

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。


JDBC的四种主要接口:

Java中使用JDBC连接数据库,主要有六个步骤:
1、装载数据库的JDBC驱动程序
2、建立与数据库的连接
3、建立Statement 对象,准备执行SQL语句
4、执行SQL语句
5、处理ResultSet结果集
6、依次关闭ResultSet、Statement和Connection对象

要按照上述步骤处理数据库的数据,我们就要了解下面的四个JDBC接口,这四个接口可以帮助我们链接数据库并且通过Java语言来在数据库中执行SQL语句,然后我们就可以在数据库中进行增删改查操作,并且将获得的数据输出。这四个接口如下:

  1. java.sql.DriverManager:处理驱动程序的调入和管理
  2. java.sql.Connection:负责连接数据库
  3. java.sql.Statement:负责执行数据库 SQL 语句
  4. java.sql.ResultSet:负责存放查询结果

关于处理驱动程序,JDBC针对不同类型的数据库,提供了”驱动程序”的的概念。对于不同的数据库,程序只需要使用不同的驱动厂商驱动连接数据库。以下为常用的几种数据库的驱动程序以及对应的url:

MS SQL Server:驱动程序为:

"com.microsoft.jdbc.sqlserver.SQLServerDriver"

url 为:

 "jdbc:microsoft:sqlserver://[IP]:1433;DatabaseName=[DBName]"

Oracle :驱 动 程 序 为 :

"oracle.jdbc.driver.OracleDriver  " 

url为:

" jdbc:oracle:thin:@[ip]:1521:[sid] "

MySQL 驱动程序为:

com.mysql.jdbc.Driver"   

url为:

"jdbc:mysql://localhost:3306/[DBName]"

JDBC通过Java操作数据库

要想通过Java操作数据库,我们先要与数据库建立连接,然后执行sql语句来操作数据库。在这里,我们以MySql数据库为例来举例。

连接数据库:

//连接数据库的URL,这里我们连接的数据库名称为testdb
private static final String CONNURL = "jdbc:mysql://localhost:3306/testdb";
private static final String USERNAME = "root";//数据库用户名
private static final String PASSWORD = "123456";//数据库密码

//加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
建立连接
Connection con = DriverManager.getConnection(CONNURL, USERNAME , PASSWORD);

通过上述的代码,我们就获得了一个Connection类的实例con,这个con就是我们通过JDBC获取的与数据库的连接。

建立了与数据库的连接之后,我们就要对数据库进行增删改查的操作,这里我们就要使用到java.sql.Statement和java.sql.ResultSet,其中Statement可以帮助我们执行sql语句,而ResultSet可以帮助我们保存sql语句的执行结果。

假设,我们的数据库testdb中有一个person表,person表的字段转换为Java如下:

public class Person
{
    private String name;//姓名
    private int age;//年龄
    private String sex;//性别
}

查找:
我们要对Person表进行查找所有人,就可以使用如下的代码:

    Statement stmt=conn.createStatement();   //创建SQL容器
    String sql="select * from person";   //创建sql语句,查询person表中所有数据
    ResultSet rs=stmt.executeQuery(sql);   //执行sql语句,并且获得结果集
   //遍历结果集
    while( rs.next() ) {   
        System.out.print(rs.getString("name")+"  ");
        System.out.print(rs.getString("age")+"  ");
        System.out.print(rs.getString("ses")+"  ");
        System.out.println();
    }
    //关闭连接
    rs.close();
    stmt.close();    
    conn.close();   

通过上述的代码,我们就可以查询到表person中的所有数据,并且将数据输出。

条件查询
如果我们要查找某个人,那么我们可以在sql语句中加入where条件,来在数据库中查找某个人:

    Statement stmt=conn.createStatement();   //创建SQL容器
    String sql="select * from person where name = "dasyang";   //创建sql语句,查询person表中叫dasyang的人
    ResultSet rs=stmt.executeQuery(sql);   //执行sql语句,并且获得结果集
   //遍历结果集
    while( rs.next() ) {   
        System.out.print(rs.getString("name")+"  ");
        System.out.print(rs.getString("age")+"  ");
        System.out.print(rs.getString("ses")+"  ");
        System.out.println();
    }
    //关闭连接
    rs.close();
    stmt.close();    
    conn.close();   

删除

    Statement stmt=conn.createStatement();   //创建SQL容器
    String sql="delete from person where name = "dasyang" ";   //创建sql语句
    stmt.executeQuery(sql);   //执行sql语句
    //关闭连接
    rs.close();
    stmt.close();    
    conn.close();   

增加

    Statement stmt=conn.createStatement();   //创建SQL容器
    String sql="insert into person (name,age,sex) values("dasyang",20,"man")";   //创建sql语句
    stmt.executeQuery(sql);   //执行sql语句
    //关闭连接
    rs.close();
    stmt.close();    
    conn.close();   

修改

    Statement stmt=conn.createStatement();   //创建SQL容器
    String sql="update person set age=21 where name = "dasyang" ";   //创建sql语句
    stmt.executeQuery(sql);   //执行sql语句
    //关闭连接
    rs.close();
    stmt.close();    
    conn.close();   

在上面的代码中,我们介绍了如何对数据库进行增删改查,但是上面的方法中,比如我们要动态的增加一个人或者修改某个人的数据,我们需要通过代码来控制sql字符串的内容,来达到目的,这样做非常的麻烦,而且一不小心就会出错,接下来我们介绍另一种操作数据库的方法,使用PreparedStatement来操作数据库。

PreparedStatement

以添加数据为例,在很多情况下,具体需要添加的值,是由客户自己输入的,因此,应该是一个个变量。该情况下,SQL 语句的写法就比较麻烦 ,而且依赖了变量,比较容易出错。PreparedStatement 帮助我们解决了这个问题,PreparedStatement 是 Statement 的子接口,功能与 Statement 类似,但是在PreparedStatement我们的数据可以使用?来代替,这里的?充当了占位符,具体表示的数据则可以通过setString(id,value)或者setInt(id,value)等方法来设置,具体的参数是什么类型,我们就使用不同的set方法,如果数据是double类型,我们就使用setDouble(id,value)。其中id表示的是在sql语句中的第几个’?‘,第一个’?‘的id为1。而value则是我们设置的值。

具体的使用举例如下:

条件查找:

    Statement stmt=conn.createStatement();   //创建SQL容器
    String sql="select * from person where name = ?”;   //创建sql语句,查询person表中某个人
    PreparedStatement ps=conn.prepareStatement(sql);
    ps.setString(1, "dasyang");//查找表中叫dasyang的人
    ResultSet rs= ps.executeQuery( );   //执行sql语句,并且获得结果集
   //遍历结果集
    while( rs.next() ) {   
        System.out.print(rs.getString("name")+"  ");
        System.out.print(rs.getString("age")+"  ");
        System.out.print(rs.getString("ses")+"  ");
        System.out.println();
    }
    //关闭连接
    rs.close();
    ps.close();   
    conn.close();   

插入:

    Statement stmt=conn.createStatement();   //创建SQL容器
    String sql="insert into person (name,age,sex) values(?,?,?);   //创建sql语句
    PreparedStatement ps=conn.prepareStatement(sql);
    ps.setString(1, "dasyang");
    ps.setInt(2, 20);
    ps.setString(3, "man");
    ps.executeQuery( );   //执行sql语句,并且获得结果集
    //关闭连接
    rs.close();
    ps.close();   
    conn.close();   

删除:

    Statement stmt=conn.createStatement();   //创建SQL容器
    String sql="delete from person where name = ?;   //创建sql语句
    PreparedStatement ps=conn.prepareStatement(sql);
    ps.setString(1, "dasyang");
    ps.executeQuery( );   //执行sql语句,并且获得结果集
    //关闭连接
    rs.close();
    ps.close();   
    conn.close();   

更新:

    Statement stmt=conn.createStatement();   //创建SQL容器
    String sql="update person set age=? where name=?;   //创建sql语句
    PreparedStatement ps=conn.prepareStatement(sql);
    ps.setInt(1, 20);
    ps.setString(2, "dasyang");
    ps.executeQuery( );   //执行sql语句,并且获得结果集
    //关闭连接
    rs.close();
    ps.close();   
    conn.close();   

通过使用上面的方法,可以使我们在操作条件查询、增加、删除以及修改变的更简单、自由,这种方法可以有效的减少我们在编程中的错误,也让代码变的更加简洁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值