必要流程
package database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* jdbc 操作数据库的标准流程
* @author Administrator
*
*/
public class JdbcDemo01 {
private static String DATABASE = "jdbc:mysql://localhost:3306/jdbc_practice";
private static String USER = "root";
private static String PWD = "000110";
public static void main(String[] args) throws Exception{
Class.forName("com.mysql.jdbc.Driver");
// 注册驱动,需要导入驱动jdbc驱动包
Connection conn = DriverManager.getConnection(DATABASE,USER,PWD);
// 获取connection连接
Statement stmt = conn.createStatement();
// 得到执行sql的语句的对象
// stmt.executeQuery(sql) //增删改查不创建result对象,执行该语句返回大于零表示数据库操作成功
ResultSet rs = stmt.executeQuery("select * from emp");
// 执行语句得到结果
while (rs.next()) {
System.out.println(rs.getObject("ename"));
}
rs.close();
stmt.close();
conn.close();
}
}
关闭资源的正确方式
使用JDK7新特性自动关闭IO操作
public static void jdbc_insertAutoClose(){
/**
* 使用jdk7新特性自动关闭资源
*/
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try (Connection conn = DriverManager.getConnection(DATABASE,USER,PWD);
Statement stmt = conn.createStatement()){// 自动关闭资源,把IO对象都定义到try后面的()里面,末尾不加';'
int flag = stmt.executeUpdate("update emp set empno = 7777 where empno = 6666");
stmt.executeUpdate("insert into emp (empno,ename,sal) values (1235,'kkkk',2222)");
if (flag >0)
System.out.println("插入成功");
else
System.out.println("插入失败");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
配置文件properties的使用方法
- 在工程目录下创建后缀名为.properties的文件
- 编辑要配置的键值对,等于两边不要加空格,换行不要加分号
- 在需要使用配置参数的类使用以下方法读取配置文件到内存中
ResourceBundle db = ResourceBundle.getBundle("database/db");
DB_URL = db.getString("db_url");
DB_USER = db.getString("db_user");
DB_PWD = db.getString("db_pwd");
DB_CLASS_DRIVER = db.getString("db_driverclass");
注意读取路径
重写类toString()方法可以自定义List对象的输出格式
在处理sql查询结果的时候,可以自定义一个类集合用于保存结果,以便于后期处理
自定义类:
package database;
public class User {
private String name;
private String job;
private int id;
private double sal;
public void setId(int id) {
this.id = id;
}
public int getId() {
return this.id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}// 定义输出格式
}
创建自定义对象集合,每一条查询结果为一个新的对象
conn = DriverManager.getConnection(DATABASE, USER, PWD);
// 创建连接数据库对象
stmt = conn.createStatement();
// 创建执行sql语句对象
rs = stmt.executeQuery("select * from emp");
// 创建结果对象,存入执行结果,增删改没有这一条
List<User> userList = new ArrayList<>();// 自定义输出对象
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("EMPNO"));
user.setName(rs.getString("ENAME"));
userList.add(user);
}
System.out.println(userList.toString());// 自定义对象输出格式,在类里面重写toString()方法
因为重写了toString()方法,所以可以直接打印集合
使用PreparedStatement防止SQL注入
String sql = "select * from login_db where user=? and pwd=?";// 使用占位符填充要查询的关键字
// 使用preparestatement防止sql注入
try ( Connection conn = DBUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)){// 自动关闭io操作
// 使用PreparedStatement代替Statement
stmt.setString(1, user);// sql语句赋值
stmt.setString(2, pwd);
try(ResultSet rs = stmt.executeQuery()) {// 执行语句的时候不需要加sql语句