JDBC简介
JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用JDBC可以将JAVA代码连接到oracle、DB2、SQLServer、MYSQL等数据库,从而实现对数据库中的数据操作的目的。
JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口,是一种SQL级的API。它是由java语言编写完成,所以具有很好的跨平台特性,使用JDBC编写的数据库应用程序可以在任何支持java的平台上运行,而不必在不同的平台上编写不同的应用程序。
JDBC的主要功能
(1)建立与数据库或者其他数据源的连接
(2)向数据库发送SQL指令
(3)处理数据库的返回结果
JDBC的连接步骤
1.导入mysql的驱动jar包:mysql-connector-java-5.1.34-bin.jar
手动创建lib目录,添加jar包,并点击右键build path.
Add to build path 成功
2.准备工作做完,开始我们的代码阶段。
开发步骤:
1.加载驱动。
2.获取数据库连接。
3.sql语句书写。
4.执行sql语句。
5.返回执行结果。
public class DBUtil {
static String driver="com.mysql.jdbc.Driver";//驱动
static String url="jdbc:mysql://localhost:3306/homework?//地址characterEncoding=utf8";
static String user="root";//用户名
static String password="123456";//密码
//第一步:由于驱动只需要执行一次,所以使用static静态代码块
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//查看
public static void getAllInF(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
//第二步:创建连接DriverManager.getConnection(url,username,password)
conn=DriverManager.getConnection(url,user,password);
//第三步:获取sql语句
String sql="select * from stu"; //输入我们想要执行的sql语句。
//第四步:
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
//返回值boolean值
int id=rs.getInt("id");
String name=rs.getString("name");
int age=rs.getInt("age");
String major=rs.getString("major");
System.out.println("id:"+id+" name:"+name+"age:"+age+" major:"+major);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//关闭资源,先开的后关
if(rt!=null){
try {
rt.close();
if(ps!=null){
ps.close();
if(conn!=null){
conn.close();
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
如果我们每次去执行sql语句的时候都加载一次驱动,且建立连接的话,会非常的不方便,所以我们将公共的代码提出来,封装成一个方法,需要的时候只需要调用就好了。
public class DBUtil {
static String driver="com.mysql.jdbc.Driver";
static String url="jdbc:mysql://127.0.0.1:3306/homework?characterEncoding=utf8";
static String user="root";
static String password="123456";
//加载数据库驱动 所有方法都使用静态的 方便使用 记得处理异常
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取数据库连接 记得是对象调用该方法会得到已经连接了数据库的对象
public static Connection getConn() throws SQLException{
return DriverManager.getConnection(url,user,password);
}
//关闭资源
public static void close(ResultSet rt,PreparedStatement ps, Connection conn){
if(rt!=null){
try {
rt.close();
if(ps!=null){
ps.close();
if(conn!=null){
conn.close();
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
方法封装完成,我们试着完成一次sql操作:
public List<StuBean> getAll() {
List<StuBean> list= new ArrayList<StuBean>();
try {
Connection conn = DBUtil.getConn();
String sql = "select * from select * from stu";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
int id=rs.getInt("id");
String name=rs.getString("name");
int age=rs.getInt("age");
String major=rs.getString("major");
System.out.println("id:"+id+" name:"+name+"age:"+age+" major:"+major);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
当然,这只是查询操作,我们还可以进行删除,修改等操作。而且只需要调用连接方法就可以完成数据库连接,这会节省我们大量时间和精力。
使用properties配置文件
实际应用中,我们需要获得四个参数(驱动,URL,用户名,密码),通常都放在配置文件,如果我们需要更换数据库,只需要更改配置文件中的参数即可。通常情况下,我们习惯使用properties文件进行配置
文件位置:可以放在任意位置,但是我们建议放在src下
文件名称:任意,后缀名是.propertiesj即可。
文件内容:一行一组数据,格式为"key=value".
key可以自定义,如果是多个单词,习惯使用.隔开,如jdbc.driver
value不支持中文,如果不使用非英文字符,将进行unicode转换
首先我们创建properties文件db.properties,文件内容如下:
driver=com.mysql.jdbc.Driver;
url=jdbc:mysql://localhost:3306/homework?characterEncoding=utf8;
user=root;
password=123456;
加载配置文件,进行数据库连接
方式一
public class JDBCUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
/**
* 静态代码块加载配置文件信息
*/
static{
ResourceBundle bundle = ResourceBundle.getBundle("db");
driver = bundle.getString("driver");
url = bundle.getString("url");
username = bundle.getString("username");
password = bundle.getString("password");
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取连接方法
*
* @return
*/
public static Connection getConn() throws SQLException{
return DriverManager.getConnection(url,username,password);
}
//关闭资源
public static void close(ResultSet rt,PreparedStatement ps, Connection conn){
if(rt!=null){
try {
rt.close();
if(ps!=null){
ps.close();
if(conn!=null){
conn.close();
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
方式二
public class JDBCUtils_01 {
private static String driver;
private static String url;
private static String username;
private static String password;
/**
* 静态代码块加载配置文件信息
*/
static {
try {
// 1.通过当前类获取类加载器
ClassLoader classLoader = JDBCUtils_V3.class.getClassLoader();
// 2.通过类加载器的方法获得一个输入流
InputStream is = classLoader.getResourceAsStream("db.properties");
// 3.创建一个properties对象
Properties props = new Properties();
// 4.加载输入流
props.load(is);
// 5.获取相关参数的值
driver = props.getProperty("driver");
url = props.getProperty("url");
username = props.getProperty("username");
password = props.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取连接方法
*
* @return
*/
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
//关闭资源
public static void close(ResultSet rt,PreparedStatement ps, Connection conn){
if(rt!=null){
try {
rt.close();
if(ps!=null){
ps.close();
if(conn!=null){
conn.close();
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}