七步让Java程序通过JDBC连接数据库!
- 1. 加载数据库驱动
- 2.负责与要操作的数据库建立连接
- 3.创建要执行的SQL命令。例如:
- 4.创建一个执行增删改查操作的人员(statement)
- 5.调用statement执行SQL命令的方法,并保存结果。
- 6.处理返回的结果
- 7.释放资源
- 除此之外
1. 加载数据库驱动
String DRIVER = "com.mysql.jdbc.Driver";
Class.forName(DRIVER);
2.负责与要操作的数据库建立连接
String URL = "jdbc:mysql://localhost:3306/dbs_jxc?characterEncoding=UTF8&useUnicode=true&useSSL=false";
String USERNAME = "数据库账号";
String PASSWORD = "数据库密码";
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
3.创建要执行的SQL命令。例如:
String sql_1 = "select * from user";
String sql_2 = "insert into user values(id,name,pwd)";
4.创建一个执行增删改查操作的人员(statement)
PreparedStatement pst_1 = connection.prepareStatement(sql_1);
PreparedStatement pst_2 = connection.prepareStatement(sql_2);
5.调用statement执行SQL命令的方法,并保存结果。
executeQuery() // 返回结果集,适合对数据库查询时使用
return pst_1.executeQuery();
executeUpdate() // 返回被影响行数,适合对数据库增删改时使用
return pst_2.executeUpdate();
6.处理返回的结果
根据程序需要来自定义
7.释放资源
try {
if(rs != null) {
rs.close();
}
if (pst_1 != null) {
pst.close();
}
if (pst_2 != null) {
pst.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
除此之外
贴一下我和东软老师学习的时候创建的一个对数据库操作的工具包,有需要的同学可以自行查看或复制。
package systemERP.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 将操作数据库的一些共有代码进行提取
* @author Administrator
*
*/
public class database {
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/dbs_jxc?characterEncoding=UTF8&useUnicode=true&useSSL=false";
private static final String USERNAME = "root";
private static final String PASSWORD = "200153";
// 定义一个获得数据库连接的方法
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 获得配置文件中的数据
/*Properties pro = new Properties();// 反射
InputStream inStream = DataBase.class.getClassLoader().getResourceAsStream("db.properties");
System.out.println(inStream);
// 加载配置文件
// 获得配置文件中的数据
String driver = pro.getProperty("driver");
String url = pro.getProperty("url");
String username = pro.getProperty("username");
String pwd = pro.getProperty("pwd");
Class.forName(driver);
conn = DriverManager.getConnection(url, username, pwd);*/
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//
/**
* 定义一个通用的增删改方法
* @param sql 要执行的增删改的失去了命令
* @param params 调用方法时给的参数列表
* @return 执行SQL命令后的受影响行数
* ... 表示它是一个可变长度的数组
*/
public static int executeUpdateAll(String sql,Object ... params) {
// 获得连接对象
Connection conn = getConnection();
PreparedStatement pst = null;
// 创建执行对象
try {
pst = conn.prepareStatement(sql);
// 为sql命令中的占位符赋值
if(params != null) {
for (int i = 0; i < params.length; i++) {
pst.setObject((i+1), params[i]);
}
}
// 调用方法并返回结果
return pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
closeAll(conn, pst, null);
}
return 0;
}
// 查询方法
public static ResultSet myQuery(String sql,Object ... params) {
// 获得连接对象
Connection conn = getConnection();
PreparedStatement pst = null;
// 创建执行对象
try {
pst = conn.prepareStatement(sql);
// 为sql命令中的占位符赋值
if(params != null) {
for (int i = 0; i < params.length; i++) {
pst.setObject((i+1), params[i]);
}
}
// 调用方法并返回结果
return pst.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
// 释放资源的方法
public static void closeAll(Connection conn,
PreparedStatement pst,
ResultSet rs) {
try {
if(rs != null) {
rs.close();
}
if (pst != null) {
pst.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}