关于mysql/oracle数据库的jdbc连接及调用
本博文开发工具为eclipse用来进行java源代码编写,主要是针对mysql、oracle与java中数据连接接口jdbc,在从java中怎么去调用进行代码编写。
mysql驱动包,oracle驱动包
创建Properties文件
在所需要的src项右击打开,展开目录下的new,在new下继续展开后点击File。
点击后,在File name 中取个名字 但是注意 文件后缀名为properties,点击finish。
点击所创建的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()进行加密的
eclipse中控制台查询结果
注意点:
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;
9.主键是不可重复的,在编写sql语句的时候如果是添加id可使用default。
推荐阅读
-
关于Oracle中sys、system和Scott用户下的数据库连接问题
-
JSP使用JDBC连接MYSQL数据库的方法
-
使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法
-
node.js平台下的mysql数据库配置及连接
-
使用JDBC连接Mysql数据库会出现的问题总结
-
加载MySQL、Oracle、SQL Server 2000、SQL Server 2005及以上版本 的加载数据库驱动程序
-
php连接oracle数据库及查询数据的方法
-
Java语言使用JDBC连接Mysql数据库的详细步骤,以及详细解释(一)
-
JSP中使用JDBC连接MySQL数据库的详细步骤
-
jdbc 数据库的连接(sqlserver oracle)