博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(十七)jdbc(Java Data Base Connectivity,java数据库连接)基础使用
阅读量:6615 次
发布时间:2019-06-24

本文共 4848 字,大约阅读时间需要 16 分钟。

一、JDBC相关概念介绍

  1.1  JDBC介绍

  SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC。这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加载具体的驱动,就可以操作数据库。

如下图所示:

 

二、编写JDBC程序

  2.1  搭建实验环境

    A. 启动mysql数据库,即开启mysql/bin/mysqld.exe。

    B. 创建数据库,并创建所需的表。如下图(在创建数据库和表的时候请对其编码设置为utf-8编码否则后期容易出错):

 

   2.2  创建一个web工程,并导入数据库驱动包。

 

  2.3  编写javabean,即PO对象又叫持久化对象,此对象的成员属性与数据库的列一一对应,本例中数据库与userName和passWd两列,则PO对象中也应该有这两个成员属性。

UserPO.java

package po;public class UserPO {	private String userName;	private String passWd;	public String getUserName() {		return userName;	}	public void setUserName(String userName) {		this.userName = userName;	}	public String getPassWd() {		return passWd;	}	public void setPassWd(String passWd) {		this.passWd = passWd;	}	}

 解析: javabean对象中成员属性应该是private的,且必须要有get()和set()方法。

 

  2.4  创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类。

  • UserPOI.java
package dao;import java.util.List;import po.UserPO;public interface UserPOI {	public boolean addUser(UserPO user);	public List
gets(); }
  •  UserPOImpl.java(可优化本文件代码,在第十八篇中讲解)
package dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import po.UserPO;public class userPOImpl implements UserPOI {	public boolean addUser(UserPO user) {		boolean flag=false;		Connection conn=null;		Statement stat=null;		try {			//加载数据库驱动			Class.forName("com.mysql.jdbc.Driver");			//从驱动中获取数据库的链接			conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8", "root", "");			//创建条件语句对象,即创建数据库中写入sql语句的对象			stat= conn.createStatement();			//执行sql语句,并得到如果是增删改操作都是用executeUpdate()方法返回执行成功的记录的条数,如果是查操作得到ResultSet返回值			int res=stat.executeUpdate("insert into user values('"+user.getUserName()+"','"+user.getPassWd()+"') ");			if(res!=0){	//如果res不等于0则说明sql语句执行成功。				flag=true;			}								} catch (Exception e) {			e.printStackTrace();		}finally{			try{				if(conn!=null && !conn.isClosed()){					conn.close();				}				if(stat!=null && stat.isClosed()){					stat.close();				}			}catch(Exception e){				e.printStackTrace();			}		}					return flag;	}	public List
gets() { List
list=new ArrayList
(); Connection conn=null; Statement stat=null; ResultSet res=null; try { Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8", "root", ""); stat=conn.createStatement(); res=stat.executeQuery("select * from user"); while(res.next()){ //不能是if UserPO user=new UserPO();    //注意这里的new UserPO()的位置,不能放在外面new 否则list里只有一个对象 user.setUserName(res.getString("userName")); user.setPassWd(res.getString("passWd")); list.add(user); } } catch (Exception e) { e.printStackTrace(); }finally{ try{ if(conn!=null && !conn.isClosed()){ conn.close(); } if(stat!=null && stat.isClosed()){ stat.close(); } if(res!=null && res.isClosed()){ res.close(); } }catch(Exception e){ e.printStackTrace(); } } return list; }}

   

  2.5  创建测试类进行测试。

  • UserTest.java
package test;import java.util.List;import org.junit.Test;import dao.userPOImpl;import po.UserPO;public class UserTest {	@Test	public void UserPOTest(){		userPOImpl im=new userPOImpl();				UserPO user=new UserPO();		user.setUserName("张三");		user.setPassWd("123");		im.addUser(user);	}		@Test	public void userPOget(){		userPOImpl im=new userPOImpl();		List
list=im.gets(); for(int i=0;i

 结果:

 

 三、注意

  • URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

 

  • 常用数据库URL地址的写法:
  • Oracle写法:jdbc:oracle:thin:@localhost:1521:sid
  • SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
  • MySql写法:jdbc:mysql://localhost:3306/sid

 

  • Statement类讲解
  Jdbc程序中的Statement对象用于向数据库发送SQL语句, Statement对象常用方法:
  • executeQuery(String sql) :用于向数据发送查询语句。
  • executeUpdate(String sql):用于向数据库发送insert、update或delete语句
  • execute(String sql):用于向数据库发送任意sql语句
  • addBatch(String sql) :把多条sql语句放到一个批处理中。
  • executeBatch():向数据库发送一批sql语句执行。

 

 

  • ResultSet类讲解
  Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
  ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
  获取任意类型的数据
    getObject(int index)
    getObject(string columnName)
  获取指定类型的数据,例如:
    getString(int index)
    getString(String columnName)
  ResultSet还提供了对结果集进行滚动的方法:
  • next():移动到下一行
  • Previous():移动到前一行
  • absolute(int row):移动到指定行
  • beforeFirst():移动resultSet的最前面。
  • afterLast() :移动到resultSet的最后面。

 

  

  • 释放资源
  Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象,特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
  为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

 

转载于:https://www.cnblogs.com/shyroke/p/6511539.html

你可能感兴趣的文章