COMPLEX-B

导航

jdbc连接数据库

必要流程

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语句

posted on 2019-04-08 21:12  COMPLEX-B  阅读(177)  评论(0编辑  收藏  举报