JDBC (java连接数据库)

  这是我这两天连夜奋战(自学,在这之前没接触过)的辛苦成果,就参考了教材和JDK API文档,残缺的视频教程写的,后又有点改进(优化)。

    我总结了一下:这JDBC初级中主要用到了三个接口,一个类(他们的使用方法和主要方法我都在程序后加了注释,可以参考),都是java.sq包中的。基本步骤我在程序重都加了注释,这里不详细介绍了。(所用的数据库是oracle)

   下面我来分类介绍:

1.。。。表的创建     (基于这张表的操作)

drop table person;
create table person
(
pid number(3),
pname varchar2(20),
padress varchar2(20)
);

 

2.。。。。主程序      (注册驱动 对数据库的四种操作)

注意:其中关于person_infomation pi 的传值,person_infomation是表的信息类在后面给出了,可以连接起来看。

package JDBC;

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

public class oracle_demo {
    
private Connection conn=null;
private Statement stmt=null;
private ResultSet rse=null;
// private int pid=0;
// private String pname=null;
// private String padress=null;
    //用构造方法来注册驱动
      public oracle_demo()
      {
         //注册驱动
         try {
           Class.forName("oracle.jdbc.driver.OracleDriver");
              }
         catch (ClassNotFoundException e)
             {
           e.printStackTrace();
             }
      }
      //向数据库中增加数据
      public void addperson(person_information pi)
      {
         try
          {
    // 连接数据库
              conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ora9i","scott","tiger");
    //SQL语句对象
        stmt=conn.createStatement();
     //构造SQL语句
        String strSql="insert into person values("+pi.getpid()+",'"+pi.getpname()+"','"+pi.getadress()+"')";
        stmt.executeUpdate(strSql);
           }
     catch (Exception e)
     {
      e.printStackTrace();
     }
     finally
          {
             oracle_demo.statementClose(stmt);
          oracle_demo.connClose(conn);
           }
      }
       //删除数据库中指定条件的数据  
      public void deleteperson(int id)
       {
     // int pid=0;
     //   String pname=null,padress=null;
        try {
        conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ora9i","scott", "tiger");
         }
        catch (SQLException e)
            {
       e.printStackTrace();
         }
     try
       {
        stmt=conn.createStatement();
        }
     catch(Exception e)
        {
      e.printStackTrace();
        }
    String strSQL="DELETE person WHERE pid="+id;
    try {
      stmt.executeUpdate(strSQL);
       }
    catch (SQLException e)
       {
      e.printStackTrace();
       }
    finally
      {
     oracle_demo.statementClose(stmt);
     oracle_demo.connClose(conn);
      }
       }
       //更改数据库中指定条件的数据
       public void updateperson(person_information pi)
       {
     try {
     conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ora9i", "scott", "tiger");
        }
     catch (SQLException e)
        {
      e.printStackTrace();
        }
    try {
        stmt=conn.createStatement();
        }
    catch (SQLException e)
        {
      e.printStackTrace();
        }
    String strSQL="UPDATE person set pname='"+pi.getpname()+"',padress='"+pi.getadress()+"' WHERE pid="+pi.getpid();
    try {
      stmt.executeUpdate(strSQL);
       }
    catch (SQLException e)
       {
     e.printStackTrace();
        }
    finally
    {
     oracle_demo.statementClose(stmt);
     oracle_demo.connClose(conn);
    }
   
       }
       //查询数据库中指定条件的数据
     public void queryperson(int id)
     {
        int pid=0 ;
      String pname=null,padress=null;
     try {
       conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ora9i",
              "scott","tiger");
          }
     catch (SQLException e1)
          {
        e1.printStackTrace();
           }
     //创建SQL语句对象
      try {
         stmt=conn.createStatement();
           }
      catch (SQLException e1)
           {
         e1.printStackTrace();
           }
     String strSQL="SELECT pid,pname,padress FROM person WHERE pid="+id;
       try {
          rse = stmt.executeQuery(strSQL);
           }
       catch (SQLException e1)
           {
            e1.printStackTrace();
            }
     //利用循环语句遍历结果集中的每一行
     try {
     while(rse.next())
      {
       pid=rse.getInt(1);   //按属性列的序号获取id号,属性列从1开始
       if(rse.wasNull())
       {
        pid=-1;
       }
       pname=rse.getString(2);
       if(rse.wasNull())
       {
        pname=null;
       }
       padress=rse.getString(3);
       if(rse.wasNull())
       {
        padress=null;
       }
      }
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    finally
    {
     oracle_demo.resultClose(rse);
     oracle_demo.statementClose(stmt);
     oracle_demo.connClose(conn);
    }
    System.out.println(pid+","+pname+","+padress);
     }
    
