欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于mysql/oracle数据库的jdbc连接及调用

程序员文章站 2022-03-29 19:40:12
...

本博文开发工具为eclipse用来进行java源代码编写,主要是针对mysql、oracle与java中数据连接接口jdbc,在从java中怎么去调用进行代码编写。
mysql驱动包oracle驱动包

创建Properties文件

在所需要的src项右击打开,展开目录下的new,在new下继续展开后点击File。
关于mysql/oracle数据库的jdbc连接及调用
点击后,在File name 中取个名字 但是注意 文件后缀名为properties,点击finish。
关于mysql/oracle数据库的jdbc连接及调用
点击所创建的properties,将连接的四要素以键值对的形式编写,注意结尾不许要分号,换行即可,使用哪种数据库就用对应 的四要素,不需要的需注释(properties中整行注释为首处加#)

//mysql连接四要素
Driver=com.mysql.jdbc.Driver//mysql连接驱动
Url=jdbc:mysql://localhost:3306/test//mysql连接地址,后面test为数据库名
Name = root//端口连接账号
Password = root//端口连接密码

//oracle连接四要素
driver=com.oracle.jdbc.Driver//oracle连接驱动
url=jdbc:oracle:thin://localhost:3306/test//oracle连接地址,后面test为数据库名
name=root//端口连接账号
pass=root//端口连接密码

编写JDBC连接接口

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class UtilJdbc {
	/*
	0. 设置数据源的四要素:驱动、连接、用户名、密码
	*/
	private static String DRIVER;
	private static String URL ;
	private static String NAME;
	private static String PASSWORD ;
	/*
	1. 加载数据库驱动
	*/
	static {
		try {
			//1.加载外部的db.properties文件
			InputStream is = UtilJdbc.class.getResourceAsStream("/test.properties");
			//2.实例化一个properties对象
			Properties prop = new Properties();
			//3.properties对象加载is流
			prop.load(is);
			//4.通过properties对象,获得db.properties文件中的值
			DRIVER = prop.getProperty("Driver");
			URL = prop.getProperty("Url");
			NAME = prop.getProperty("Name");
			PASSWORD = prop.getProperty("Password");
		
			//加载驱动
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 2. 获得数据库连接
	 */
	public final static Connection getConnection() {
		Connection con =null;
		try {
			//利用Connection接收地址,用户名,密码
			con= DriverManager.getConnection(URL, NAME, PASSWORD);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}
	/**
	 * 3. 关闭数据库连接,释放资源---运用重载方便调用
	 */
	public static void close(Connection con, PreparedStatement pstmt, ResultSet rs){
		try {
			if (con != null) {
				con.close();
			}
			if (pstmt != null) {
				pstmt.close();
			}
			if (rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void close(Connection con, PreparedStatement pstmt) {
		close(con, pstmt, null);
	}

	public static void close(Connection con){
		close(con, null, null);
	}
}

创建mysql数据库

注意数据库中表中的列名和各个列名的数据类型及约束,看以下简单的数据库表(mysql数据库为例)

id INT PRIMARY KEY AUTO_INCREMENT 编号,主键,自增
uname VARCHAR(20) NOT NULL UNIQUE 用户名,非空,唯一
upass VARCHAR(65) NOT NULL 密码,非空
status INT DEFAULT 1 状态,默认为1,1为启用,0为禁用
regtime TIMESTAMP DEFAULT NOW() 当前时间

创建并且封装entity实体类

根据数据库的数据类型设置java属性的数据类型,注意使用toString()重写

import java.util.Date;
public class User {
	private Integer uid;//id
	private String uname;//用户名
	private String upass;//密码
	private Integer status;//状态
	private Date regtime;//注册时间
	/**
	 * 构造方法
	 */
	public User() {
		super();
	}
	public User(int uid) {
		super();
		this.uid = uid;
	}
	public User(int uid, String uname) {
		super();
		this.uid = uid;
		this.uname = uname;
	}
	public User(int uid, String uname, String upass) {
		super();
		this.uid = uid;
		this.uname = uname;
		this.upass = upass;
	}
		public User(int uid, String uname, String upass, Integer status) {
		super();
		this.uid = uid;
		this.uname = uname;
		this.upass = upass;
		this.status = status;
	}
	public User(int uid, String uname, String upass, Integer status, Date regtime) {
		super();
		this.uid = uid;
		this.uname = uname;
		this.upass = upass;
		this.status = status;
		this.regtime = regtime;
	}
	/**
	 * get,set方法,封装属性,开放方法
	 */
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUpass() {
		return upass;
	}
	public void setUpass(String upass) {
		this.upass = upass;
	}
		public Integer getStatus() {
		return status;
	}
	public void setStatus(Integer status) {
		this.status = status;
	}
	public Date getRegtime() {
		return regtime;
	}
	public void setRegtime(Date regtime) {
		this.regtime = regtime;
	}
	@Override
	public String toString() {
		return "User [uid=" + uid + ", uname=" + uname + ", upass=" + upass + ", status=" + status + ", regtime="
				+ regtime + "]";
	}
}

创建dao工具包,存放公共类

在这演示添加用户和查询用户方法,注意MD5()为数据库mysql一种加密方式

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 对User实体类进行CURD
 * -- 实际就是对tb_user表进行CURD
 * @author Administrator
 *
 */
public class UserDao {
	private Connection con = null;
	private PreparedStatement ps = null;
	private ResultSet rs = null;
	
	/**
	 * 增加操作
	 * @param user
	 * 接收一个User对象,将对象添加到数据库表中
	 */
	public int addUser(User user) {
		// 定义要执行的SQL语句
		String sql = "INSERT tb_users(`uname`, `upass`) VALUES('"+ user.getUname() +"', MD5('"+ user.getUpass() +"'))";
		// 设置
		int n = 0;
		try {
			//通过DBUtis类中的getConnection方法获得与数据库的连接
			con = UtilJdbc.getConnection();
			//预编译执行上面定义的SQL语句(不是真正执行)
			ps = con.prepareStatement(sql);   //预编译
			//执行SQL
			n = ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			UtilJdbc.close(con, ps);
		}
		return n;
	}
	/**
	 * 查询操作
	 * -- 查询表中所有记录
	 */
	public List<User> getAllUser(){
		String sql = "select * from tb_users";
		List<User> users = new ArrayList<User>();
		try {
			//获得连接
			con = UtilJdbc.getConnection();
			//执行sql
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();   //获得查询出来的结果集
			while(rs.next()) {
				int uid = rs.getInt("id");
				String userName = rs.getString("uname");
				String password = rs.getString("uname");
				int status = rs.getInt("status");
				Date regtime = rs.getDate("regtime");
				//实例化一个User对象,并添加到List集合
				users.add(new User(uid, userName, password, status, regtime));
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			UtilJdbc.close(con, ps, rs);
		}
		return users;
	}
}

编写测试类Test

实例化一个用户User,添加用户和密码

public class Test {
	public static void main(String[] args) {
		User user = new User();
		user.setUname("administrator");
		user.setUpass("123456");
				
		int n = new UserDao().addUser(user);
		if(n>0) {
			System.out.println("添加成功");
		}else {
			System.out.println("添加失败");
		}
	}
}

为了明显看List集合的,再添加一个用户,然后进行通过Test类进行查询

public class Test {
	public static void main(String[] args) {
//		User user = new User();
//		user.setUname("Tester");
//		user.setUpass("654321");
//		
//		int n = new UserDao().addUser(user);
//		if(n>0) {
//			System.out.println("添加成功");
//		}else {
//			System.out.println("添加失败");
//		}
		List<User> users = new UserDao().getAllUser();
		for (User user : users) {
			System.out.println(user);
		}
	}
}

查询结果

mysql里面的数据库数据,注意upass列,是通过MD5()进行加密的
关于mysql/oracle数据库的jdbc连接及调用
eclipse中控制台查询结果
关于mysql/oracle数据库的jdbc连接及调用

注意点:

1.导包时不要导错;
2.MD5()加密方式是mysql里面对数据的一种加密方式;
3.实体类中注意要重写;
4.添加数据时,注意数据库uname是有唯一约束的,所有不能有同样的用户名进行添加,否则会报错;
5.查询多条用集合接收,查询单条用对象接收即可;
6.一定要导入驱动包,否则会报错,下载:mysql驱动包oracle驱动包
7.oracle与mysql不同点就是Properties文件里面连接地址不一样,还有就是导入的驱动包不一样,其他一样
8.数据库出现乱码的问题,主要是因为没有在创建表的时候加UTF-8,在表后添加:ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
关于mysql/oracle数据库的jdbc连接及调用
9.主键是不可重复的,在编写sql语句的时候如果是添加id可使用default。

相关标签: java与mysql基础