java数据库连接 java database connectivity
期望使用统一的一套Java代码可以操作所有的关系型数据库
本质:sun公司定义的一套操作所有关系型数据库的接口。
使用步骤:
1.导入jar包(先创建文件夹lib,一般用来存储jar包)add as liabry
3.获取数据库连接对象Connection
4.定义sql
5.获取执行sql语句的对象Statement
6.执行sql,接受返回对象
7处理结果
8释放资源
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
importjava.sql.Statement;
public classJdbcDemo1 {
public static voidmain(String[] args)throws
ClassNotFoundException,SQLException {
//1.加载驱动进内存
Class.forName("com.mysql.jdbc.Driver");
//2.建立连接
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbjob","root","admin");
//localhost位置是主机ip,因为ip是本机,所以直接写localhost
//3.获取执行sql语句对象
Statement state = con.createStatement();
//4.执行sql语句
inti =state.executeUpdate("insertinto job values(6,'秘书','看手机');");
System.out.println(i);
//5.释放资源
state.close();
con.close();
}
}
ResultSet:结果集对象,封装查询结果
boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
getXxx(参数):获取数据
Xxx:代表数据类型 如: int getInt() , String getString()
参数:
1.int:代表列的编号,从1开始 如:getString(1)
2.String:代表列名称。 如: getDouble("balance")
使用步骤:
1. 游标向下移动一行
2. 判断是否有数据
3. 获取数据
使用ResultSet结果集:
importjava.sql.*;
public classJdbcDemo3 {
public static voidmain(String[]args) {
Connection con =null;
Statement state =null;
ResultSet resultSet =null;
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db03","root","admin");
state = con.createStatement();
String sql ="select*from job";
resultSet = state.executeQuery(sql);
while(resultSet.next()){
intid =resultSet.getInt(1);
String jname = resultSet.getString(2);
String description = resultSet.getString(3);
System.out.println(id +"=="+jname+"=="+description+"==");
}
}catch(ClassNotFoundExceptione) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally{
if(resultSet!=null){
try{
resultSet.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
if(state!=null){
try{
state.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
if(con!=null){
try{
con.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
}
抽取JDBC工具类 :JDBCUtils
目的:简化书写
分析:
1.注册驱动也抽取
2.抽取一个方法获取连接对象
需求:不想传递参数(麻烦),还得保证工具类的通用性。
解决:配置文件中
url=jdbc:mysql://localhost:3306/da03
user=root
password=admin
driver=com.mysql.jdbc.Driver
3.抽取一个方法释放资源
jdbc工具类代码如下:
packageUtil;
importjava.io.IOException;
importjava.io.InputStream;
importjava.sql.*;
importjava.util.Properties;
public classJDBCUtil {
private staticStringurl;
private staticStringuser;
private staticStringpassword;
private staticStringdriver;
static{
try{
Properties pro =newProperties();
ClassLoader classLoader = JDBCUtil.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("JdbcUtil.properties");
//加载文件
pro.load(is);
//获取数据,赋值
url= pro.getProperty("url");
user=pro.getProperty("user");
password= pro.getProperty("password");
driver=pro.getProperty("driver");
//注册驱动
Class.forName(driver);
}catch(IOException e) {
e.printStackTrace();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
*获取连接
*@return
*@throwsSQLException
*/
public staticConnectiongetConnection()throwsSQLException{
returnDriverManager.getConnection(url,user,password);
}
/**
*释放资源
*@paramrs
*@paramstmt
*@paramconn
*/
public static voidclose(ResultSetrs,Statement stmt,Connection conn){
if( rs!=null){
try{
rs.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
if(stmt !=null){
try{
stmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
if(conn !=null){
try{
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
5. PreparedStatement:执行sql的对象
1.SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题,输入密码:a' or 'a' = 'a
2.解决sql注入问题:使用PreparedStatement对象来解决
3.预编译的SQL:参数使用?作为占位符
注意:
1.sql的参数使用?作为占位符。
如:select * from user where username = ? and password = ?;
2.获取执行sql语句的对象 PreparedStatement Connection.prepareStatement(String sql)
3.给?赋值:
方法: setXxx(参数1,参数2)
参数1:?的位置编号 从1 开始
参数2:?的值
4.执行sql,接受返回结果,不需要传递sql语句
5.使用PreparedStatement来完成增删改查的所有操作
1.可以防止SQL注入
2.效率更高
importUtil.JDBCUtils;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.Scanner;
public classJdbcDemo7 {
public static voidmain(String[]args){
Scanner sc =newScanner(System.in);
System.out.println("输入用户名");
String username = sc.nextLine();
System.out.println("输入密码");
String password = sc.nextLine();
booleanb =newJdbcDemo7().login2(username,password);
if(b){
System.out.println("登陆成功");
}else{
System.out.println("登陆失败");
}
}
public booleanlogin2(String username,String password){
if(username==null|| password ==null){
return false;
}
ResultSet rs =null;
PreparedStatement prepar =null;
Connection conn =null;
try{
conn = JDBCUtils.getConnection();
String sql ="select*from login where username = ? and password= ?";
prepar = conn.prepareStatement(sql);
//给?赋值
prepar.setString(1,username);
prepar.setString(2,password);
//执行查询
rs = prepar.executeQuery();
returnrs.next();
}catch(SQLException e) {
e.printStackTrace();
}finally{
JDBCUtils.close(rs,prepar,conn);
}
return false;
}
}
如果你觉得这个公众号不错,保存下面二维码,分享给你的好友吧!
领取专属 10元无门槛券
私享最新 技术干货