     public static void resultClose(ResultSet rs)
     {
     //关闭结果集
     try {
     rs.close();
    } catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
     }
    
     public static void statementClose(Statement stmt)
     {
     //关闭语句对象
     try {
      if(stmt!=null)
     stmt.close();
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    }
    
     public static void connClose(Connection conn)
     {
     //关闭数据库连接对象
     try {
        if(conn!=null)
     conn.close();
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
     }
}

 


/*
* DriverManager类中的方法
* getConnection
public static Connection getConnection(String url,
                                       String user,
                                       String password)
throws SQLException试图建立到给定数据库 URL 的连接。
DriverManager 试图从已注册的驱动程序集中选择一个适当的驱动程序。
参数:
url - jdbc:subprotocol:subname 形式的数据库 url
user - 数据库用户,连接是为该用户建立的
password - 用户的密码
返回:
到 URL 的连接    //(Connection类型的返回值)
抛出:
SQLException - 如果发生数据库访问错误

*
*
*
*
* public interface Connection
与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
它中的方法createStatement()
          创建一个 Statement 对象来将 SQL 语句发送到数据库
createStatement
Statement createStatement()
throws SQLException创建一个 Statement 对象来将 SQL 语句发送到数据库。
没有参数的 SQL 语句通常使用 Statement 对象执行。如果多次执行相同的 SQL 语句,
使用 PreparedStatement 对象可能更有效。
使用返回的 Statement 对象创建的结果集在默认情况下类型为 TYPE_FORWARD_ONLY,
并带有 CONCUR_READ_ONLY 并发级别。
返回:
一个新的默认 Statement 对象
抛出:
SQLException - 如果发生数据库访问错误

 


public interface PreparedStatementextends Statement表示预编译的 SQL 语句的对象。
SQL 语句被预编译并且存储在 PreparedStatement 对象中。然后可以使用此对象高效地多次执行该语句。

                   
Statement是接口
子接口中方法:
executeQuery
ResultSet executeQuery(String sql)
      throws SQLException执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
参数:
sql - 要发送给数据库的 SQL 语句,通常为静态 SQL SELECT 语句
返回:
包含给定查询所生成数据的 ResultSet 对象;永远不能为 null
抛出:
SQLException - 如果发生数据库访问错误或者给定 SQL 语句生成单个 ResultSet 对象之外的任何其他内容

 

ResultSet是接口:
方法:getString
String getString(int columnIndex)
throws SQLException以 Java 编程语言中 String 的形式检索此 ResultSet 对象的当前行中指定列的值。
参数:
columnIndex - 第一个列是 1,第二个列是 2,……
返回:
列值;如果值为 SQL NULL,则返回值为 null
抛出:
SQLException - 如果发生数据库访问错误

方法:
next
boolean next()
throws SQLException将指针从当前位置下移一行。ResultSet 指针最初位于第一行之前;
第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。
如果开启了对当前行的输入流,则调用 next 方法将隐式关闭它。读取新行时,将清除 ResultSet 对象的警告链。
返回:
如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false
抛出:
SQLException - 如果发生数据库访问错误


方法:
wasNull
boolean wasNull()
throws SQLException报告最后一个读取的列是否具有值 SQL NULL。
注意,必须首先对列调用一个获取方法来尝试读取其值,然后调用 wasNull 方法查看读取的值是否为 SQL NULL。
返回:
如果最后一个读取的列值为 SQL NULL,则返回 true;否则返回 false
抛出:
SQLException - 如果发生数据库访问错误

*/

 

3.。。。。。。person_information类

package JDBC;

public class person_information {

private int pid;
private String pname;
private String padress;
public person_information(int id,String name,String adress)
{
   pid=id;
   pname=name;
   padress=adress;
}
public person_information()
{
}

public void setpid(int id)
{
   pid=id;
}
public void setpname(String name)
{
   pname=name;
}
public void setpadress(String adress)
{
   padress=adress;
}
public int getpid()
{
   return pid;
}
public String getpname()
{
   return pname;
}
public String getadress()
{
   return padress;
}

}

 

 

4.。。。。我写的一个测试类

当然我先写了几条数据到数据库,这里只给出他的用法,具体的使用自己可也随便。

package JDBC;

public class Test {
public static void main(String[] args)
{
    oracle_demo ps=new oracle_demo();
   person_information pi6=new person_information(6,"包拯","河南");
    person_information pi3=new person_information(3,"黄晓明","china");
    ps.addperson(pi6);
    ps.deleteperson(1);
    ps.updateperson(pi3);
for(int i=1;i<7;i++)
    {
   ps.queryperson(i);
    }
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值